Skip to content

Commit a01ca30

Browse files
committed
feat: collect serializer on phoenix socket connected metric
1 parent 97f85f0 commit a01ca30

File tree

3 files changed

+45
-12
lines changed

3 files changed

+45
-12
lines changed

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -122,14 +122,15 @@ if Code.ensure_loaded?(Phoenix) do
122122
reporter_options: [
123123
buckets: [10, 100, 500, 1_000, 5_000, 10_000]
124124
],
125-
tag_values: fn %{result: result, endpoint: endpoint, transport: transport} ->
125+
tag_values: fn %{result: result, endpoint: endpoint, transport: transport, serializer: serializer} ->
126126
%{
127127
transport: transport,
128128
result: result,
129-
endpoint: normalize_module_name(endpoint)
129+
endpoint: normalize_module_name(endpoint),
130+
serializer: serializer
130131
}
131132
end,
132-
tags: [:result, :transport, :endpoint],
133+
tags: [:result, :transport, :endpoint, :serializer],
133134
unit: {:native, :millisecond}
134135
)
135136
]

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.63.3",
7+
version: "2.64.0",
88
elixir: "~> 1.18",
99
elixirc_paths: elixirc_paths(Mix.env()),
1010
start_permanent: Mix.env() == :prod,

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

Lines changed: 40 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,12 @@ defmodule Realtime.PromEx.Plugins.PhoenixTest do
1111
end
1212
end
1313

14-
describe "pooling metrics" do
15-
setup do
16-
start_supervised!(MetricsTest)
17-
%{tenant: Containers.checkout_tenant(run_migrations: true)}
18-
end
14+
setup do
15+
start_supervised!(MetricsTest)
16+
%{tenant: Containers.checkout_tenant(run_migrations: true)}
17+
end
1918

19+
describe "pooling metrics" do
2020
test "number of connections", %{tenant: tenant} do
2121
{:ok, token} = token_valid(tenant, "anon", %{})
2222

@@ -37,17 +37,49 @@ defmodule Realtime.PromEx.Plugins.PhoenixTest do
3737
)
3838

3939
Process.sleep(200)
40-
assert metric_value() >= 2
40+
assert metric_value(~r/phoenix_connections_total\s(?<number>\d+)/) >= 2
41+
end
42+
end
43+
44+
describe "event metrics" do
45+
test "socket connected", %{tenant: tenant} do
46+
{:ok, token} = token_valid(tenant, "anon", %{})
47+
48+
{:ok, _} =
49+
WebsocketClient.connect(
50+
self(),
51+
uri(tenant, Phoenix.Socket.V1.JSONSerializer, 4002),
52+
Phoenix.Socket.V1.JSONSerializer,
53+
[{"x-api-key", token}]
54+
)
55+
56+
{:ok, _} =
57+
WebsocketClient.connect(
58+
self(),
59+
uri(tenant, RealtimeWeb.Socket.V2Serializer, 4002),
60+
RealtimeWeb.Socket.V2Serializer,
61+
[{"x-api-key", token}]
62+
)
63+
64+
Process.sleep(200)
65+
66+
assert metric_value(
67+
~r/phoenix_socket_connected_duration_milliseconds_count{endpoint="RealtimeWeb.Endpoint",result="ok",serializer="Elixir.Phoenix.Socket.V1.JSONSerializer",transport="websocket"}\s(?<number>\d+)/
68+
) == 1
69+
70+
assert metric_value(
71+
~r/phoenix_socket_connected_duration_milliseconds_count{endpoint="RealtimeWeb.Endpoint",result="ok",serializer="Elixir.RealtimeWeb.Socket.V2Serializer",transport="websocket"}\s(?<number>\d+)/
72+
) == 1
4173
end
4274
end
4375

44-
defp metric_value() do
76+
defp metric_value(pattern) do
4577
PromEx.get_metrics(MetricsTest)
4678
|> String.split("\n", trim: true)
4779
|> Enum.find_value(
4880
"0",
4981
fn item ->
50-
case Regex.run(~r/phoenix_connections_total\s(?<number>\d+)/, item, capture: ["number"]) do
82+
case Regex.run(pattern, item, capture: ["number"]) do
5183
[number] -> number
5284
_ -> false
5385
end

0 commit comments

Comments
 (0)