• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

supabase / realtime / b0091f1e20ed455b84626876149d29f3962f4680-PR-1498

15 Aug 2025 03:54AM UTC coverage: 84.163% (+0.1%) from 84.014%
b0091f1e20ed455b84626876149d29f3962f4680-PR-1498

Pull #1498

github

edgurgel
fix: invalid JWT on join
Pull Request #1498: fix: invalid JWT on join

9 of 9 new or added lines in 1 file covered. (100.0%)

1 existing line in 1 file now uncovered.

1961 of 2330 relevant lines covered (84.16%)

2053.66 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

85.71
/lib/realtime/metrics_cleaner.ex
1
defmodule Realtime.MetricsCleaner do
2
  @moduledoc false
3

4
  use GenServer
5
  require Logger
6

7
  defstruct [:check_ref, :interval]
8

9
  def start_link(args), do: GenServer.start_link(__MODULE__, args)
1✔
10

11
  def init(_args) do
12
    interval = Application.get_env(:realtime, :metrics_cleaner_schedule_timer_in_ms)
1✔
13

14
    Logger.info("Starting MetricsCleaner")
1✔
15
    {:ok, %{check_ref: check(interval), interval: interval}}
16
  end
17

18
  def handle_info(:check, %{interval: interval} = state) do
19
    Process.cancel_timer(state.check_ref)
61✔
20

21
    {exec_time, _} = :timer.tc(fn -> loop_and_cleanup_metrics_table() end)
61✔
22

23
    if exec_time > :timer.seconds(5),
61✔
UNCOV
24
      do: Logger.warning("Metrics check took: #{exec_time} ms")
×
25

26
    {:noreply, %{state | check_ref: check(interval)}}
27
  end
28

29
  def handle_info(msg, state) do
30
    Logger.error("Unexpected message: #{inspect(msg)}")
×
31
    {:noreply, state}
32
  end
33

34
  defp check(interval) do
35
    Process.send_after(self(), :check, interval)
62✔
36
  end
37

38
  @table_name :"syn_registry_by_name_Elixir.Realtime.Tenants.Connect"
39
  @metrics_table Realtime.PromEx.Metrics
40
  @filter_spec [{{{:_, %{tenant: :"$1"}}, :_}, [], [:"$1"]}]
41
  @tenant_id_spec [{{:"$1", :_, :_, :_, :_, :_}, [], [:"$1"]}]
42
  defp loop_and_cleanup_metrics_table do
43
    tenant_ids = :ets.select(@table_name, @tenant_id_spec)
61✔
44

45
    :ets.select(@metrics_table, @filter_spec)
46
    |> Enum.uniq()
47
    |> Enum.reject(fn tenant_id -> tenant_id in tenant_ids end)
133✔
48
    |> Enum.each(fn tenant_id -> delete_metric(tenant_id) end)
61✔
49
  end
50

51
  @doc """
52
  Deletes all metrics that contain the given tenant or database_host.
53
  """
54
  @spec delete_metric(String.t()) :: :ok
55
  def delete_metric(tenant) do
56
    :ets.select_delete(@metrics_table, [
136✔
57
      {{{:_, %{tenant: tenant}}, :_}, [], [true]},
58
      {{{:_, %{database_host: "db.#{tenant}.supabase.co"}}, :_}, [], [true]}
136✔
59
    ])
60

61
    :ok
62
  end
63
end
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc