Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions lib/realtime/monitoring/prom_ex/plugins/tenant.ex
Original file line number Diff line number Diff line change
Expand Up @@ -157,20 +157,38 @@ defmodule Realtime.PromEx.Plugins.Tenant do
description: "Sum of messages sent on a Realtime Channel.",
tags: [:tenant]
),
sum(
[:realtime, :channel, :global, :events],
event_name: [:realtime, :rate_counter, :channel, :events],
measurement: :sum,
description: "Global sum of messages sent on a Realtime Channel."
),
sum(
[:realtime, :channel, :presence_events],
event_name: [:realtime, :rate_counter, :channel, :presence_events],
measurement: :sum,
description: "Sum of presence messages sent on a Realtime Channel.",
tags: [:tenant]
),
sum(
[:realtime, :channel, :global, :presence_events],
event_name: [:realtime, :rate_counter, :channel, :presence_events],
measurement: :sum,
description: "Global sum of presence messages sent on a Realtime Channel."
),
sum(
[:realtime, :channel, :db_events],
event_name: [:realtime, :rate_counter, :channel, :db_events],
measurement: :sum,
description: "Sum of db messages sent on a Realtime Channel.",
tags: [:tenant]
),
sum(
[:realtime, :channel, :global, :db_events],
event_name: [:realtime, :rate_counter, :channel, :db_events],
measurement: :sum,
description: "Global sum of db messages sent on a Realtime Channel."
),
sum(
[:realtime, :channel, :joins],
event_name: [:realtime, :rate_counter, :channel, :joins],
Expand Down
9 changes: 9 additions & 0 deletions lib/realtime/monitoring/prom_ex/plugins/tenants.ex
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,15 @@ defmodule Realtime.PromEx.Plugins.Tenants do
unit: {:microsecond, :millisecond},
tags: [:success, :tenant, :mechanism],
reporter_options: [buckets: [10, 250, 5000, 15_000]]
),
distribution(
[:realtime, :global, :rpc],
event_name: [:realtime, :rpc],
description: "Global Latency of rpc calls",
measurement: :latency,
unit: {:microsecond, :millisecond},
tags: [:success, :mechanism],
reporter_options: [buckets: [10, 250, 5000, 15_000]]
)
])
end
Expand Down
2 changes: 1 addition & 1 deletion mix.exs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ defmodule Realtime.MixProject do
def project do
[
app: :realtime,
version: "2.51.14",
version: "2.51.15",
elixir: "~> 1.17.3",
elixirc_paths: elixirc_paths(Mix.env()),
start_permanent: Mix.env() == :prod,
Expand Down
31 changes: 31 additions & 0 deletions test/realtime/monitoring/prom_ex/plugins/tenant_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,17 @@ defmodule Realtime.PromEx.Plugins.TenantTest do
assert metric_value(pattern) == metric_value + 1
end

test "global event exists after counter added", %{tenant: %{external_id: external_id}} do
pattern =
~r/realtime_channel_global_events\s(?<number>\d+)/

metric_value = metric_value(pattern)
FakeUserCounter.fake_event(external_id)

Process.sleep(200)
assert metric_value(pattern) == metric_value + 1
end

test "db_event exists after counter added", %{tenant: %{external_id: external_id}} do
pattern =
~r/realtime_channel_db_events{tenant="#{external_id}"}\s(?<number>\d+)/
Expand All @@ -139,6 +150,16 @@ defmodule Realtime.PromEx.Plugins.TenantTest do
assert metric_value(pattern) == metric_value + 1
end

test "global db_event exists after counter added", %{tenant: %{external_id: external_id}} do
pattern =
~r/realtime_channel_global_db_events\s(?<number>\d+)/

metric_value = metric_value(pattern)
FakeUserCounter.fake_db_event(external_id)
Process.sleep(200)
assert metric_value(pattern) == metric_value + 1
end

test "presence_event exists after counter added", %{tenant: %{external_id: external_id}} do
pattern =
~r/realtime_channel_presence_events{tenant="#{external_id}"}\s(?<number>\d+)/
Expand All @@ -149,6 +170,16 @@ defmodule Realtime.PromEx.Plugins.TenantTest do
assert metric_value(pattern) == metric_value + 1
end

test "global presence_event exists after counter added", %{tenant: %{external_id: external_id}} do
pattern =
~r/realtime_channel_global_presence_events\s(?<number>\d+)/

metric_value = metric_value(pattern)
FakeUserCounter.fake_presence_event(external_id)
Process.sleep(200)
assert metric_value(pattern) == metric_value + 1
end

test "metric read_authorization_check exists after check", context do
pattern =
~r/realtime_tenants_read_authorization_check_count{tenant="#{context.tenant.external_id}"}\s(?<number>\d+)/
Expand Down
33 changes: 33 additions & 0 deletions test/realtime/monitoring/prom_ex/plugins/tenants_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,16 @@ defmodule Realtime.PromEx.Plugins.TenantsTest do
assert metric_value(pattern) == previous_value + 1
end

test "global success" do
pattern = ~r/realtime_global_rpc_count{mechanism=\"erpc\",success="true"}\s(?<number>\d+)/
# Enough time for the poll rate to be triggered at least once
Process.sleep(200)
previous_value = metric_value(pattern)
assert {:ok, "success"} = Rpc.enhanced_call(node(), Test, :success, [], tenant_id: "123")
Process.sleep(200)
assert metric_value(pattern) == previous_value + 1
end

test "failure" do
pattern = ~r/realtime_rpc_count{mechanism=\"erpc\",success="false",tenant="123"}\s(?<number>\d+)/
# Enough time for the poll rate to be triggered at least once
Expand All @@ -47,6 +57,16 @@ defmodule Realtime.PromEx.Plugins.TenantsTest do
assert metric_value(pattern) == previous_value + 1
end

test "global failure" do
pattern = ~r/realtime_global_rpc_count{mechanism=\"erpc\",success="false"}\s(?<number>\d+)/
# Enough time for the poll rate to be triggered at least once
Process.sleep(200)
previous_value = metric_value(pattern)
assert {:error, "failure"} = Rpc.enhanced_call(node(), Test, :failure, [], tenant_id: "123")
Process.sleep(200)
assert metric_value(pattern) == previous_value + 1
end

test "exception" do
pattern = ~r/realtime_rpc_count{mechanism=\"erpc\",success="false",tenant="123"}\s(?<number>\d+)/
# Enough time for the poll rate to be triggered at least once
Expand All @@ -59,6 +79,19 @@ defmodule Realtime.PromEx.Plugins.TenantsTest do
Process.sleep(200)
assert metric_value(pattern) == previous_value + 1
end

test "global exception" do
pattern = ~r/realtime_global_rpc_count{mechanism=\"erpc\",success="false"}\s(?<number>\d+)/
# Enough time for the poll rate to be triggered at least once
Process.sleep(200)
previous_value = metric_value(pattern)

assert {:error, :rpc_error, %RuntimeError{message: "runtime error"}} =
Rpc.enhanced_call(node(), Test, :exception, [], tenant_id: "123")

Process.sleep(200)
assert metric_value(pattern) == previous_value + 1
end
end

test "event_metrics rpc" do
Expand Down
Loading