Skip to content

Commit 5820176

Browse files
committed
Add optional worker metrics
Signed-off-by: Greg Haskins <greg@manetu.com>
1 parent 3d50d0d commit 5820176

File tree

4 files changed

+60
-16
lines changed

4 files changed

+60
-16
lines changed

project.clj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@
1616
[org.slf4j/jul-to-slf4j "2.0.16"]
1717
[org.slf4j/jcl-over-slf4j "2.0.16"]
1818
[org.slf4j/log4j-over-slf4j "2.0.16"]
19+
[clj-commons/iapetos "0.1.14"]
20+
[io.prometheus/simpleclient_hotspot "0.16.0"]
21+
[com.uber.m3/tally-core "0.14.2"]
22+
[com.uber.m3/tally-prometheus "0.14.2"]
1923
[progrock "0.1.2"]
2024
[doric "0.9.0"]
2125
[kixi/stats "0.5.7"]

src/manetu/temporal_benchmark/commands/worker.clj

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
[temporal.activity :refer [defactivity] :as a]
99
[temporal.promise :as tp]
1010
[temporal.client.worker :as worker]
11+
[manetu.temporal-benchmark.metrics :as metrics]
1112
[manetu.temporal-benchmark.utils :refer [exec-command]]))
1213

1314
(def command "worker")
@@ -49,28 +50,38 @@
4950
:default 1000
5051
:parse-fn parse-long
5152
:validate [pos? "Must be a positive integer"]]
53+
[nil "--[no-]metrics-enabled" "Enable metrics endpoint (see --metrics-port)"
54+
:default false]
55+
[nil "--metrics-port NUM" "The HTTP port for metrics, when enabled"
56+
:default 8080
57+
:parse-fn parse-long
58+
:validate [pos? "Must be a positive integer"]]
5259
[nil "--[no-]using-virtual-workflow-threads" "Use Virtual Threads for workflow threads (requires JDK 21+)"
5360
:default p.exec/vthreads-supported?]])
5461

55-
(defn start [options client]
56-
(worker/start client
57-
(-> (select-keys options [:temporal-taskqueue
58-
:max-concurrent-activity-task-pollers
59-
:max-concurrent-activity-execution-size
60-
:max-concurrent-workflow-task-pollers
61-
:max-concurrent-workflow-task-execution-size])
62-
(rename-keys {:temporal-taskqueue :task-queue}))
63-
(select-keys options [:max-workflow-thread-count
64-
:workflow-cache-size
65-
:using-virtual-workflow-threads])))
62+
(defn start [{:keys [metrics-enabled metrics-port] :as options} client]
63+
(let [mctx (when metrics-enabled (metrics/start metrics-port))
64+
wctx (worker/start client
65+
(-> (select-keys options [:temporal-taskqueue
66+
:max-concurrent-activity-task-pollers
67+
:max-concurrent-activity-execution-size
68+
:max-concurrent-workflow-task-pollers
69+
:max-concurrent-workflow-task-execution-size])
70+
(rename-keys {:temporal-taskqueue :task-queue}))
71+
(select-keys options [:max-workflow-thread-count
72+
:workflow-cache-size
73+
:using-virtual-workflow-threads]))]
74+
{:mctx mctx :wctx wctx}))
6675

67-
(def stop worker/stop)
76+
(defn stop [{:keys [mctx wctx]}]
77+
(some-> mctx metrics/stop)
78+
(some-> wctx worker/stop))
6879

6980
(defn exec [options client]
70-
(let [w (start options client)]
81+
(let [ctx (start options client)]
7182
(println "Worker running. Press CNTL-C to exit")
7283
(deref (promise))
73-
(worker/stop w)))
84+
(stop ctx)))
7485

7586
(def spec {:description description
7687
:fn (partial exec-command {:command command
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
; Copyright © Manetu, Inc. All rights reserved
2+
3+
(ns manetu.temporal-benchmark.metrics
4+
(:require [iapetos.core :as prometheus]
5+
[iapetos.standalone :as standalone])
6+
(:import [com.uber.m3.tally.experimental.prometheus PrometheusReporter PrometheusReporter$Builder TimerType]
7+
[io.prometheus.client CollectorRegistry]
8+
[com.uber.m3.tally RootScopeBuilder]
9+
[com.uber.m3.util Duration]))
10+
11+
(defn create-reporter
12+
^PrometheusReporter []
13+
(-> (PrometheusReporter$Builder.)
14+
(.timerType TimerType/HISTOGRAM)
15+
(.registry CollectorRegistry/defaultRegistry)
16+
(.build)))
17+
18+
(def root-scope
19+
(delay (-> (RootScopeBuilder.)
20+
(.reporter (create-reporter))
21+
(.reportEvery (Duration/ofSeconds 1)))))
22+
23+
(defn start [port]
24+
(standalone/metrics-server prometheus/default-registry {:port port}))
25+
26+
(defn stop [ctx]
27+
(.close ctx))

src/manetu/temporal_benchmark/utils.clj

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
[clojure.tools.cli :refer [parse-opts]]
66
[slingshot.slingshot :refer [throw+ try+]]
77
[temporal.client.core :as c]
8-
[temporal.tls :as tls]))
8+
[temporal.tls :as tls]
9+
[manetu.temporal-benchmark.metrics :as metrics]))
910

1011
(def tool-name "temporal-benchmark")
1112

@@ -49,7 +50,8 @@
4950

5051
(defn create-client [{:keys [temporal-target temporal-namespace tls] :as global-options}]
5152
(c/create-client (-> {:target temporal-target
52-
:namespace temporal-namespace}
53+
:namespace temporal-namespace
54+
:metrics-scope @metrics/root-scope}
5355
(cond-> tls (assoc :ssl-context (new-ssl-context global-options))))))
5456

5557
(defn exec-command

0 commit comments

Comments
 (0)