|
1 | 1 | (ns eca.metrics |
2 | 2 | (:require |
3 | 3 | [clojure.string :as string] |
| 4 | + [eca.config :as config] |
4 | 5 | [eca.logger :as logger] |
5 | | - [eca.shared :as shared] |
6 | | - [eca.config :as config])) |
| 6 | + [eca.shared :as shared])) |
| 7 | + |
| 8 | +(set! *warn-on-reflection* true) |
| 9 | + |
| 10 | +(def ^:dynamic extra-base-metrics {}) |
| 11 | + |
| 12 | +(defn set-extra-metrics! [db*] |
| 13 | + (alter-var-root #'extra-base-metrics |
| 14 | + (fn [_] |
| 15 | + {:client-name (:name (:client-info @db*)) |
| 16 | + :client-version (:version (:client-info @db*)) |
| 17 | + :workspace-roots (string/join ", " (map (comp shared/uri->filename :uri) |
| 18 | + (:workspace-folders @db*)))}))) |
7 | 19 |
|
8 | 20 | (defprotocol IMetrics |
9 | 21 | (start! [this]) |
10 | 22 | (count! [this name value attrs])) |
11 | 23 |
|
12 | | -(defrecord NoopMetrics [db*] |
| 24 | +(defrecord NoopMetrics [] |
13 | 25 | IMetrics |
14 | 26 | (start! [_]) |
15 | 27 | (count! [_ _ _ _])) |
16 | 28 |
|
17 | | -(defn default-attrs [db*] |
18 | | - {:hostname (shared/hostname) |
19 | | - :client-name (:name (:client-info @db*)) |
20 | | - :client-version (:version (:client-info @db*)) |
21 | | - :server-version (config/eca-version) |
22 | | - :os-name (System/getProperty "os.name") |
23 | | - :os-version (System/getProperty "os.version") |
24 | | - :os-arch (System/getProperty "os.arch") |
25 | | - :workspace-roots (string/join ", " (map (comp shared/uri->filename :uri) |
26 | | - (:workspace-folders @db*)))}) |
| 29 | +(defn default-attrs [] |
| 30 | + (merge extra-base-metrics |
| 31 | + {:hostname (shared/hostname) |
| 32 | + :server-version (config/eca-version) |
| 33 | + :os-name (System/getProperty "os.name") |
| 34 | + :os-version (System/getProperty "os.version") |
| 35 | + :os-arch (System/getProperty "os.arch")})) |
27 | 36 |
|
28 | 37 | (defn format-time-delta-ms [start-time end-time] |
29 | 38 | (format "%.0fms" (float (/ (- end-time start-time) 1000000)))) |
|
33 | 42 |
|
34 | 43 | (defn metrify-task [{:keys [task-id metrics time]}] |
35 | 44 | (logger/info (str task-id " " time)) |
36 | | - (count! metrics (str "task-" (name task-id)) 1 (default-attrs (:db* metrics)))) |
| 45 | + (try |
| 46 | + (count! metrics (str "task-" (name task-id)) 1 (default-attrs)) |
| 47 | + (catch Exception e |
| 48 | + (logger/error e)))) |
37 | 49 |
|
38 | 50 | (defmacro task* |
39 | 51 | "Executes `body` logging `message` formatted with the time spent |
|
54 | 66 | (meta &form))) |
55 | 67 |
|
56 | 68 | (defn count-up! [name extra-attrs metrics] |
57 | | - (count! metrics name 1 (merge (default-attrs (:db* metrics)) |
| 69 | + (count! metrics name 1 (merge (default-attrs) |
58 | 70 | extra-attrs))) |
0 commit comments