Skip to content

Commit e9eaf9f

Browse files
authored
fix: collect global metrics without tenant tagging (#1557)
1 parent 05ac93e commit e9eaf9f

File tree

5 files changed

+92
-1
lines changed

5 files changed

+92
-1
lines changed

lib/realtime/monitoring/prom_ex/plugins/tenant.ex

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,20 +157,38 @@ defmodule Realtime.PromEx.Plugins.Tenant do
157157
description: "Sum of messages sent on a Realtime Channel.",
158158
tags: [:tenant]
159159
),
160+
sum(
161+
[:realtime, :channel, :global, :events],
162+
event_name: [:realtime, :rate_counter, :channel, :events],
163+
measurement: :sum,
164+
description: "Global sum of messages sent on a Realtime Channel."
165+
),
160166
sum(
161167
[:realtime, :channel, :presence_events],
162168
event_name: [:realtime, :rate_counter, :channel, :presence_events],
163169
measurement: :sum,
164170
description: "Sum of presence messages sent on a Realtime Channel.",
165171
tags: [:tenant]
166172
),
173+
sum(
174+
[:realtime, :channel, :global, :presence_events],
175+
event_name: [:realtime, :rate_counter, :channel, :presence_events],
176+
measurement: :sum,
177+
description: "Global sum of presence messages sent on a Realtime Channel."
178+
),
167179
sum(
168180
[:realtime, :channel, :db_events],
169181
event_name: [:realtime, :rate_counter, :channel, :db_events],
170182
measurement: :sum,
171183
description: "Sum of db messages sent on a Realtime Channel.",
172184
tags: [:tenant]
173185
),
186+
sum(
187+
[:realtime, :channel, :global, :db_events],
188+
event_name: [:realtime, :rate_counter, :channel, :db_events],
189+
measurement: :sum,
190+
description: "Global sum of db messages sent on a Realtime Channel."
191+
),
174192
sum(
175193
[:realtime, :channel, :joins],
176194
event_name: [:realtime, :rate_counter, :channel, :joins],

lib/realtime/monitoring/prom_ex/plugins/tenants.ex

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,15 @@ defmodule Realtime.PromEx.Plugins.Tenants do
2121
unit: {:microsecond, :millisecond},
2222
tags: [:success, :tenant, :mechanism],
2323
reporter_options: [buckets: [10, 250, 5000, 15_000]]
24+
),
25+
distribution(
26+
[:realtime, :global, :rpc],
27+
event_name: [:realtime, :rpc],
28+
description: "Global Latency of rpc calls",
29+
measurement: :latency,
30+
unit: {:microsecond, :millisecond},
31+
tags: [:success, :mechanism],
32+
reporter_options: [buckets: [10, 250, 5000, 15_000]]
2433
)
2534
])
2635
end

mix.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ defmodule Realtime.MixProject do
44
def project do
55
[
66
app: :realtime,
7-
version: "2.51.14",
7+
version: "2.51.15",
88
elixir: "~> 1.17.3",
99
elixirc_paths: elixirc_paths(Mix.env()),
1010
start_permanent: Mix.env() == :prod,

test/realtime/monitoring/prom_ex/plugins/tenant_test.exs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,17 @@ defmodule Realtime.PromEx.Plugins.TenantTest do
129129
assert metric_value(pattern) == metric_value + 1
130130
end
131131

132+
test "global event exists after counter added", %{tenant: %{external_id: external_id}} do
133+
pattern =
134+
~r/realtime_channel_global_events\s(?<number>\d+)/
135+
136+
metric_value = metric_value(pattern)
137+
FakeUserCounter.fake_event(external_id)
138+
139+
Process.sleep(200)
140+
assert metric_value(pattern) == metric_value + 1
141+
end
142+
132143
test "db_event exists after counter added", %{tenant: %{external_id: external_id}} do
133144
pattern =
134145
~r/realtime_channel_db_events{tenant="#{external_id}"}\s(?<number>\d+)/
@@ -139,6 +150,16 @@ defmodule Realtime.PromEx.Plugins.TenantTest do
139150
assert metric_value(pattern) == metric_value + 1
140151
end
141152

153+
test "global db_event exists after counter added", %{tenant: %{external_id: external_id}} do
154+
pattern =
155+
~r/realtime_channel_global_db_events\s(?<number>\d+)/
156+
157+
metric_value = metric_value(pattern)
158+
FakeUserCounter.fake_db_event(external_id)
159+
Process.sleep(200)
160+
assert metric_value(pattern) == metric_value + 1
161+
end
162+
142163
test "presence_event exists after counter added", %{tenant: %{external_id: external_id}} do
143164
pattern =
144165
~r/realtime_channel_presence_events{tenant="#{external_id}"}\s(?<number>\d+)/
@@ -149,6 +170,16 @@ defmodule Realtime.PromEx.Plugins.TenantTest do
149170
assert metric_value(pattern) == metric_value + 1
150171
end
151172

173+
test "global presence_event exists after counter added", %{tenant: %{external_id: external_id}} do
174+
pattern =
175+
~r/realtime_channel_global_presence_events\s(?<number>\d+)/
176+
177+
metric_value = metric_value(pattern)
178+
FakeUserCounter.fake_presence_event(external_id)
179+
Process.sleep(200)
180+
assert metric_value(pattern) == metric_value + 1
181+
end
182+
152183
test "metric read_authorization_check exists after check", context do
153184
pattern =
154185
~r/realtime_tenants_read_authorization_check_count{tenant="#{context.tenant.external_id}"}\s(?<number>\d+)/

test/realtime/monitoring/prom_ex/plugins/tenants_test.exs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,16 @@ defmodule Realtime.PromEx.Plugins.TenantsTest do
3737
assert metric_value(pattern) == previous_value + 1
3838
end
3939

40+
test "global success" do
41+
pattern = ~r/realtime_global_rpc_count{mechanism=\"erpc\",success="true"}\s(?<number>\d+)/
42+
# Enough time for the poll rate to be triggered at least once
43+
Process.sleep(200)
44+
previous_value = metric_value(pattern)
45+
assert {:ok, "success"} = Rpc.enhanced_call(node(), Test, :success, [], tenant_id: "123")
46+
Process.sleep(200)
47+
assert metric_value(pattern) == previous_value + 1
48+
end
49+
4050
test "failure" do
4151
pattern = ~r/realtime_rpc_count{mechanism=\"erpc\",success="false",tenant="123"}\s(?<number>\d+)/
4252
# Enough time for the poll rate to be triggered at least once
@@ -47,6 +57,16 @@ defmodule Realtime.PromEx.Plugins.TenantsTest do
4757
assert metric_value(pattern) == previous_value + 1
4858
end
4959

60+
test "global failure" do
61+
pattern = ~r/realtime_global_rpc_count{mechanism=\"erpc\",success="false"}\s(?<number>\d+)/
62+
# Enough time for the poll rate to be triggered at least once
63+
Process.sleep(200)
64+
previous_value = metric_value(pattern)
65+
assert {:error, "failure"} = Rpc.enhanced_call(node(), Test, :failure, [], tenant_id: "123")
66+
Process.sleep(200)
67+
assert metric_value(pattern) == previous_value + 1
68+
end
69+
5070
test "exception" do
5171
pattern = ~r/realtime_rpc_count{mechanism=\"erpc\",success="false",tenant="123"}\s(?<number>\d+)/
5272
# Enough time for the poll rate to be triggered at least once
@@ -59,6 +79,19 @@ defmodule Realtime.PromEx.Plugins.TenantsTest do
5979
Process.sleep(200)
6080
assert metric_value(pattern) == previous_value + 1
6181
end
82+
83+
test "global exception" do
84+
pattern = ~r/realtime_global_rpc_count{mechanism=\"erpc\",success="false"}\s(?<number>\d+)/
85+
# Enough time for the poll rate to be triggered at least once
86+
Process.sleep(200)
87+
previous_value = metric_value(pattern)
88+
89+
assert {:error, :rpc_error, %RuntimeError{message: "runtime error"}} =
90+
Rpc.enhanced_call(node(), Test, :exception, [], tenant_id: "123")
91+
92+
Process.sleep(200)
93+
assert metric_value(pattern) == previous_value + 1
94+
end
6295
end
6396

6497
test "event_metrics rpc" do

0 commit comments

Comments
 (0)