@@ -18,7 +18,7 @@ defmodule Realtime.MetricsCleaner do
1818 def handle_info ( :check , % { interval: interval } = state ) do
1919 Process . cancel_timer ( state . check_ref )
2020
21- { exec_time , _ } = :timer . tc ( fn -> loop_and_cleanup_metrics_table ( ) end )
21+ { exec_time , _ } = :timer . tc ( fn -> loop_and_cleanup_metrics_table ( ) end , :millisecond )
2222
2323 if exec_time > :timer . seconds ( 5 ) ,
2424 do: Logger . warning ( "Metrics check took: #{ exec_time } ms" )
@@ -31,31 +31,21 @@ defmodule Realtime.MetricsCleaner do
3131 { :noreply , state }
3232 end
3333
34- defp check ( interval ) do
35- Process . send_after ( self ( ) , :check , interval )
36- end
34+ defp check ( interval ) , do: Process . send_after ( self ( ) , :check , interval )
35+
36+ @ peep_filter_spec [ { { { :_ , % { tenant: :"$1" } } , :_ } , [ { :is_binary , :"$1" } ] , [ :"$1" ] } ]
3737
38- @ metrics_table Realtime.PromEx.Metrics
39- @ filter_spec [ { { { :_ , % { tenant: :"$1" } } , :_ } , [ ] , [ :"$1" ] } ]
4038 defp loop_and_cleanup_metrics_table do
41- tenant_ids = Realtime.Tenants.Connect . list_tenants ( )
39+ tenant_ids = Realtime.Tenants.Connect . list_tenants ( ) |> MapSet . new ( )
4240
43- :ets . select ( @ metrics_table , @ filter_spec )
44- |> Enum . uniq ( )
45- |> Enum . reject ( fn tenant_id -> tenant_id in tenant_ids end )
46- |> Enum . each ( fn tenant_id -> delete_metric ( tenant_id ) end )
47- end
41+ { _ , tids } = Peep.Persistent . storage ( Realtime.PromEx.Metrics )
4842
49- @ doc """
50- Deletes all metrics that contain the given tenant or database_host.
51- """
52- @ spec delete_metric ( String . t ( ) ) :: :ok
53- def delete_metric ( tenant ) do
54- :ets . select_delete ( @ metrics_table , [
55- { { { :_ , % { tenant: tenant } } , :_ } , [ ] , [ true ] } ,
56- { { { :_ , % { database_host: "db.#{ tenant } .supabase.co" } } , :_ } , [ ] , [ true ] }
57- ] )
58-
59- :ok
43+ tids
44+ |> Tuple . to_list ( )
45+ |> Stream . flat_map ( fn tid -> :ets . select ( tid , @ peep_filter_spec ) end )
46+ |> Enum . uniq ( )
47+ |> Stream . reject ( fn tenant_id -> MapSet . member? ( tenant_ids , tenant_id ) end )
48+ |> Enum . map ( fn tenant_id -> % { tenant: tenant_id } end )
49+ |> then ( & Peep . prune_tags ( Realtime.PromEx.Metrics , & 1 ) )
6050 end
6151end
0 commit comments