Skip to content

Commit 5dbbdad

Browse files
authored
Enable metrics in Phoenix LiveDashboard (#2385)
This change only restructures the StatsdMetricsReporter module so that it can be used with LiveDashboard to show pretty metrics <img width="1840" height="1167" alt="image" src="https://github.com/user-attachments/assets/62d27e8e-3045-4758-b589-9b5f0b35507f" />
1 parent 153679c commit 5dbbdad

File tree

2 files changed

+63
-59
lines changed

2 files changed

+63
-59
lines changed

lib/nerves_hub/statsd_metrics_reporter.ex

Lines changed: 62 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -10,64 +10,7 @@ defmodule NervesHub.StatsdMetricsReporter do
1010
host: statsd_config[:host],
1111
port: statsd_config[:port],
1212
formatter: :datadog,
13-
metrics: [
14-
# NervesHub
15-
counter("nerves_hub.devices.connect.count", tags: [:env, :service]),
16-
counter("nerves_hub.devices.disconnect.count", tags: [:env, :service]),
17-
counter("nerves_hub.devices.duplicate_connection", tags: [:env, :service]),
18-
counter("nerves_hub.devices.stale_connections", tags: [:env, :service]),
19-
counter("nerves_hub.devices.update.manual.count", tags: [:env, :service]),
20-
counter("nerves_hub.devices.update.automatic.count", tags: [:env, :service]),
21-
counter("nerves_hub.devices.deployment.penalty_box.check.count",
22-
tags: [:env, :service]
23-
),
24-
counter("nerves_hub.deployments.trigger_update.count", tags: [:env, :service]),
25-
counter("nerves_hub.deployments.trigger_update.device.count", tags: [:env, :service]),
26-
counter("nerves_hub.devices.jitp.created.count", tags: [:env, :service]),
27-
counter("nerves_hub.device_certificates.created.count", tags: [:env, :service]),
28-
last_value("nerves_hub.devices.online.count", tags: [:env, :service, :node]),
29-
counter("nerves_hub.rate_limit.accepted.count", tags: [:env, :service]),
30-
counter("nerves_hub.rate_limit.pruned.count", tags: [:env, :service]),
31-
counter("nerves_hub.rate_limit.rejected.count", tags: [:env, :service]),
32-
counter("nerves_hub.ssl.fail.count", tags: [:env, :service]),
33-
counter("nerves_hub.ssl.success.count", tags: [:env, :service]),
34-
counter("nerves_hub.tracker.exception.count", tags: [:env, :service]),
35-
# General
36-
counter("phoenix.endpoint.start.count", tags: [:env, :service]),
37-
summary("phoenix.endpoint.stop.duration",
38-
tags: [:env, :service],
39-
unit: {:native, :millisecond}
40-
),
41-
summary("phoenix.router_dispatch.stop.duration",
42-
tags: [:route, :env, :service],
43-
unit: {:native, :millisecond}
44-
),
45-
counter("nerves_hub.repo.query.count", tags: [:env, :service]),
46-
distribution("nerves_hub.repo.query.idle_time",
47-
tags: [:env, :service],
48-
unit: {:native, :millisecond}
49-
),
50-
distribution("nerves_hub.repo.query.queue_time",
51-
tags: [:env, :service],
52-
unit: {:native, :millisecond}
53-
),
54-
distribution("nerves_hub.repo.query.query_time",
55-
tags: [:env, :service],
56-
unit: {:native, :millisecond}
57-
),
58-
distribution("nerves_hub.repo.query.decode_time",
59-
tags: [:env, :service],
60-
unit: {:native, :millisecond}
61-
),
62-
distribution("nerves_hub.repo.query.total_time",
63-
tags: [:env, :service],
64-
unit: {:native, :millisecond}
65-
),
66-
summary("vm.memory.total", tags: [:env, :service], unit: {:byte, :kilobyte}),
67-
summary("vm.total_run_queue_lengths.total", tags: [:env, :service]),
68-
summary("vm.total_run_queue_lengths.cpu", tags: [:env, :service]),
69-
summary("vm.total_run_queue_lengths.io", tags: [:env, :service])
70-
],
13+
metrics: metrics(),
7114
global_tags: [
7215
env: Application.get_env(:nerves_hub, :deploy_env),
7316
dyno: Application.get_env(:nerves_hub, :app),
@@ -78,4 +21,65 @@ defmodule NervesHub.StatsdMetricsReporter do
7821
[]
7922
end
8023
end
24+
25+
def metrics() do
26+
[
27+
# NervesHub
28+
counter("nerves_hub.devices.connect.count", tags: [:env, :service]),
29+
counter("nerves_hub.devices.disconnect.count", tags: [:env, :service]),
30+
counter("nerves_hub.devices.duplicate_connection", tags: [:env, :service]),
31+
counter("nerves_hub.devices.stale_connections", tags: [:env, :service]),
32+
counter("nerves_hub.devices.update.manual.count", tags: [:env, :service]),
33+
counter("nerves_hub.devices.update.automatic.count", tags: [:env, :service]),
34+
counter("nerves_hub.devices.deployment.penalty_box.check.count",
35+
tags: [:env, :service]
36+
),
37+
counter("nerves_hub.deployments.trigger_update.count", tags: [:env, :service]),
38+
counter("nerves_hub.deployments.trigger_update.device.count", tags: [:env, :service]),
39+
counter("nerves_hub.devices.jitp.created.count", tags: [:env, :service]),
40+
counter("nerves_hub.device_certificates.created.count", tags: [:env, :service]),
41+
last_value("nerves_hub.devices.online.count", tags: [:env, :service, :node]),
42+
counter("nerves_hub.rate_limit.accepted.count", tags: [:env, :service]),
43+
counter("nerves_hub.rate_limit.pruned.count", tags: [:env, :service]),
44+
counter("nerves_hub.rate_limit.rejected.count", tags: [:env, :service]),
45+
counter("nerves_hub.ssl.fail.count", tags: [:env, :service]),
46+
counter("nerves_hub.ssl.success.count", tags: [:env, :service]),
47+
counter("nerves_hub.tracker.exception.count", tags: [:env, :service]),
48+
# General
49+
counter("phoenix.endpoint.start.count", tags: [:env, :service]),
50+
summary("phoenix.endpoint.stop.duration",
51+
tags: [:env, :service],
52+
unit: {:native, :millisecond}
53+
),
54+
summary("phoenix.router_dispatch.stop.duration",
55+
tags: [:route, :env, :service],
56+
unit: {:native, :millisecond}
57+
),
58+
counter("nerves_hub.repo.query.count", tags: [:env, :service]),
59+
distribution("nerves_hub.repo.query.idle_time",
60+
tags: [:env, :service],
61+
unit: {:native, :millisecond}
62+
),
63+
distribution("nerves_hub.repo.query.queue_time",
64+
tags: [:env, :service],
65+
unit: {:native, :millisecond}
66+
),
67+
distribution("nerves_hub.repo.query.query_time",
68+
tags: [:env, :service],
69+
unit: {:native, :millisecond}
70+
),
71+
distribution("nerves_hub.repo.query.decode_time",
72+
tags: [:env, :service],
73+
unit: {:native, :millisecond}
74+
),
75+
distribution("nerves_hub.repo.query.total_time",
76+
tags: [:env, :service],
77+
unit: {:native, :millisecond}
78+
),
79+
summary("vm.memory.total", tags: [:env, :service], unit: {:byte, :kilobyte}),
80+
summary("vm.total_run_queue_lengths.total", tags: [:env, :service]),
81+
summary("vm.total_run_queue_lengths.cpu", tags: [:env, :service]),
82+
summary("vm.total_run_queue_lengths.io", tags: [:env, :service])
83+
]
84+
end
8185
end

lib/nerves_hub_web/router.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -398,7 +398,7 @@ defmodule NervesHubWeb.Router do
398398

399399
scope "/" do
400400
pipe_through([:browser, :logged_in, NervesHubWeb.Plugs.ServerAuth])
401-
live_dashboard("/status/dashboard")
401+
live_dashboard("/status/dashboard", metrics: NervesHub.StatsdMetricsReporter)
402402
oban_dashboard("/status/oban", resolver: NervesHubWeb.Plugs.ServerAuth)
403403
end
404404

0 commit comments

Comments
 (0)