           (debug e "exception while snapshotting"))))))
 
 (defn metric-key
-  [^MetricTuple k resolution]
-  (MetricKey. k resolution (nbhm) (drift-slot)))
+  [^MetricTuple k]
+  (MetricKey. k (nbhm) (drift-slot)))
 
 (defn tuple
-  [^String id ^String path]
+  [^Resolution id ^String path]
   (MetricTuple. id path))
 
 (comment
-  (let [k   (tuple "foo" "bar")
-        mk  (metric-key k {:precision 5 :id "foo"})
+  (let [k   (tuple (Resolution. 5 3600) "foo")
+        mk  (metric-key k)
         now (quot (System/currentTimeMillis) 1000)]
     (add! mk {:time (- now 5) :metric 1.0 :path "bar"})
     (add! mk {:time (- now 5) :metric 1.0 :path "bar"})


(defprotocol Mutable
  (add! [this metric]))


(defprotocol Snapshotable
  (snapshot! [this]))

    (* p (quot now p))))

(defn insert-slot!
  [time-slots k]
  (let [slot (MetricTimeSlot.
              k
              (AtomicLong. 0)
