 (defn- record!
   "Helper to record an event to the metered store if a recording function is
   present."
-  [store metric-type value & {:as attrs}]
-  (let [event (assoc attrs
-                     :type metric-type
-                     :label (meter-label store)
-                     :value value)]
-    (when-not (s/valid? ::event event)
-      (log/warn "Block metric event is invalid:" (s/explain-str ::event event)))
-    (when-let [recorder (::recorder store)]
-      (try
-        (recorder store event)
-        (catch Exception ex
-          (log/warn ex "Failure while recording metric"))))))
+  [store metric-type value attrs]
+  (when-let [recorder (::recorder store)]
+    (try
+      (recorder
+        store
+        (assoc attrs
+               :type metric-type
+               :label (meter-label store)
+               :value value))
+      (catch Exception ex
+        (log/warn ex "Failure while recording metric")))))
 
 
 

                              (name metric-type) label block-id
                              (format-bytes sum "B")
                              (format-bytes (/ sum elapsed) "Bps"))
                  (record! store metric-type sum :block block-id)
                  (vreset! meter [(System/nanoTime) 0]))))]
      (proxy [ProxyInputStream] [input-stream]


  well, and it is up to the receiver to interpret them."
  (:require
    [blocks.data :as data]
    [clojure.tools.logging :as log]
    [manifold.deferred :as d])
  (:import
    java.io.InputStream
    org.apache.commons.io.input.ProxyInputStream))


(defn- meter-label
