SYMBOL INDEX (1913 symbols across 387 files) FILE: assets/js/app.js method initRealtime (line 13) | initRealtime( method sendRealtime (line 198) | sendRealtime(event, payload) { method disconnectRealtime (line 209) | disconnectRealtime() { method clearLocalStorage (line 216) | clearLocalStorage() { method mounted (line 220) | mounted() { method mounted (line 264) | mounted() { method pong (line 268) | pong(params) { FILE: beacon/lib/beacon.ex class Beacon (line 1) | defmodule Beacon method member_count (line 79) | def member_count(scope, group) do method member_count (line 86) | def member_count(scope, group, node), do: Scope.member_count(scope, gr... FILE: beacon/lib/beacon/adapter.ex class Beacon.Adapter (line 1) | defmodule Beacon.Adapter FILE: beacon/lib/beacon/adapter/erl_dist.ex class Beacon.Adapter.ErlDist (line 1) | defmodule Beacon.Adapter.ErlDist method register (line 9) | def register(scope) do method broadcast (line 15) | def broadcast(scope, message) do method broadcast (line 21) | def broadcast(scope, nodes, message) do method send (line 27) | def send(scope, node, message) do FILE: beacon/lib/beacon/partition.ex class Beacon.Partition (line 1) | defmodule Beacon.Partition method join (line 19) | def join(partition_name, group, pid), do: GenServer.call(partition_nam... method leave (line 22) | def leave(partition_name, group, pid), do: GenServer.call(partition_na... method members (line 25) | def members(partition_name, group) do method member_count (line 32) | def member_count(partition_name, group), do: :ets.lookup_element(parti... method member_counts (line 35) | def member_counts(partition_name) do method member? (line 42) | def member?(partition_name, group, pid) do method groups (line 53) | def groups(partition_name), do: :ets.select(partition_name, [{{:"$1", ... method group_count (line 56) | def group_count(partition_name), do: :ets.info(partition_name, :size) method start_link (line 59) | def start_link(scope, partition_name, partition_entries_table), method init (line 67) | def init([scope, name, entries_table]) do method handle_continue (line 74) | def handle_continue(:rebuild_monitors_and_counters, state) do method handle_call (line 92) | def handle_call({:join, group, pid}, _from, state) do method handle_call (line 111) | def handle_call({:leave, group, pid}, _from, state) do method handle_info (line 119) | def handle_info({{:DOWN, group}, _ref, :process, pid, _reason}, state) do method handle_info (line 124) | def handle_info(_, state), do: {:noreply, state} method remove (line 126) | defp remove(group, pid, state) do class State (line 7) | defmodule State FILE: beacon/lib/beacon/scope.ex class Beacon.Scope (line 1) | defmodule Beacon.Scope method member_counts (line 11) | def member_counts(scope) do method member_count (line 21) | def member_count(scope, group) do method member_count (line 29) | def member_count(scope, group, node) do method groups (line 37) | def groups(scope) do method table_name (line 51) | defp table_name(scope), do: :"#{scope}_beacon_peer_counts" method start_link (line 72) | def start_link(scope, opts \\ []), do: GenServer.start_link(__MODULE__... method init (line 75) | def init([scope, opts]) do method handle_continue (line 101) | def handle_continue(:discover, state) do method handle_info (line 118) | def handle_info({:discover, peer}, state) do method handle_info (line 149) | def handle_info({:sync, peer, member_counts}, state) do method handle_info (line 155) | def handle_info(:broadcast_counts, state) do method handle_info (line 175) | def handle_info({:nodeup, node}, state) do method handle_info (line 187) | def handle_info({:nodedown, _node}, state), do: {:noreply, state} method handle_info (line 191) | def handle_info({:DOWN, ref, :process, peer, reason}, state) do method handle_info (line 207) | def handle_info(_msg, state), do: {:noreply, state} class State (line 53) | defmodule State FILE: beacon/lib/beacon/supervisor.ex class Beacon.Supervisor (line 1) | defmodule Beacon.Supervisor method name (line 5) | def name(scope), do: :"#{scope}_beacon" method supervisor_name (line 6) | def supervisor_name(scope), do: :"#{scope}_beacon_supervisor" method partition_name (line 7) | def partition_name(scope, partition), do: :"#{scope}_beacon_partition_... method partition_entries_table (line 8) | def partition_entries_table(partition_name), do: :"#{partition_name}_e... method partition (line 11) | def partition(scope, group) do method partitions (line 19) | def partitions(scope) do method start_link (line 27) | def start_link(scope, partitions, opts \\ []) do method init (line 33) | def init([scope, partitions, opts]) do FILE: beacon/mix.exs class Beacon.MixProject (line 1) | defmodule Beacon.MixProject method project (line 4) | def project do method application (line 16) | def application do method elixirc_paths (line 23) | defp elixirc_paths(:test), do: ["lib", "test/support"] method elixirc_paths (line 24) | defp elixirc_paths(_), do: ["lib"] method deps (line 27) | defp deps do FILE: beacon/test/beacon/partition_test.exs class Beacon.PartitionTest (line 1) | defmodule Beacon.PartitionTest FILE: beacon/test/beacon_test.exs class BeaconTest (line 1) | defmodule BeaconTest method spec (line 10) | defp spec(scope, opts) do FILE: beacon/test/support/peer.ex class Peer (line 1) | defmodule Peer method start (line 27) | def start(opts \\ []) do method start_disconnected (line 39) | def start_disconnected(opts \\ []) do FILE: config/runtime.exs class Env (line 3) | defmodule Env method get_integer (line 4) | def get_integer(env, default) do method get_charlist (line 9) | def get_charlist(env, default) do method get_boolean (line 14) | def get_boolean(env, default) do FILE: lib/extensions/extensions.ex class Realtime.Extensions (line 1) | defmodule Realtime.Extensions method db_settings (line 5) | def db_settings(type) do FILE: lib/extensions/postgres_cdc_rls/cdc_rls.ex class Extensions.PostgresCdcRls (line 1) | defmodule Extensions.PostgresCdcRls method handle_connect (line 17) | def handle_connect(args) do method handle_after_connect (line 32) | def handle_after_connect({manager_pid, conn}, settings, params_list, t... method create_subscription (line 60) | def create_subscription(conn, tenant, publication, pool_size, subscrip... method with_rate_counter (line 75) | defp with_rate_counter(tenant, pool_size, fun) do method rate_counter (line 88) | defp rate_counter(tenant_id, pool_size) do method subscription_list (line 95) | defp subscription_list(params_list) do method handle_subscribe (line 108) | def handle_subscribe(_, tenant, metadata) do method start_distributed (line 135) | def start_distributed(%{"region" => region, "id" => tenant} = args) do method get_manager_conn (line 176) | def get_manager_conn(id) do method supervisor_id (line 187) | def supervisor_id(tenant, region) do method update_meta (line 193) | def update_meta(tenant, manager_pid, subs_pool) do FILE: lib/extensions/postgres_cdc_rls/db_settings.ex class Extensions.PostgresCdcRls.DbSettings (line 1) | defmodule Extensions.PostgresCdcRls.DbSettings method default (line 6) | def default do method required (line 16) | def required do FILE: lib/extensions/postgres_cdc_rls/message_dispatcher.ex class Extensions.PostgresCdcRls.MessageDispatcher (line 4) | defmodule Extensions.PostgresCdcRls.MessageDispatcher method dispatch (line 11) | def dispatch([_ | _] = topic_subscriptions, _from, {type, payload, sub... method broadcast_message (line 46) | defp broadcast_message(cache, fastlane_pid, msg, serializer) do FILE: lib/extensions/postgres_cdc_rls/replication_poller.ex class Extensions.PostgresCdcRls.ReplicationPoller (line 1) | defmodule Extensions.PostgresCdcRls.ReplicationPoller method start_link (line 26) | def start_link(opts), do: GenServer.start_link(__MODULE__, opts) method init (line 29) | def init(args) do method handle_continue (line 60) | def handle_continue({:connect, tenant}, state) do method handle_continue (line 72) | def handle_continue(:prepare, state) do method handle_info (line 77) | def handle_info( method handle_info (line 153) | def handle_info(:retry, %{retry_ref: retry_ref} = state) do method slot_name_suffix (line 158) | def slot_name_suffix do method convert_errors (line 165) | defp convert_errors([_ | _] = errors), do: errors method convert_errors (line 167) | defp convert_errors(_), do: nil method prepare_replication (line 169) | defp prepare_replication(%{backoff: backoff, conn: conn, slot_name: sl... method record_list_changes_telemetry (line 184) | defp record_list_changes_telemetry(time, tenant_id) do method handle_list_changes_result (line 192) | defp handle_list_changes_result( method handle_list_changes_result (line 248) | defp handle_list_changes_result({:ok, _}, _, _, _), do: {:ok, 0} method handle_list_changes_result (line 249) | defp handle_list_changes_result({:error, reason}, _, _, _), do: {:erro... method collect_subscription_nodes (line 251) | defp collect_subscription_nodes(subscribers_nodes_table, subscription_... method generate_record (line 341) | def generate_record(_), do: nil FILE: lib/extensions/postgres_cdc_rls/replications.ex class Extensions.PostgresCdcRls.Replications (line 1) | defmodule Extensions.PostgresCdcRls.Replications method prepare_replication (line 10) | def prepare_replication(conn, slot_name) do method terminate_backend (line 30) | def terminate_backend(conn, slot_name) do method get_pg_stat_activity_diff (line 54) | def get_pg_stat_activity_diff(conn, db_pid) do method list_changes (line 73) | def list_changes(conn, slot_name, publication, max_changes, max_record... FILE: lib/extensions/postgres_cdc_rls/subscription_manager.ex class Extensions.PostgresCdcRls.SubscriptionManager (line 1) | defmodule Extensions.PostgresCdcRls.SubscriptionManager method start_link (line 57) | def start_link(opts) do method init (line 64) | def init(args) do method handle_continue (line 71) | def handle_continue({:connect, args}, _) do method handle_info (line 123) | def handle_info({:subscribed, {pid, id}}, state) do method handle_info (line 134) | def handle_info( method handle_info (line 162) | def handle_info( method handle_info (line 189) | def handle_info(:check_delete_queue, %State{delete_queue: %{ref: ref, ... method handle_info (line 215) | def handle_info(:check_no_users, %{subscribers_pids_table: tid, no_use... method handle_info (line 235) | def handle_info({:check_region, previous_nodes_set}, state) do method handle_info (line 251) | def handle_info(msg, state) do method check_oids (line 259) | defp check_oids, do: Process.send_after(self(), :check_oids, @check_oi... method now (line 261) | defp now, do: System.system_time(:millisecond) method check_no_users (line 263) | defp check_no_users, do: Process.send_after(self(), :check_no_users, @... method check_delete_queue (line 265) | defp check_delete_queue(timeout \\ @timeout), method send_region_check_message (line 268) | defp send_region_check_message(check_region_interval) do method rebalance_check_interval_in_ms (line 272) | defp rebalance_check_interval_in_ms(), do: Application.fetch_env!(:rea... class State (line 22) | defmodule State FILE: lib/extensions/postgres_cdc_rls/subscriptions.ex class Extensions.PostgresCdcRls.Subscriptions (line 1) | defmodule Extensions.PostgresCdcRls.Subscriptions method create (line 20) | def create(conn, publication, subscription_list, manager, caller) do method query (line 48) | defp query(conn, publication, id, claims, subscription_params) do method params_to_log (line 89) | defp params_to_log({action_filter, schema, table, filters}) do method delete (line 95) | def delete(conn, id) do method delete_all (line 114) | def delete_all(conn) do method delete_multi (line 127) | def delete_multi(conn, ids) do method delete_all_if_table_exists (line 134) | def delete_all_if_table_exists(conn) do method fetch_publication_tables (line 165) | def fetch_publication_tables(conn, publication) do method parse_subscription_params (line 239) | def parse_subscription_params(params) do method action_filter (line 280) | defp action_filter(%{"event" => "*"}), do: "*" method action_filter (line 291) | defp action_filter(_), do: "*" method format_filter_value (line 293) | defp format_filter_value(filter, value) do FILE: lib/extensions/postgres_cdc_rls/subscriptions_checker.ex class Extensions.PostgresCdcRls.SubscriptionsChecker (line 1) | defmodule Extensions.PostgresCdcRls.SubscriptionsChecker method start_link (line 36) | def start_link(opts) do method init (line 43) | def init(args) do method handle_continue (line 50) | def handle_continue({:connect, args}, _) do method handle_info (line 80) | def handle_info(:check_active_pids, %State{check_active_pids: ref, del... method handle_info (line 107) | def handle_info(:check_delete_queue, %State{delete_queue: %{ref: ref, ... method pop_not_alive_pids (line 136) | def pop_not_alive_pids(pids, subscribers_pids_table, subscribers_nodes... method subscribers_by_node (line 167) | def subscribers_by_node(tid) do method not_alive_pids_dist (line 177) | def not_alive_pids_dist(pids) do method not_alive_pids (line 195) | def not_alive_pids(pids) do method check_delete_queue (line 199) | defp check_delete_queue, do: Process.send_after(self(), :check_delete_... method check_active_pids (line 201) | defp check_active_pids, do: Process.send_after(self(), :check_active_p... class State (line 18) | defmodule State FILE: lib/extensions/postgres_cdc_rls/supervisor.ex class Extensions.PostgresCdcRls.Supervisor (line 1) | defmodule Extensions.PostgresCdcRls.Supervisor method start_link (line 10) | def start_link do method init (line 15) | def init(_args) do method load_migrations_modules (line 30) | defp load_migrations_modules do FILE: lib/extensions/postgres_cdc_rls/worker_supervisor.ex class Extensions.PostgresCdcRls.WorkerSupervisor (line 1) | defmodule Extensions.PostgresCdcRls.WorkerSupervisor method start_link (line 12) | def start_link(args) do FILE: lib/realtime.ex class Realtime (line 1) | defmodule Realtime FILE: lib/realtime/adapters/changes.ex class Realtime.Adapters.Changes (line 6) | defmodule Realtime.Adapters.Changes class Transaction (line 10) | defmodule Transaction class NewRecord (line 15) | defmodule NewRecord class UpdatedRecord (line 30) | defmodule UpdatedRecord class DeletedRecord (line 46) | defmodule DeletedRecord class TruncatedRelation (line 61) | defmodule TruncatedRelation FILE: lib/realtime/adapters/postgres/decoder.ex class Realtime.Adapters.Postgres.Decoder (line 4) | defmodule Realtime.Adapters.Postgres.Decoder method decode_message_impl (line 157) | defp decode_message_impl(<<"B", lsn::binary-8, timestamp::integer-64, ... method decode_message_impl (line 165) | defp decode_message_impl( method decode_message_impl (line 178) | defp decode_message_impl(<<"O", lsn::binary-8, name::binary>>, _relati... method decode_message_impl (line 185) | defp decode_message_impl(<<"R", id::integer-32, rest::binary>>, _relat... method decode_message_impl (line 209) | defp decode_message_impl( method decode_message_impl (line 224) | defp decode_message_impl(<<"Y", data_type_id::integer-32, namespace_an... method decode_message_impl (line 235) | defp decode_message_impl(binary, _relations), do: %Unsupported{data: b... method decode_tuple_data (line 237) | defp decode_tuple_data(binary, columns_remaining, relations, accumulat... method decode_tuple_data (line 242) | defp decode_tuple_data(<<"n", rest::binary>>, columns_remaining, [_ | ... method decode_tuple_data (line 245) | defp decode_tuple_data(<<"u", rest::binary>>, columns_remaining, [_ | ... method decode_tuple_data (line 249) | defp decode_tuple_data( method decode_columns (line 284) | defp decode_columns(binary, accumulator \\ []) method decode_columns (line 285) | defp decode_columns(<<>>, accumulator), do: Enum.reverse(accumulator) method decode_columns (line 287) | defp decode_columns(<>, accumulator) do method decode_lsn (line 314) | defp decode_lsn(<>), class Messages (line 8) | defmodule Messages class Begin (line 12) | defmodule Begin class Commit (line 23) | defmodule Commit class Origin (line 35) | defmodule Origin class Relation (line 45) | defmodule Relation class Column (line 57) | defmodule Column class Insert (line 70) | defmodule Insert class Update (line 80) | defmodule Update class Delete (line 92) | defmodule Delete class Truncate (line 103) | defmodule Truncate class Type (line 114) | defmodule Type class Unsupported (line 125) | defmodule Unsupported FILE: lib/realtime/adapters/postgres/oid_database.ex class Realtime.Adapters.Postgres.OidDatabase (line 18) | defmodule Realtime.Adapters.Postgres.OidDatabase method name_for_type_id (line 36) | def name_for_type_id(type_id) do FILE: lib/realtime/adapters/postgres/protocol.ex class Realtime.Adapters.Postgres.Protocol (line 1) | defmodule Realtime.Adapters.Postgres.Protocol method parse (line 11) | def parse(<>) do method standby_status (line 38) | def standby_status(last_wal_received, last_wal_flushed, last_wal_appli... method standby_status (line 40) | def standby_status(last_wal_received, last_wal_flushed, last_wal_appli... method standby_status (line 44) | def standby_status(last_wal_received, last_wal_flushed, last_wal_appli... method hold (line 59) | def hold, do: [] method current_time (line 62) | def current_time, do: System.os_time(:microsecond) - @epoch FILE: lib/realtime/adapters/postgres/protocol/keep_alive.ex class Realtime.Adapters.Postgres.Protocol.KeepAlive (line 1) | defmodule Realtime.Adapters.Postgres.Protocol.KeepAlive FILE: lib/realtime/adapters/postgres/protocol/write.ex class Realtime.Adapters.Postgres.Protocol.Write (line 1) | defmodule Realtime.Adapters.Postgres.Protocol.Write FILE: lib/realtime/api.ex class Realtime.Api (line 1) | defmodule Realtime.Api method list_tenants (line 47) | def list_tenants do method get_tenant! (line 101) | def get_tenant!(id), do: Replica.replica().get!(Tenant, id) method create_tenant (line 115) | def create_tenant(attrs) do method update_tenant (line 150) | defp update_tenant(%Tenant{} = tenant, attrs) do method delete_tenant_by_external_id (line 170) | def delete_tenant_by_external_id(id) do method get_tenant_by_external_id (line 181) | def get_tenant_by_external_id(external_id, opts \\ []) do method list_extensions (line 196) | defp list_extensions(type) do method rename_settings_field (line 202) | def rename_settings_field(from, to) do method update_migrations_ran (line 222) | def update_migrations_ran(external_id, count) do method preload_counters (line 240) | def preload_counters(nil), do: nil method preload_counters (line 242) | def preload_counters(%Tenant{} = tenant) do method preload_counters (line 248) | def preload_counters(nil, _rate), do: nil method preload_counters (line 250) | def preload_counters(%Tenant{} = tenant, counters_rate) do method maybe_restart_rate_counters (line 277) | defp maybe_restart_rate_counters(changeset) do method maybe_update_cache (line 295) | defp maybe_update_cache(_tenant, _changeset), do: :ok method maybe_trigger_disconnect (line 302) | defp maybe_trigger_disconnect(_changeset), do: nil method maybe_restart_db_connection (line 318) | defp maybe_restart_db_connection(_changeset), do: nil method master_region? (line 320) | defp master_region? do method call (line 326) | defp call(operation, args, tenant_id) do method wrapped_call (line 335) | defp wrapped_call(master_node, operation, args, tenant_id) do FILE: lib/realtime/api/extensions.ex class Realtime.Api.Extensions (line 1) | defmodule Realtime.Api.Extensions method changeset (line 21) | def changeset(extension, attrs) do method encrypt_settings (line 44) | def encrypt_settings(changeset, required) do method validate_required_settings (line 57) | def validate_required_settings(changeset, required) do FILE: lib/realtime/api/message.ex class Realtime.Api.Message (line 1) | defmodule Realtime.Api.Message method changeset (line 23) | def changeset(message, attrs) do method put_timestamp (line 39) | defp put_timestamp(changeset, field) do method maybe_put_timestamp (line 43) | defp maybe_put_timestamp(changeset, field) do FILE: lib/realtime/api/tenant.ex class Realtime.Api.Tenant (line 1) | defmodule Realtime.Api.Tenant method changeset (line 48) | def changeset(tenant, attrs) do method maybe_set_default (line 102) | def maybe_set_default(changeset, property, config_key) do method encrypt_jwt_secret (line 112) | def encrypt_jwt_secret(%Ecto.Changeset{valid?: true} = changeset), method encrypt_jwt_secret (line 115) | def encrypt_jwt_secret(changeset), do: changeset FILE: lib/realtime/application.ex class Realtime.Application (line 1) | defmodule Realtime.Application method start (line 18) | def start(_type, _args) do method extensions_supervisors (line 139) | defp extensions_supervisors do method janitor_tasks (line 155) | defp janitor_tasks do method metrics_pusher_children (line 176) | defp metrics_pusher_children do method opentelemetry_setup (line 184) | defp opentelemetry_setup do method pubsub_adapter (line 190) | defp pubsub_adapter do method setup_region_mapping (line 198) | defp setup_region_mapping do class JwtSecretError (line 14) | defmodule JwtSecretError class JwtClaimValidatorsError (line 15) | defmodule JwtClaimValidatorsError class RegionMappingError (line 16) | defmodule RegionMappingError FILE: lib/realtime/beacon_pub_sub_adapter.ex class Realtime.BeaconPubSubAdapter (line 1) | defmodule Realtime.BeaconPubSubAdapter method register (line 9) | def register(scope) do method broadcast (line 14) | def broadcast(scope, message) do method broadcast (line 19) | def broadcast(scope, _nodes, message) do method send (line 28) | def send(scope, node, message) do method topic (line 32) | defp topic(scope), do: "beacon:#{scope}" FILE: lib/realtime/crypto.ex class Realtime.Crypto (line 1) | defmodule Realtime.Crypto method encrypt! (line 10) | def encrypt!(text) do method decrypt! (line 22) | def decrypt!(base64_text) do method pad (line 31) | defp pad(data) do method unpad (line 36) | defp unpad(data) do FILE: lib/realtime/database.ex class Realtime.Database (line 1) | defmodule Realtime.Database method from_tenant (line 48) | def from_tenant(%Tenant{} = tenant, application_name, backoff \\ :rand... method from_settings (line 58) | def from_settings(settings, application_name, backoff \\ :rand_exp) do method check_tenant_connection (line 93) | def check_tenant_connection(nil), do: {:error, :tenant_not_found} method check_tenant_connection (line 95) | def check_tenant_connection(tenant) do method query_connection_info (line 137) | defp query_connection_info(conn) do method connect (line 158) | def connect(tenant, application_name, backoff \\ :stop) do method default_ssl_param (line 171) | def default_ssl_param(_), do: true method transaction (line 177) | def transaction(db_conn, func, opts \\ [], metadata \\ []) method transaction (line 179) | def transaction(%DBConnection{} = db_conn, func, opts, metadata), method transaction (line 185) | def transaction(db_conn, func, opts, metadata) do method transaction_catched (line 196) | defp transaction_catched(db_conn, func, opts, metadata) do method connect_db (line 218) | def connect_db(%__MODULE__{} = settings) do method pool_size_by_application_name (line 269) | def pool_size_by_application_name(application_name, settings) do method replication_slot_teardown (line 324) | def replication_slot_teardown(tenant) do method replication_slot_teardown (line 344) | def replication_slot_teardown(%Tenant{} = tenant, slot_name) do method replication_slot_teardown (line 350) | def replication_slot_teardown(conn, slot_name) do method opts (line 383) | def opts(%__MODULE__{} = settings) do method tenant_pool_requirements (line 390) | defp tenant_pool_requirements(settings) do FILE: lib/realtime/gen_counter/gen_counter.ex class Realtime.GenCounter (line 1) | defmodule Realtime.GenCounter method start_link (line 12) | def start_link(_), do: GenServer.start_link(__MODULE__, :ok, name: @name) method add (line 15) | def add(term), do: add(term, 1) method add (line 17) | def add(term, count), do: :ets.update_counter(@table, term, count, {te... method get (line 20) | def get(term) do method reset (line 29) | def reset(term) do method delete (line 45) | def delete(term) do method init (line 51) | def init(_) do FILE: lib/realtime/gen_rpc.ex class Realtime.GenRpc (line 1) | defmodule Realtime.GenRpc method cast (line 37) | def cast(node, mod, func, args, opts \\ []) method do_call (line 106) | defp do_call(node, mod, func, args, opts) do method telemetry_success (line 200) | defp telemetry_success(node, latency) do method telemetry_failure (line 208) | defp telemetry_failure(node, latency) do method max_clients (line 217) | defp max_clients(), do: Application.fetch_env!(:realtime, :max_gen_rpc... method rpc_nodes (line 219) | defp rpc_nodes(nodes, key), do: Enum.map(nodes, &rpc_node(&1, key)) method rpc_node (line 223) | defp rpc_node(node, nil), do: {node, :rand.uniform(max_clients())} method rpc_node (line 227) | defp rpc_node(node, key), do: {node, :erlang.phash2(key, max_clients()... method unwrap_reason (line 229) | defp unwrap_reason({:unknown_error, {{:badrpc, reason}, _}}), do: reason method unwrap_reason (line 230) | defp unwrap_reason(reason), do: reason method default_rpc_timeout (line 232) | defp default_rpc_timeout, do: Application.get_env(:realtime, :rpc_time... method async_call (line 238) | defp async_call(node, mod, func, args), do: :gen_rpc.async_call(node, ... method nb_yield (line 241) | defp nb_yield(_node, ref, timeout), do: :gen_rpc.nb_yield(ref, timeout) FILE: lib/realtime/gen_rpc/pub_sub.ex class Realtime.GenRpcPubSub (line 1) | defmodule Realtime.GenRpcPubSub method node_name (line 13) | def node_name(_), do: node() method start_link (line 17) | def start_link(opts) do method init (line 29) | def init({adapter_name, pubsub, pool_size}) do method worker_name (line 42) | defp worker_name(adapter_name, key) do method broadcast (line 48) | def broadcast(adapter_name, topic, message, dispatcher) do method nodes_from_other_regions (line 69) | defp nodes_from_other_regions(my_region, key) do method direct_broadcast (line 83) | def direct_broadcast(adapter_name, node_name, topic, message, dispatch... class Realtime.GenRpcPubSub.Worker (line 89) | defmodule Realtime.GenRpcPubSub.Worker method forward_to_local (line 93) | def forward_to_local(topic, message, dispatcher), do: {:ftl, topic, ... method forward_to_region (line 94) | def forward_to_region(topic, message, dispatcher), do: {:ftr, topic,... method start_link (line 97) | def start_link({pubsub, worker}), do: GenServer.start_link(__MODULE_... method init (line 100) | def init({pubsub, worker}) do method handle_info (line 108) | def handle_info({:ftl, topic, message, dispatcher}, {pubsub, worker}... method handle_info (line 114) | def handle_info({:ftr, topic, message, dispatcher}, {pubsub, worker}... method handle_info (line 130) | def handle_info(_, pubsub), do: {:noreply, pubsub} FILE: lib/realtime/helpers.ex class Realtime.Helpers (line 1) | defmodule Realtime.Helpers method cancel_timer (line 8) | def cancel_timer(nil), do: nil method cancel_timer (line 9) | def cancel_timer(ref), do: Process.cancel_timer(ref) method queue_take (line 25) | def queue_take(q, count) do FILE: lib/realtime/log_filter.ex class Realtime.LogFilter (line 1) | defmodule Realtime.LogFilter method setup (line 11) | def setup do method filter (line 23) | def filter( method filter (line 29) | def filter(%{meta: %{mfa: {DBConnection.Connection, _, _}}}, _), do: :... method filter (line 32) | def filter(%{msg: {:format, @ranch_format, [_, _, _, :killed]}}, _), d... method filter (line 34) | def filter(event, _), do: event FILE: lib/realtime/logs.ex class Realtime.Logs (line 1) | defmodule Realtime.Logs method to_log (line 19) | def to_log(value), do: inspect(value, pretty: true) FILE: lib/realtime/messages.ex class Realtime.Messages (line 1) | defmodule Realtime.Messages method replay (line 43) | def replay(_, _, _, _, _), do: {:error, :invalid_replay_params} method messages (line 45) | defp messages(conn, tenant_id, topic, since, limit) do method delete_old_messages (line 73) | def delete_old_messages(conn) do FILE: lib/realtime/metrics_cleaner.ex class Realtime.MetricsCleaner (line 1) | defmodule Realtime.MetricsCleaner method handle_beacon_event (line 9) | def handle_beacon_event([:beacon, :users, :group, :vacant], _, %{group... method handle_beacon_event (line 13) | def handle_beacon_event([:beacon, :users, :group, :occupied], _, %{gro... method handle_syn_event (line 17) | def handle_syn_event([:syn, Realtime.Tenants.Connect, :unregistered], ... method handle_syn_event (line 21) | def handle_syn_event([:syn, Realtime.Tenants.Connect, :registered], _,... method start_link (line 25) | def start_link(opts), do: GenServer.start_link(__MODULE__, opts) method init (line 31) | def init(opts) do method terminate (line 73) | def terminate(_reason, _state) do method handle_info (line 80) | def handle_info(:check, %{interval: interval} = state) do method handle_info (line 98) | def handle_info(msg, state) do method check (line 103) | defp check(interval), do: Process.send_after(self(), :check, interval) method loop_and_cleanup_metrics_table (line 105) | defp loop_and_cleanup_metrics_table(cleaner_table, vacant_metric_clean... FILE: lib/realtime/metrics_pusher.ex class Realtime.MetricsPusher (line 1) | defmodule Realtime.MetricsPusher method start_link (line 15) | def start_link(opts) do method init (line 28) | def init(opts) do method handle_info (line 81) | def handle_info(:push, state) do method handle_info (line 92) | def handle_info(msg, state) do method schedule_push (line 97) | defp schedule_push(delay), do: Process.send_after(self(), :push, delay) method push (line 99) | defp push(req_options) do method send_metrics (line 118) | defp send_metrics(req_options, metrics) do method handle_response (line 123) | defp handle_response({:ok, %{status: status} = response}), do: {:error... method handle_response (line 124) | defp handle_response({:error, reason}), do: {:error, reason} FILE: lib/realtime/monitoring/distributed_metrics.ex class Realtime.DistributedMetrics (line 1) | defmodule Realtime.DistributedMetrics method info (line 9) | def info do method info (line 35) | defp info({node, info}, port_addresses) do method info (line 48) | defp info(node, port_addresses, dist_pid, state, address) do method inet_stats (line 64) | defp inet_stats(port) do method node_queue_size (line 74) | defp node_queue_size(node) do FILE: lib/realtime/monitoring/erl_sys_mon.ex class Realtime.ErlSysMon (line 1) | defmodule Realtime.ErlSysMon method start_link (line 18) | def start_link(args), do: GenServer.start_link(__MODULE__, args) method init (line 20) | def init(args) do method handle_info (line 32) | def handle_info(msg, state) do method log_process_info (line 37) | defp log_process_info(msg, pid) do FILE: lib/realtime/monitoring/gen_rpc_metrics.ex class Realtime.GenRpcMetrics (line 1) | defmodule Realtime.GenRpcMetrics method info (line 10) | def info do method info (line 55) | defp info({node, _}, client_ports, server_ports) do method inet_stats (line 70) | defp inet_stats(ports) do method queue_size (line 79) | defp queue_size(ports) do method server_port (line 86) | defp server_port() do method ip_address_node (line 94) | defp ip_address_node(nodes_info) do FILE: lib/realtime/monitoring/latency.ex class Realtime.Latency (line 1) | defmodule Realtime.Latency method start_link (line 37) | def start_link(args) do method init (line 41) | def init(_args) do method handle_info (line 47) | def handle_info(:ping, state) do method handle_info (line 54) | def handle_info(msg, state) do method handle_cast (line 59) | def handle_cast({:ping, pong_timeout, timer_timeout, yield_timeout}, s... method ping (line 73) | def ping(pong_timeout \\ 0, timer_timeout \\ 5_000, yield_timeout \\ 5... method pong (line 145) | def pong do method ping_after (line 156) | defp ping_after do class Payload (line 12) | defmodule Payload FILE: lib/realtime/monitoring/os_metrics.ex class Realtime.OsMetrics (line 1) | defmodule Realtime.OsMetrics method ram_usage (line 7) | def ram_usage do method cpu_la (line 14) | def cpu_la do method cpu_util (line 23) | def cpu_util do FILE: lib/realtime/monitoring/peep/partitioned.ex class Realtime.Monitoring.Peep.Partitioned (line 1) | defmodule Realtime.Monitoring.Peep.Partitioned method storage_size (line 27) | def storage_size({tid, _}) do method insert_metric (line 35) | def insert_metric({tid, partitions}, id, %Metrics.Counter{}, _value, %... method insert_metric (line 40) | def insert_metric({tid, partitions}, id, %Metrics.Sum{}, value, %{} = ... method insert_metric (line 45) | def insert_metric({tid, _partitions}, id, %Metrics.LastValue{}, value,... method insert_metric (line 50) | def insert_metric({tid, _partitions}, id, %Metrics.Distribution{} = me... method get_all_metrics (line 79) | def get_all_metrics({tid, _partitions}, %Peep.Persistent{ids_to_metric... method get_metric (line 85) | def get_metric({tid, _partitions}, id, %Metrics.Counter{}, tags) do method get_metric (line 90) | def get_metric({tid, _partitions}, id, %Metrics.Sum{}, tags) do method get_metric (line 95) | def get_metric({tid, _partitions}, id, %Metrics.LastValue{}, tags) do method get_metric (line 102) | def get_metric({tid, _partitions}, id, %Metrics.Distribution{}, tags) do method prune_tags (line 112) | def prune_tags({tid, _partitions}, patterns) do method group_metrics (line 137) | defp group_metrics([], _itm, acc) do method group_metrics (line 141) | defp group_metrics([metric | rest], itm, acc) do method group_metric (line 146) | defp group_metric({{id, tags, _}, value}, itm, acc) do method group_metric (line 151) | defp group_metric({{id, tags}, %Storage.Atomics{} = atomics}, itm, acc... method group_metric (line 156) | defp group_metric({{id, tags}, value}, itm, acc) do FILE: lib/realtime/monitoring/prom_ex.ex class Realtime.PromEx (line 1) | defmodule Realtime.PromEx method plugins (line 97) | def plugins do method dashboard_assigns (line 112) | def dashboard_assigns do method dashboards (line 119) | def dashboards do method get_global_metrics (line 134) | def get_global_metrics do method get_metrics (line 144) | def get_metrics, do: get_global_metrics() class Store (line 73) | defmodule Store method scrape (line 80) | def scrape(name) do method child_spec (line 86) | def child_spec(name, metrics) do FILE: lib/realtime/monitoring/prom_ex/plugins/channels.ex class Realtime.PromEx.Plugins.Channels (line 1) | defmodule Realtime.PromEx.Plugins.Channels method event_metrics (line 9) | def event_metrics(_opts) do FILE: lib/realtime/monitoring/prom_ex/plugins/distributed.ex class Realtime.PromEx.Plugins.Distributed (line 1) | defmodule Realtime.PromEx.Plugins.Distributed method polling_metrics (line 17) | def polling_metrics(opts) do method metrics (line 25) | defp metrics(poll_rate) do method execute_metrics (line 78) | def execute_metrics do method execute_inet_stats (line 87) | defp execute_inet_stats(node, info) do method execute_queue_size (line 102) | defp execute_queue_size(node, info) do FILE: lib/realtime/monitoring/prom_ex/plugins/gen_rpc.ex class Realtime.PromEx.Plugins.GenRpc (line 1) | defmodule Realtime.PromEx.Plugins.GenRpc method polling_metrics (line 18) | def polling_metrics(opts) do method metrics (line 26) | defp metrics(poll_rate) do method execute_metrics (line 79) | def execute_metrics do method execute_inet_stats (line 88) | defp execute_inet_stats(node, info) do method execute_queue_size (line 103) | defp execute_queue_size(node, info) do FILE: lib/realtime/monitoring/prom_ex/plugins/osmon.ex class Realtime.PromEx.Plugins.OsMon (line 1) | defmodule Realtime.PromEx.Plugins.OsMon method polling_metrics (line 15) | def polling_metrics(opts) do method metrics (line 23) | defp metrics(poll_rate) do method execute_metrics (line 65) | def execute_metrics do method execute_metrics (line 71) | defp execute_metrics(event, metrics) do FILE: lib/realtime/monitoring/prom_ex/plugins/tenant.ex class Realtime.PromEx.Plugins.Tenant (line 1) | defmodule Realtime.PromEx.Plugins.Tenant method polling_metrics (line 11) | def polling_metrics(opts) do method event_metrics (line 20) | def event_metrics(_opts) do method payload_size_metrics (line 35) | defp payload_size_metrics do method concurrent_connections (line 52) | defp concurrent_connections(poll_rate) do method execute_tenant_metrics (line 77) | def execute_tenant_metrics do method replication_metrics (line 104) | defp replication_metrics do method channel_events (line 136) | defp channel_events do class PayloadSize.Buckets (line 29) | defmodule PayloadSize.Buckets class Replication.Buckets (line 98) | defmodule Replication.Buckets class PolicyAuthorization.Buckets (line 121) | defmodule PolicyAuthorization.Buckets class BroadcastFromDatabase.Buckets (line 126) | defmodule BroadcastFromDatabase.Buckets class Replay.Buckets (line 131) | defmodule Replay.Buckets FILE: lib/realtime/monitoring/prom_ex/plugins/tenant_global.ex class Realtime.PromEx.Plugins.TenantGlobal (line 1) | defmodule Realtime.PromEx.Plugins.TenantGlobal method polling_metrics (line 18) | def polling_metrics(opts) do method event_metrics (line 46) | def event_metrics(_opts) do method execute_global_connection_metrics (line 53) | def execute_global_connection_metrics do method payload_global_size_metrics (line 67) | defp payload_global_size_metrics do method channel_global_events (line 84) | defp channel_global_events do FILE: lib/realtime/monitoring/prom_ex/plugins/tenants.ex class Realtime.PromEx.Plugins.Tenants (line 1) | defmodule Realtime.PromEx.Plugins.Tenants method event_metrics (line 19) | def event_metrics(_) do method polling_metrics (line 34) | def polling_metrics(opts) do method execute_metrics (line 55) | def execute_metrics do method execute_metrics (line 64) | defp execute_metrics(event, metrics) do class Buckets (line 11) | defmodule Buckets FILE: lib/realtime/monitoring/prometheus.ex class Realtime.Monitoring.Prometheus (line 2) | defmodule Realtime.Monitoring.Prometheus method export (line 11) | def export(metrics) do method format (line 19) | defp format({%Counter{}, _series} = metric, cache) do method format (line 23) | defp format({%Sum{} = spec, _series} = metric, cache) do method format (line 27) | defp format({%LastValue{} = spec, _series} = metric, cache) do method format (line 31) | defp format({%Distribution{} = metric, tagged_series}, cache) do method format_distribution (line 44) | defp format_distribution(name, tags, buckets, cache) do method format_standard (line 79) | defp format_standard({metric, series}, type, cache) do method format_labels (line 98) | defp format_labels(labels, cache) do method format_name (line 104) | defp format_name(name, cache) do method format_name_start (line 125) | defp format_name_start(<>), method format_name_rest (line 133) | defp format_name_rest(<<_, rest::binary>>, acc), do: format_name_rest(... method format_name_rest (line 134) | defp format_name_rest(<<>>, acc), do: acc method format_value (line 136) | defp format_value(true), do: "1" method format_value (line 137) | defp format_value(false), do: "0" method format_value (line 138) | defp format_value(nil), do: "0" method escape (line 142) | defp escape(nil, _cache), do: "nil" method escape (line 144) | defp escape(value, cache) do method safe_to_string (line 161) | defp safe_to_string(value) do method do_escape (line 168) | defp do_escape(<>, acc), do: do_escape(rest, [acc, ... method do_escape (line 169) | defp do_escape(<>, acc), do: do_escape(rest, [acc, ... method do_escape (line 170) | defp do_escape(<>, acc), do: do_escape(rest, [acc, ... method do_escape (line 171) | defp do_escape(<>, acc), do: do_escape(rest, [acc, h]) method do_escape (line 172) | defp do_escape(<<>>, acc), do: acc method escape_help (line 174) | defp escape_help(value) do method escape_help (line 180) | defp escape_help(<>, acc), do: escape_help(rest, <<... method escape_help (line 181) | defp escape_help(<>, acc), do: escape_help(rest, <<... method escape_help (line 182) | defp escape_help(<>, acc), do: escape_help(rest, <>, acc), do: acc method prefix_sums (line 185) | defp prefix_sums(buckets), do: prefix_sums(buckets, [], 0) method prefix_sums (line 186) | defp prefix_sums([], acc, sum), do: {Enum.reverse(acc), sum} method prefix_sums (line 188) | defp prefix_sums([{bucket, count} | rest], acc, sum) do FILE: lib/realtime/monitoring/tenant_prom_ex.ex class Realtime.TenantPromEx (line 1) | defmodule Realtime.TenantPromEx method plugins (line 18) | def plugins do method get_metrics (line 27) | def get_metrics do FILE: lib/realtime/nodes.ex class Realtime.Nodes (line 1) | defmodule Realtime.Nodes method get_node_for_tenant (line 13) | def get_node_for_tenant(nil), do: {:error, :tenant_not_found} method get_node_for_tenant (line 15) | def get_node_for_tenant(%Tenant{} = tenant) do method platform_region_translator (line 30) | def platform_region_translator(nil), do: nil method default_region_mapping (line 40) | defp default_region_mapping(tenant_region) do method region_nodes (line 76) | def region_nodes(nil), do: [] method node_from_region (line 97) | def node_from_region(_, _), do: {:error, :not_available} method two_random_nodes (line 159) | defp two_random_nodes(tenant_id, nodes, node_count) do method all_node_regions (line 240) | def all_node_regions(), do: :syn.group_names(RegionNodes) method uptime_ms (line 242) | defp uptime_ms do FILE: lib/realtime/operations.ex class Realtime.Operations (line 1) | defmodule Realtime.Operations method rebalance (line 10) | def rebalance do method kill_connections_to_tenant_id_in_all_nodes (line 34) | def kill_connections_to_tenant_id_in_all_nodes(tenant_id, reason \\ :n... method kill_connections_to_tenant_id (line 49) | def kill_connections_to_tenant_id(tenant_id, reason) do method dirty_terminate_runners (line 74) | def dirty_terminate_runners do method stop_user_tenant_process (line 90) | defp stop_user_tenant_process(tenant, platform_region, acc) do FILE: lib/realtime/postgres_cdc.ex class Realtime.PostgresCdc (line 1) | defmodule Realtime.PostgresCdc method connect (line 15) | def connect(module, opts) do method after_connect (line 19) | def after_connect(module, connect_response, extension, params, tenant) do method subscribe (line 23) | def subscribe(module, pg_change_params, tenant, metadata) do method stop (line 29) | def stop(module, tenant, timeout \\ @timeout) do method stop_all (line 42) | def stop_all(tenant, timeout \\ @timeout) do method available_drivers (line 55) | def available_drivers do method filter_settings (line 62) | def filter_settings(key, extensions) do method driver (line 73) | def driver(tenant_key) do class Exception (line 11) | defmodule Exception FILE: lib/realtime/rate_counter/dynamic_supervisor.ex class Realtime.RateCounter.DynamicSupervisor (line 1) | defmodule Realtime.RateCounter.DynamicSupervisor method start_link (line 9) | def start_link(args) do method init (line 14) | def init(_args) do FILE: lib/realtime/rate_counter/rate_counter.ex class Realtime.RateCounter (line 1) | defmodule Realtime.RateCounter method start_link (line 71) | def start_link(args) do method new (line 85) | def new(%Args{id: id} = args, opts \\ []) do method publish_update (line 97) | def publish_update(id), do: Phoenix.PubSub.broadcast(Realtime.PubSub, ... method get (line 106) | def get(%Args{id: id} = args) do method do_get (line 120) | defp do_get(id) do method update_topic (line 127) | defp update_topic(id), do: "rate_counter:#{inspect(id)}" method init (line 130) | def init(args) do method handle_info (line 195) | def handle_info(:tick, state) do method handle_info (line 223) | def handle_info(:idle_shutdown, state) do method handle_info (line 235) | def handle_info(:update, state) do method handle_info (line 241) | def handle_info(_, state), do: {:noreply, state} method shutdown (line 243) | defp shutdown(state) do method maybe_trigger_limit (line 258) | defp maybe_trigger_limit(%{limit: %{log: false}} = state), do: state method maybe_trigger_limit (line 260) | defp maybe_trigger_limit(%{limit: %{triggered: true, measurement: meas... method maybe_trigger_limit (line 270) | defp maybe_trigger_limit(%{limit: %{measurement: measurement}} = state... method tick (line 280) | defp tick(every) do method shutdown_after (line 284) | defp shutdown_after(ms) do class Args (line 17) | defmodule Args FILE: lib/realtime/release.ex class Realtime.Release (line 1) | defmodule Realtime.Release method migrate (line 8) | def migrate do method rollback (line 16) | def rollback(repo, version) do method seeds (line 21) | def seeds(repo) do method repos (line 37) | defp repos do method load_app (line 41) | defp load_app do FILE: lib/realtime/repo.ex class Realtime.Repo (line 1) | defmodule Realtime.Repo method with_dynamic_repo (line 6) | def with_dynamic_repo(config, callback) do FILE: lib/realtime/repo_replica.ex class Realtime.Repo.Replica (line 1) | defmodule Realtime.Repo.Replica method replica (line 44) | def replica do method configured_replica_module (line 72) | defp configured_replica_module(region) do FILE: lib/realtime/rpc.ex class Realtime.Rpc (line 1) | defmodule Realtime.Rpc method call (line 12) | def call(node, mod, func, args, opts \\ []) do method enhanced_call (line 30) | def enhanced_call(node, mod, func, args \\ [], opts \\ []) do FILE: lib/realtime/signal_handler.ex class Realtime.SignalHandler (line 1) | defmodule Realtime.SignalHandler method shutdown_in_progress? (line 7) | def shutdown_in_progress? do method init (line 15) | def init({%{handler_mod: _} = args, :ok}) do method handle_event (line 20) | def handle_event(signal, %{handler_mod: handler_mod} = state) do FILE: lib/realtime/syn/postgres_cdc.ex class Realtime.Syn.PostgresCdc (line 1) | defmodule Realtime.Syn.PostgresCdc method scope (line 10) | def scope(tenant_id) do method scopes (line 16) | def scopes() do method syn_topic_prefix (line 21) | def syn_topic_prefix(), do: "realtime_postgres_cdc_" method syn_topic (line 22) | def syn_topic(tenant_id), do: "#{syn_topic_prefix()}#{tenant_id}" FILE: lib/realtime/syn_handler.ex class Realtime.SynHandler (line 1) | defmodule Realtime.SynHandler method on_registry_process_updated (line 20) | def on_registry_process_updated(scope, tenant_id, _pid, meta, _reason) do method on_process_registered (line 33) | def on_process_registered(scope, name, _pid, _meta, _reason) do method on_process_unregistered (line 47) | def on_process_unregistered(scope, name, pid, _meta, reason) do method resolve_registry_conflict (line 75) | def resolve_registry_conflict(mod, name, {pid1, _meta1, _time1}, {pid2... method stop (line 94) | defp stop(pid_to_stop) do method log (line 110) | defp log(message), do: Logger.warning("SynHandler(#{node()}): #{messag... method decide (line 115) | defp decide(pid1, pid2, name) do method topic (line 135) | defp topic(mod) do FILE: lib/realtime/telemetry/logger.ex class Realtime.Telemetry.Logger (line 1) | defmodule Realtime.Telemetry.Logger method start_link (line 18) | def start_link(args) do method init (line 22) | def init(handler_id: handler_id) do method handle_event (line 31) | def handle_event(event, measurements, %{tenant: tenant}, _config) do method handle_event (line 37) | def handle_event(_event, _measurements, _metadata, _config) do method handle_info (line 41) | def handle_info(_msg, state) do FILE: lib/realtime/telemetry/telemetry.ex class Realtime.Telemetry (line 1) | defmodule Realtime.Telemetry method execute (line 11) | def execute(event, measurements, metadata \\ %{}) do FILE: lib/realtime/tenants.ex class Realtime.Tenants (line 1) | defmodule Realtime.Tenants method get_health_conn (line 27) | def get_health_conn(%Tenant{external_id: external_id}) do method replication_connected? (line 113) | defp replication_connected?(external_id) do method limiter_keys (line 124) | def limiter_keys(%Tenant{} = tenant) do method requests_per_second_rate (line 136) | def requests_per_second_rate(%Tenant{} = tenant) do method requests_per_second_key (line 142) | def requests_per_second_key(%Tenant{} = tenant) do method joins_per_second_rate (line 148) | def joins_per_second_rate(%Tenant{} = tenant), method joins_per_second_key (line 180) | def joins_per_second_key(%Tenant{} = tenant) do method channels_per_client_key (line 190) | def channels_per_client_key(%Tenant{} = tenant) do method events_per_second_rate (line 196) | def events_per_second_rate(tenant), do: events_per_second_rate(tenant.... method events_per_second_rate (line 198) | def events_per_second_rate(tenant_id, max_events_per_second) do method events_per_second_key (line 234) | def events_per_second_key(%Tenant{} = tenant) do method db_events_per_second_rate (line 240) | def db_events_per_second_rate(%Tenant{} = tenant), method db_events_per_second_key (line 280) | def db_events_per_second_key(%Tenant{} = tenant) do method presence_events_per_second_rate (line 286) | def presence_events_per_second_rate(tenant) do method presence_events_per_second_rate (line 291) | def presence_events_per_second_rate(tenant_id, max_presence_events_per... method presence_events_per_second_key (line 326) | def presence_events_per_second_key(%Tenant{} = tenant) do method authorization_errors_per_second_rate (line 331) | def authorization_errors_per_second_rate(%Tenant{external_id: external... method authorization_errors_per_second_key (line 349) | def authorization_errors_per_second_key(tenant_id), do: {:channel, :au... method subscription_errors_per_second_rate (line 352) | def subscription_errors_per_second_rate(tenant_id, pool_size) do method subscription_errors_per_second_key (line 370) | def subscription_errors_per_second_key(tenant_id), do: {:channel, :sub... method connect_errors_per_second_rate (line 377) | def connect_errors_per_second_rate(%Tenant{external_id: external_id}) do method connect_errors_per_second_rate (line 381) | def connect_errors_per_second_rate(tenant_id) do method connect_errors_per_second_key (line 401) | def connect_errors_per_second_key(tenant_id), do: {:database, :connect... method authorization_pool_size (line 403) | defp authorization_pool_size(%{extensions: [%{settings: settings} | _]... method authorization_pool_size (line 407) | defp authorization_pool_size(_), do: 1 method get_tenant_by_external_id (line 433) | def get_tenant_by_external_id(external_id) do method tenant_topic (line 457) | def tenant_topic(external_id, sub_topic, public? \\ true) method tenant_topic (line 459) | def tenant_topic(%Tenant{external_id: external_id}, sub_topic, public?), method tenant_topic (line 462) | def tenant_topic(external_id, sub_topic, false), method tenant_topic (line 465) | def tenant_topic(external_id, sub_topic, true), method suspend_tenant_by_external_id (line 472) | def suspend_tenant_by_external_id(external_id) do method unsuspend_tenant_by_external_id (line 482) | def unsuspend_tenant_by_external_id(external_id) do method run_migrations? (line 492) | def run_migrations?(%Tenant{} = tenant), do: run_migrations?(tenant.mi... method broadcast_operation_event (line 501) | def broadcast_operation_event(action, external_id), method region (line 509) | def region(%Tenant{extensions: [%{settings: settings}]}), do: Map.get(... method region (line 510) | def region(_), do: nil method validate_payload_size (line 522) | def validate_payload_size(%Tenant{max_payload_size_in_kb: max_payload_... FILE: lib/realtime/tenants/authorization.ex class Realtime.Tenants.Authorization (line 1) | defmodule Realtime.Tenants.Authorization method build_authorization_params (line 46) | def build_authorization_params(map) do method get_read_authorizations (line 64) | def get_read_authorizations(policies, db_conn, authorization_context, ... method get_read_authorizations (line 79) | def get_read_authorizations(policies, db_conn, authorization_context, ... method get_write_authorizations (line 113) | def get_write_authorizations(policies, db_conn, authorization_context,... method get_write_authorizations (line 128) | def get_write_authorizations(policies, db_conn, authorization_context,... method get_write_authorizations (line 155) | def get_write_authorizations(db_conn, authorization_context) do method handle_policies_result (line 159) | defp handle_policies_result(result, rate_counter) do method set_conn_config (line 190) | def set_conn_config(conn, authorization_context) do method get_read_policies_for_connection (line 217) | defp get_read_policies_for_connection(conn, authorization_context, pol... method get_write_policies_for_connection (line 246) | defp get_write_policies_for_connection(conn, authorization_context, po... method extensions_to_check (line 268) | defp extensions_to_check(opts) do method check_read_policies (line 274) | defp check_read_policies(conn, authorization_context, messages_by_exte... method check_write_policies (line 292) | defp check_write_policies(conn, authorization_context, extensions, pol... method rate_counter (line 313) | defp rate_counter(tenant_id) do FILE: lib/realtime/tenants/authorization/policies.ex class Realtime.Tenants.Authorization.Policies (line 1) | defmodule Realtime.Tenants.Authorization.Policies method update_policies (line 25) | def update_policies(policies, key, sub_key, value) do FILE: lib/realtime/tenants/authorization/policies/broadcast_policies.ex class Realtime.Tenants.Authorization.Policies.BroadcastPolicies (line 1) | defmodule Realtime.Tenants.Authorization.Policies.BroadcastPolicies FILE: lib/realtime/tenants/authorization/policies/presence_policies.ex class Realtime.Tenants.Authorization.Policies.PresencePolicies (line 1) | defmodule Realtime.Tenants.Authorization.Policies.PresencePolicies FILE: lib/realtime/tenants/batch_broadcast.ex class Realtime.Tenants.BatchBroadcast (line 1) | defmodule Realtime.Tenants.BatchBroadcast method broadcast (line 37) | def broadcast(auth_params, tenant, messages, super_user \\ false) method broadcast (line 39) | def broadcast(%Plug.Conn{} = conn, %Tenant{} = tenant, messages, super... method broadcast (line 51) | def broadcast(auth_params, %Tenant{} = tenant, messages, super_user) do method broadcast (line 93) | def broadcast(_, nil, _, _), do: {:error, :tenant_not_found} method changeset (line 95) | defp changeset(payload, attrs, tenant) do method message_changeset (line 101) | defp message_changeset(message, tenant, attrs) do method maybe_put_private_change (line 109) | defp maybe_put_private_change(changeset) do method validate_payload_size (line 116) | defp validate_payload_size(changeset, tenant) do method send_message_and_count (line 126) | defp send_message_and_count(tenant, events_per_second_rate, message, p... method permissions_for_message (line 149) | defp permissions_for_message(_, nil, _), do: nil method permissions_for_message (line 151) | defp permissions_for_message(tenant, auth_params, topic) do method check_rate_limit (line 166) | defp check_rate_limit(events_per_second_rate, %Tenant{} = tenant, tota... FILE: lib/realtime/tenants/cache.ex class Realtime.Tenants.Cache (line 1) | defmodule Realtime.Tenants.Cache method child_spec (line 11) | def child_spec(_) do method get_tenant_by_external_id (line 20) | def get_tenant_by_external_id(tenant_id) do method cache_key (line 33) | defp cache_key(tenant_id), do: {:get_tenant_by_external_id, tenant_id} method invalidate_tenant_cache (line 38) | def invalidate_tenant_cache(tenant_id), do: Cachex.del(__MODULE__, cac... method update_cache (line 47) | def update_cache(tenant) do method global_cache_update (line 55) | def global_cache_update(tenant) do FILE: lib/realtime/tenants/connect.ex class Realtime.Tenants.Connect (line 1) | defmodule Realtime.Tenants.Connect method list_tenants (line 61) | def list_tenants() do method ready? (line 68) | def ready?(tenant_id) do method get_status (line 125) | def get_status(tenant_id) do method syn_topic (line 145) | def syn_topic(tenant_id), do: "connect:#{tenant_id}" method wait_for_connection (line 147) | defp wait_for_connection(pid, tenant_id) do method connect (line 180) | def connect(tenant_id, region, opts \\ []) do method whereis (line 204) | def whereis(tenant_id) do method replication_status (line 215) | def replication_status(tenant_id) do method shutdown (line 226) | def shutdown(tenant_id) do method start_link (line 237) | def start_link(opts) do method init (line 263) | def init(%{tenant_id: tenant_id} = state) do method handle_continue (line 270) | def handle_continue(:db_connect, state) do method handle_continue (line 294) | def handle_continue(:run_migrations, state) do method handle_continue (line 312) | def handle_continue(:start_replication, state) do method handle_continue (line 319) | def handle_continue(:setup_connected_user_events, state) do method handle_continue (line 332) | def handle_continue(:start_connect_region_check, state) do method handle_info (line 338) | def handle_info( method handle_info (line 354) | def handle_info({:check_connect_region, previous_nodes_set}, state) do method handle_info (line 369) | def handle_info(:shutdown_no_connected_users, state) do method handle_info (line 374) | def handle_info(:shutdown_connect, state) do method handle_info (line 380) | def handle_info( method handle_info (line 389) | def handle_info( method handle_info (line 414) | def handle_info(:recover_replication_connection, %{replication_recover... method handle_info (line 418) | def handle_info(:recover_replication_connection, state) do method handle_info (line 449) | def handle_info(_, state), do: {:noreply, state} method handle_call (line 452) | def handle_call(:ready?, _from, state) do method terminate (line 459) | def terminate(reason, %{tenant_id: tenant_id}) do method call_external_node (line 465) | defp call_external_node(tenant_id, opts) do method update_connected_users_bucket (line 479) | defp update_connected_users_bucket(tenant_id, connected_users_bucket) do method send_connected_user_check_message (line 485) | defp send_connected_user_check_message( method send_connected_user_check_message (line 492) | defp send_connected_user_check_message(connected_users_bucket, check_c... method send_connect_region_check_message (line 497) | defp send_connect_region_check_message(check_connect_region_interval) do method tenant_suspended? (line 501) | defp tenant_suspended?(%Tenant{suspend: true}), do: {:error, :tenant_s... method tenant_suspended? (line 502) | defp tenant_suspended?(_), do: :ok method rebalance_check_interval_in_ms (line 504) | defp rebalance_check_interval_in_ms(), do: Application.fetch_env!(:rea... method schedule_replication_retry (line 506) | defp schedule_replication_retry(%{backoff: backoff} = state) do method update_syn_replication_conn (line 512) | defp update_syn_replication_conn(tenant_id, pid) do method start_replication_connection (line 516) | defp start_replication_connection(state) do FILE: lib/realtime/tenants/connect/check_connection.ex class Realtime.Tenants.Connect.CheckConnection (line 1) | defmodule Realtime.Tenants.Connect.CheckConnection method run (line 8) | def run(acc) do FILE: lib/realtime/tenants/connect/get_tenant.ex class Realtime.Tenants.Connect.GetTenant (line 1) | defmodule Realtime.Tenants.Connect.GetTenant method run (line 11) | def run(acc) do FILE: lib/realtime/tenants/connect/piper.ex class Realtime.Tenants.Connect.Piper (line 1) | defmodule Realtime.Tenants.Connect.Piper method run (line 8) | def run(pipers, init) do FILE: lib/realtime/tenants/connect/reconcile_migrations.ex class Realtime.Tenants.Connect.ReconcileMigrations (line 1) | defmodule Realtime.Tenants.Connect.ReconcileMigrations method run (line 17) | def run(%{tenant: tenant, migrations_ran_on_database: migrations_ran_o... FILE: lib/realtime/tenants/connect/register_process.ex class Realtime.Tenants.Connect.RegisterProcess (line 1) | defmodule Realtime.Tenants.Connect.RegisterProcess method run (line 9) | def run(acc) do FILE: lib/realtime/tenants/janitor.ex class Realtime.Tenants.Janitor (line 1) | defmodule Realtime.Tenants.Janitor method start_link (line 27) | def start_link(_args) do method init (line 46) | def init(%__MODULE__{start_after: start_after} = state) do method handle_info (line 58) | def handle_info(:delete_old_messages, state) do method handle_info (line 87) | def handle_info({:DOWN, ref, _, _, :normal}, state) do method handle_info (line 94) | def handle_info({:DOWN, ref, _, _, :killed}, state) do method handle_info (line 106) | def handle_info(_, state) do method timer (line 112) | defp timer(%{timer: timer, randomize: true}), do: timer + :timer.minut... method timer (line 115) | defp timer(%{timer: timer}), do: timer method perform_maintenance_tasks (line 117) | defp perform_maintenance_tasks(tenants), do: Enum.map(tenants, &perfor... method perform_maintenance_task (line 119) | defp perform_maintenance_task(tenant_external_id) do FILE: lib/realtime/tenants/janitor/maintenance_task.ex class Realtime.Tenants.Janitor.MaintenanceTask (line 1) | defmodule Realtime.Tenants.Janitor.MaintenanceTask method run (line 9) | def run(tenant_external_id) do FILE: lib/realtime/tenants/migrations.ex class Realtime.Tenants.Migrations (line 1) | defmodule Realtime.Tenants.Migrations method run_migrations (line 170) | def run_migrations(%Tenant{} = tenant) do method start_migration (line 192) | def start_migration(attrs) do method start_link (line 204) | def start_link(%__MODULE__{tenant_external_id: tenant_external_id} = a... method init (line 209) | def init(%__MODULE__{tenant_external_id: tenant_external_id, settings:... method migrate (line 226) | defp migrate(settings) do method create_partitions (line 261) | def create_partitions(db_conn_pid) do method migrations (line 292) | def migrations(), do: @migrations FILE: lib/realtime/tenants/rebalancer.ex class Realtime.Tenants.Rebalancer (line 1) | defmodule Realtime.Tenants.Rebalancer FILE: lib/realtime/tenants/replication_connection.ex class Realtime.Tenants.ReplicationConnection (line 1) | defmodule Realtime.Tenants.ReplicationConnection method start (line 93) | def start(tenant, monitored_pid, init_timeout \\ @default_init_timeout... method whereis (line 130) | def whereis(tenant_id) do method health_check (line 138) | def health_check(pid, timeout), do: Postgrex.ReplicationConnection.cal... method start_link (line 140) | def start_link(%__MODULE__{tenant_id: tenant_id} = attrs) do method init (line 168) | def init(%__MODULE__{tenant_id: tenant_id, monitored_pid: monitored_pi... method handle_connect (line 188) | def handle_connect(state) do method handle_result (line 198) | def handle_result([%Postgrex.Result{num_rows: 1}], %__MODULE__{step: :... method handle_result (line 203) | def handle_result([%Postgrex.Result{num_rows: 0}], %__MODULE__{step: :... method handle_result (line 217) | def handle_result([%Postgrex.Result{}], %__MODULE__{step: :check_publi... method handle_result (line 226) | def handle_result([%Postgrex.Result{num_rows: 0}], %__MODULE__{step: :... method handle_result (line 235) | def handle_result([%Postgrex.Result{num_rows: 1}], %__MODULE__{step: :... method handle_result (line 249) | def handle_result([%Postgrex.Result{rows: rows}], %__MODULE__{step: :v... method handle_result (line 268) | def handle_result(%Postgrex.Error{postgres: %{message: message}}, %__M... method handle_result (line 272) | def handle_result(%Postgrex.Error{message: message}, %__MODULE__{step:... method handle_result (line 276) | def handle_result(results, %__MODULE__{step: :start_replication_slot} ... method handle_result (line 303) | def handle_result(%Postgrex.Error{postgres: %{message: message}}, _sta... method handle_data (line 326) | def handle_data(e, state) do method handle_call (line 332) | def handle_call(:health_check, from, state) do method handle_info (line 339) | def handle_info({:DOWN, _, :process, _, _}, _), do: {:disconnect, :shu... method handle_info (line 340) | def handle_info(_, state), do: {:noreply, state} method handle_message (line 342) | defp handle_message(%Decoder.Messages.Begin{commit_timestamp: commit_t... method handle_message (line 347) | defp handle_message(%Decoder.Messages.Relation{} = msg, state) do method handle_message (line 369) | defp handle_message(%Decoder.Messages.Insert{} = msg, state) do method handle_message (line 422) | defp handle_message(_, state), do: {:noreply, state} method handle_disconnect (line 424) | def handle_disconnect(state) do method supervisor_spec (line 430) | def supervisor_spec(%Tenant{external_id: tenant_id}) do method publication_name (line 434) | def publication_name(schema, table) do method replication_slot_name (line 438) | def replication_slot_name(schema, table) do method slot_suffix (line 442) | defp slot_suffix, do: Application.get_env(:realtime, :slot_name_suffix) method tuple_to_map (line 444) | defp tuple_to_map(tuple_data, columns) do method get_or_error (line 455) | defp get_or_error(map, key, error_type) do class Wrapper (line 67) | defmodule Wrapper method start_link (line 73) | def start_link(args, init_timeout) do method init (line 78) | def init(args) do FILE: lib/realtime/tenants/replication_connection/watchdog.ex class Realtime.Tenants.ReplicationConnection.Watchdog (line 1) | defmodule Realtime.Tenants.ReplicationConnection.Watchdog method start_link (line 14) | def start_link(opts), do: GenServer.start_link(__MODULE__, opts) method init (line 17) | def init(opts) do method handle_info (line 51) | def handle_info(:health_check, state) do FILE: lib/realtime/tenants/repo.ex class Realtime.Tenants.Repo (line 1) | defmodule Realtime.Tenants.Repo method all (line 14) | def all(conn, query, result_struct, opts \\ []) do method one (line 30) | def one(conn, query, result_struct, opts \\ []) do method insert (line 46) | def insert(conn, changeset, result_struct, opts \\ []) do method insert_all_entries (line 64) | def insert_all_entries(conn, changesets, result_struct, opts \\ []) do method del (line 77) | def del(conn, query) do method update (line 88) | def update(conn, changeset, result_struct, opts \\ []) do method result_to_single_struct (line 96) | defp result_to_single_struct( method result_to_single_struct (line 104) | defp result_to_single_struct({:error, _} = error, _, _), do: error method result_to_single_struct (line 106) | defp result_to_single_struct({:ok, %Postgrex.Result{rows: []}}, _, _) do method result_to_single_struct (line 110) | defp result_to_single_struct({:ok, %Postgrex.Result{rows: [row], colum... method result_to_single_struct (line 115) | defp result_to_single_struct({:ok, %Postgrex.Result{num_rows: num_rows... method result_to_structs (line 119) | defp result_to_structs({:error, _} = error, _), do: error method result_to_structs (line 121) | defp result_to_structs({:ok, %Postgrex.Result{rows: rows, columns: col... method insert_query_from_changeset (line 126) | defp insert_query_from_changeset(%{valid?: false} = changeset), do: {:... method insert_query_from_changeset (line 128) | defp insert_query_from_changeset(changeset) do method insert_all_query_from_changeset (line 160) | defp insert_all_query_from_changeset(changesets) do method update_query_from_changeset (line 211) | defp update_query_from_changeset(%{valid?: false} = changeset), do: {:... method update_query_from_changeset (line 213) | defp update_query_from_changeset(changeset) do method run_all_query (line 221) | defp run_all_query(conn, query, opts) do method run_delete_query (line 227) | defp run_delete_query(conn, query) do method run_query_with_trap (line 233) | defp run_query_with_trap(conn, query, args, opts \\ []) do FILE: lib/realtime/tenants/repo/migrations/20211116024918_create_realtime_subscription_table.ex class Realtime.Tenants.Migrations.CreateRealtimeSubscriptionTable (line 1) | defmodule Realtime.Tenants.Migrations.CreateRealtimeSubscriptionTable method change (line 6) | def change do FILE: lib/realtime/tenants/repo/migrations/20211116045059_create_realtime_check_filters_trigger.ex class Realtime.Tenants.Migrations.CreateRealtimeCheckFiltersTrigger (line 1) | defmodule Realtime.Tenants.Migrations.CreateRealtimeCheckFiltersTrigger method change (line 6) | def change do FILE: lib/realtime/tenants/repo/migrations/20211116050929_create_realtime_quote_wal2json_function.ex class Realtime.Tenants.Migrations.CreateRealtimeQuoteWal2jsonFunction (line 1) | defmodule Realtime.Tenants.Migrations.CreateRealtimeQuoteWal2jsonFunction method change (line 6) | def change do FILE: lib/realtime/tenants/repo/migrations/20211116051442_create_realtime_check_equality_op_function.ex class Realtime.Tenants.Migrations.CreateRealtimeCheckEqualityOpFunction (line 1) | defmodule Realtime.Tenants.Migrations.CreateRealtimeCheckEqualityOpFunction method change (line 6) | def change do FILE: lib/realtime/tenants/repo/migrations/20211116212300_create_realtime_build_prepared_statement_sql_function.ex class Realtime.Tenants.Migrations.CreateRealtimeBuildPreparedStatementSqlFunction (line 1) | defmodule Realtime.Tenants.Migrations.CreateRealtimeBuildPreparedStateme... method change (line 6) | def change do FILE: lib/realtime/tenants/repo/migrations/20211116213355_create_realtime_cast_function.ex class Realtime.Tenants.Migrations.CreateRealtimeCastFunction (line 1) | defmodule Realtime.Tenants.Migrations.CreateRealtimeCastFunction method change (line 6) | def change do FILE: lib/realtime/tenants/repo/migrations/20211116213934_create_realtime_is_visible_through_filters_function.ex class Realtime.Tenants.Migrations.CreateRealtimeIsVisibleThroughFiltersFunction (line 1) | defmodule Realtime.Tenants.Migrations.CreateRealtimeIsVisibleThroughFilt... method change (line 6) | def change do FILE: lib/realtime/tenants/repo/migrations/20211116214523_create_realtime_apply_rls_function.ex class Realtime.Tenants.Migrations.CreateRealtimeApplyRlsFunction (line 1) | defmodule Realtime.Tenants.Migrations.CreateRealtimeApplyRlsFunction method change (line 6) | def change do FILE: lib/realtime/tenants/repo/migrations/20211122062447_grant_realtime_usage_to_authenticated_role.ex class Realtime.Tenants.Migrations.GrantRealtimeUsageToAuthenticatedRole (line 1) | defmodule Realtime.Tenants.Migrations.GrantRealtimeUsageToAuthenticatedRole method change (line 6) | def change do FILE: lib/realtime/tenants/repo/migrations/20211124070109_enable_realtime_apply_rls_function_postgrest_9_compatibility.ex class Realtime.Tenants.Migrations.EnableRealtimeApplyRlsFunctionPostgrest9Compatibility (line 1) | defmodule Realtime.Tenants.Migrations.EnableRealtimeApplyRlsFunctionPost... method change (line 6) | def change do FILE: lib/realtime/tenants/repo/migrations/20211202204204_update_realtime_subscription_check_filters_function_security.ex class Realtime.Tenants.Migrations.UpdateRealtimeSubscriptionCheckFiltersFunctionSecurity (line 1) | defmodule Realtime.Tenants.Migrations.UpdateRealtimeSubscriptionCheckFil... method change (line 6) | def change do FILE: lib/realtime/tenants/repo/migrations/20211202204605_update_realtime_build_prepared_statement_sql_function_for_compatibility_with_all_types.ex class Realtime.Tenants.Migrations.UpdateRealtimeBuildPreparedStatementSqlFunctionForCompatibilityWithAllTypes (line 1) | defmodule Realtime.Tenants.Migrations.UpdateRealtimeBuildPreparedStateme... method change (line 6) | def change do FILE: lib/realtime/tenants/repo/migrations/20211210212804_enable_generic_subscription_claims.ex class Realtime.Tenants.Migrations.EnableGenericSubscriptionClaims (line 1) | defmodule Realtime.Tenants.Migrations.EnableGenericSubscriptionClaims method change (line 6) | def change do FILE: lib/realtime/tenants/repo/migrations/20211228014915_add_wal_payload_on_errors_in_apply_rls_function.ex class Realtime.Tenants.Migrations.AddWalPayloadOnErrorsInApplyRlsFunction (line 1) | defmodule Realtime.Tenants.Migrations.AddWalPayloadOnErrorsInApplyRlsFun... method change (line 6) | def change do FILE: lib/realtime/tenants/repo/migrations/20220107221237_update_change_timestamp_to_iso_8601_zulu_format.ex class Realtime.Tenants.Migrations.UpdateChangeTimestampToIso8601ZuluFormat (line 1) | defmodule Realtime.Tenants.Migrations.UpdateChangeTimestampToIso8601Zulu... method change (line 6) | def change do FILE: lib/realtime/tenants/repo/migrations/20220228202821_update_subscription_check_filters_function_dynamic_table_name.ex class Realtime.Tenants.Migrations.UpdateSubscriptionCheckFiltersFunctionDynamicTableName (line 1) | defmodule Realtime.Tenants.Migrations.UpdateSubscriptionCheckFiltersFunc... method change (line 6) | def change do FILE: lib/realtime/tenants/repo/migrations/20220312004840_update_apply_rls_function_to_apply_iso_8601.ex class Realtime.Tenants.Migrations.UpdateApplyRlsFunctionToApplyIso8601 (line 1) | defmodule Realtime.Tenants.Migrations.UpdateApplyRlsFunctionToApplyIso8601 method change (line 6) | def change do FILE: lib/realtime/tenants/repo/migrations/20220603231003_add_quoted_regtypes_support.ex class Realtime.Tenants.Migrations.AddQuotedRegtypesSupport (line 1) | defmodule Realtime.Tenants.Migrations.AddQuotedRegtypesSupport method change (line 6) | def change do FILE: lib/realtime/tenants/repo/migrations/20220603232444_add_output_for_data_less_than_equal_64_bytes_when_payload_too_large.ex class Realtime.Tenants.Migrations.AddOutputForDataLessThanEqual64BytesWhenPayloadTooLarge (line 1) | defmodule Realtime.Tenants.Migrations.AddOutputForDataLessThanEqual64Byt... method change (line 6) | def change do FILE: lib/realtime/tenants/repo/migrations/20220615214548_add_quoted_regtypes_backward_compatibility_support.ex class Realtime.Tenants.Migrations.AddQuotedRegtypesBackwardCompatibilitySupport (line 1) | defmodule Realtime.Tenants.Migrations.AddQuotedRegtypesBackwardCompatibi... method change (line 6) | def change do FILE: lib/realtime/tenants/repo/migrations/20220712093339_recreate_realtime_build_prepared_statement_sql_function.ex class Realtime.Tenants.Migrations.RecreateRealtimeBuildPreparedStatementSqlFunction (line 1) | defmodule Realtime.Tenants.Migrations.RecreateRealtimeBuildPreparedState... method change (line 6) | def change do FILE: lib/realtime/tenants/repo/migrations/20220908172859_null_passes_filters_recreate_is_visible_through_filters.ex class Realtime.Tenants.Migrations.NullPassesFiltersRecreateIsVisibleThroughFilters (line 1) | defmodule Realtime.Tenants.Migrations.NullPassesFiltersRecreateIsVisible... method change (line 6) | def change do FILE: lib/realtime/tenants/repo/migrations/20220916233421_update_apply_rls_function_to_pass_through_delete_events_on_filter.ex class Realtime.Tenants.Migrations.UpdateApplyRlsFunctionToPassThroughDeleteEventsOnFilter (line 1) | defmodule Realtime.Tenants.Migrations.UpdateApplyRlsFunctionToPassThroug... method change (line 6) | def change do FILE: lib/realtime/tenants/repo/migrations/20230119133233_millisecond_precision_for_walrus.ex class Realtime.Tenants.Migrations.MillisecondPrecisionForWalrus (line 1) | defmodule Realtime.Tenants.Migrations.MillisecondPrecisionForWalrus method change (line 6) | def change do FILE: lib/realtime/tenants/repo/migrations/20230128025114_add_in_op_to_filters.ex class Realtime.Tenants.Migrations.AddInOpToFilters (line 1) | defmodule Realtime.Tenants.Migrations.AddInOpToFilters method change (line 6) | def change do FILE: lib/realtime/tenants/repo/migrations/20230128025212_enable_filtering_on_delete_record.ex class Realtime.Tenants.Migrations.EnableFilteringOnDeleteRecord (line 1) | defmodule Realtime.Tenants.Migrations.EnableFilteringOnDeleteRecord method change (line 6) | def change do FILE: lib/realtime/tenants/repo/migrations/20230227211149_update_subscription_check_filters_for_in_filter_non_text_types.ex class Realtime.Tenants.Migrations.UpdateSubscriptionCheckFiltersForInFilterNonTextTypes (line 1) | defmodule Realtime.Tenants.Migrations.UpdateSubscriptionCheckFiltersForI... method change (line 6) | def change do FILE: lib/realtime/tenants/repo/migrations/20230228184745_convert_commit_timestamp_to_utc.ex class Realtime.Tenants.Migrations.ConvertCommitTimestampToUtc (line 1) | defmodule Realtime.Tenants.Migrations.ConvertCommitTimestampToUtc method change (line 6) | def change do FILE: lib/realtime/tenants/repo/migrations/20230308225145_output_full_record_when_unchanged_toast.ex class Realtime.Tenants.Migrations.OutputFullRecordWhenUnchangedToast (line 1) | defmodule Realtime.Tenants.Migrations.OutputFullRecordWhenUnchangedToast method change (line 6) | def change do FILE: lib/realtime/tenants/repo/migrations/20230328144023_create_list_changes_function.ex class Realtime.Tenants.Migrations.CreateListChangesFunction (line 1) | defmodule Realtime.Tenants.Migrations.CreateListChangesFunction method change (line 6) | def change do FILE: lib/realtime/tenants/repo/migrations/20231018144023_create_channels.ex class Realtime.Tenants.Migrations.CreateChannels (line 1) | defmodule Realtime.Tenants.Migrations.CreateChannels method change (line 6) | def change do FILE: lib/realtime/tenants/repo/migrations/20231204144023_set_required_grants.ex class Realtime.Tenants.Migrations.SetRequiredGrants (line 1) | defmodule Realtime.Tenants.Migrations.SetRequiredGrants method change (line 6) | def change do FILE: lib/realtime/tenants/repo/migrations/20231204144024_create_rls_helper_functions.ex class Realtime.Tenants.Migrations.CreateRlsHelperFunctions (line 1) | defmodule Realtime.Tenants.Migrations.CreateRlsHelperFunctions method change (line 6) | def change do FILE: lib/realtime/tenants/repo/migrations/20231204144025_enable_channels_rls.ex class Realtime.Tenants.Migrations.EnableChannelsRls (line 1) | defmodule Realtime.Tenants.Migrations.EnableChannelsRls method change (line 6) | def change do FILE: lib/realtime/tenants/repo/migrations/20240108234812_add_channels_column_for_write_check.ex class Realtime.Tenants.Migrations.AddChannelsColumnForWriteCheck (line 1) | defmodule Realtime.Tenants.Migrations.AddChannelsColumnForWriteCheck method change (line 6) | def change do FILE: lib/realtime/tenants/repo/migrations/20240109165339_add_update_grant_to_channels.ex class Realtime.Tenants.Migrations.AddUpdateGrantToChannels (line 1) | defmodule Realtime.Tenants.Migrations.AddUpdateGrantToChannels method change (line 6) | def change do FILE: lib/realtime/tenants/repo/migrations/20240227174441_add_broadcast_permissions_table.ex class Realtime.Tenants.Migrations.AddBroadcastsPoliciesTable (line 1) | defmodule Realtime.Tenants.Migrations.AddBroadcastsPoliciesTable method change (line 6) | def change do FILE: lib/realtime/tenants/repo/migrations/20240311171622_add_insert_and_delete_grant_to_channels.ex class Realtime.Tenants.Migrations.AddInsertAndDeleteGrantToChannels (line 1) | defmodule Realtime.Tenants.Migrations.AddInsertAndDeleteGrantToChannels method change (line 6) | def change do FILE: lib/realtime/tenants/repo/migrations/20240321100241_add_presences_permissions_table.ex class Realtime.Tenants.Migrations.AddPresencesPoliciesTable (line 1) | defmodule Realtime.Tenants.Migrations.AddPresencesPoliciesTable method change (line 6) | def change do FILE: lib/realtime/tenants/repo/migrations/20240401105812_create_realtime_admin_and_move_ownership.ex class Realtime.Tenants.Migrations.CreateRealtimeAdminAndMoveOwnership (line 1) | defmodule Realtime.Tenants.Migrations.CreateRealtimeAdminAndMoveOwnership method change (line 6) | def change do FILE: lib/realtime/tenants/repo/migrations/20240418121054_remove_check_columns.ex class Realtime.Tenants.Migrations.RemoveCheckColumns (line 1) | defmodule Realtime.Tenants.Migrations.RemoveCheckColumns method change (line 6) | def change do FILE: lib/realtime/tenants/repo/migrations/20240523004032_redefine_authorization_tables.ex class Realtime.Tenants.Migrations.RedefineAuthorizationTables (line 1) | defmodule Realtime.Tenants.Migrations.RedefineAuthorizationTables method change (line 6) | def change do FILE: lib/realtime/tenants/repo/migrations/20240618124746_fix_walrus_role_handling.ex class Realtime.Tenants.Migrations.FixWalrusRoleHandling (line 1) | defmodule Realtime.Tenants.Migrations.FixWalrusRoleHandling method change (line 5) | def change do FILE: lib/realtime/tenants/repo/migrations/20240801235015_unlogged_messages_table.ex class Realtime.Tenants.Migrations.UnloggedMessagesTable (line 1) | defmodule Realtime.Tenants.Migrations.UnloggedMessagesTable method change (line 5) | def change do FILE: lib/realtime/tenants/repo/migrations/20240805133720_logged_messages_table.ex class Realtime.Tenants.Migrations.LoggedMessagesTable (line 1) | defmodule Realtime.Tenants.Migrations.LoggedMessagesTable method change (line 5) | def change do FILE: lib/realtime/tenants/repo/migrations/20240827160934_filter_delete_postgres_changes.ex class Realtime.Tenants.Migrations.FilterDeletePostgresChanges (line 1) | defmodule Realtime.Tenants.Migrations.FilterDeletePostgresChanges method change (line 5) | def change do FILE: lib/realtime/tenants/repo/migrations/20240919163303_add_payload_to_messages.ex class Realtime.Tenants.Migrations.AddPayloadToMessages (line 1) | defmodule Realtime.Tenants.Migrations.AddPayloadToMessages method change (line 5) | def change do FILE: lib/realtime/tenants/repo/migrations/20240919163305_change_messages_id_type.ex class Realtime.Tenants.Migrations.ChangeMessagesIdType (line 1) | defmodule Realtime.Tenants.Migrations.ChangeMessagesIdType method change (line 5) | def change do FILE: lib/realtime/tenants/repo/migrations/20241019105805_uuid_auto_generation.ex class Realtime.Tenants.Migrations.UuidAutoGeneration (line 1) | defmodule Realtime.Tenants.Migrations.UuidAutoGeneration method change (line 5) | def change do FILE: lib/realtime/tenants/repo/migrations/20241030150047_messages_partitioning.ex class Realtime.Tenants.Migrations.MessagesPartitioning (line 1) | defmodule Realtime.Tenants.Migrations.MessagesPartitioning method change (line 5) | def change do FILE: lib/realtime/tenants/repo/migrations/20241108114728_messages_using_uuid.ex class Realtime.Tenants.Migrations.MessagesUsingUuid (line 1) | defmodule Realtime.Tenants.Migrations.MessagesUsingUuid method change (line 5) | def change do FILE: lib/realtime/tenants/repo/migrations/20241121104152_fix_send_function_.ex class Realtime.Tenants.Migrations.FixSendFunction (line 1) | defmodule Realtime.Tenants.Migrations.FixSendFunction method change (line 6) | def change do FILE: lib/realtime/tenants/repo/migrations/20241130184212_recreate_entity_index_using_btree.ex class Realtime.Tenants.Migrations.RecreateEntityIndexUsingBtree (line 1) | defmodule Realtime.Tenants.Migrations.RecreateEntityIndexUsingBtree method change (line 5) | def change do FILE: lib/realtime/tenants/repo/migrations/20241220035512_fix_send_function_partition_creation.ex class Realtime.Tenants.Migrations.FixSendFunctionPartitionCreation (line 1) | defmodule Realtime.Tenants.Migrations.FixSendFunctionPartitionCreation method change (line 6) | def change do FILE: lib/realtime/tenants/repo/migrations/20241220123912_realtime_send_handle_exceptions_remove_partition_creation.ex class Realtime.Tenants.Migrations.RealtimeSendHandleExceptionsRemovePartitionCreation (line 1) | defmodule Realtime.Tenants.Migrations.RealtimeSendHandleExceptionsRemove... method change (line 6) | def change do FILE: lib/realtime/tenants/repo/migrations/20241224161212_realtime_send_sets_config.ex class Realtime.Tenants.Migrations.RealtimeSendSetsConfig (line 1) | defmodule Realtime.Tenants.Migrations.RealtimeSendSetsConfig method change (line 6) | def change do FILE: lib/realtime/tenants/repo/migrations/20250107150512_realtime_subscription_unlogged.ex class Realtime.Tenants.Migrations.RealtimeSubscriptionUnlogged (line 1) | defmodule Realtime.Tenants.Migrations.RealtimeSubscriptionUnlogged method change (line 5) | def change do FILE: lib/realtime/tenants/repo/migrations/20250110162412_realtime_subscription_logged.ex class Realtime.Tenants.Migrations.RealtimeSubscriptionLogged (line 1) | defmodule Realtime.Tenants.Migrations.RealtimeSubscriptionLogged method change (line 6) | def change do FILE: lib/realtime/tenants/repo/migrations/20250123174212_remove_unused_publications.ex class Realtime.Tenants.Migrations.RemoveUnusedPublications (line 1) | defmodule Realtime.Tenants.Migrations.RemoveUnusedPublications method change (line 5) | def change do FILE: lib/realtime/tenants/repo/migrations/20250128220012_realtime_send_sets_topic_config.ex class Realtime.Tenants.Migrations.RealtimeSendSetsTopicConfig (line 1) | defmodule Realtime.Tenants.Migrations.RealtimeSendSetsTopicConfig method change (line 6) | def change do FILE: lib/realtime/tenants/repo/migrations/20250506224012_subscription_index_bridging_disabled.ex class Realtime.Tenants.Migrations.SubscriptionIndexBridgingDisabled (line 1) | defmodule Realtime.Tenants.Migrations.SubscriptionIndexBridgingDisabled method change (line 5) | def change do FILE: lib/realtime/tenants/repo/migrations/20250523164012_run_subscription_index_bridging_disabled.ex class Realtime.Tenants.Migrations.RunSubscriptionIndexBridgingDisabled (line 1) | defmodule Realtime.Tenants.Migrations.RunSubscriptionIndexBridgingDisabled method change (line 5) | def change do FILE: lib/realtime/tenants/repo/migrations/20250714121412_broadcast_send_error_logging.ex class Realtime.Tenants.Migrations.BroadcastSendErrorLogging (line 1) | defmodule Realtime.Tenants.Migrations.BroadcastSendErrorLogging method change (line 5) | def change do FILE: lib/realtime/tenants/repo/migrations/20250905041441_create_messages_replay_index.ex class Realtime.Tenants.Migrations.CreateMessagesReplayIndex (line 1) | defmodule Realtime.Tenants.Migrations.CreateMessagesReplayIndex method change (line 6) | def change do FILE: lib/realtime/tenants/repo/migrations/20251103001201_broadcast_send_include_payload_id.ex class Realtime.Tenants.Migrations.BroadcastSendIncludePayloadId (line 1) | defmodule Realtime.Tenants.Migrations.BroadcastSendIncludePayloadId method change (line 6) | def change do FILE: lib/realtime/tenants/repo/migrations/20251120212548_add_action_to_subscriptions.ex class Realtime.Tenants.Migrations.AddActionToSubscriptions (line 1) | defmodule Realtime.Tenants.Migrations.AddActionToSubscriptions method up (line 5) | def up do method down (line 20) | def down do FILE: lib/realtime/tenants/repo/migrations/20251120215549_filter_action_postgres_changes.ex class Realtime.Tenants.Migrations.FilterActionPostgresChanges (line 1) | defmodule Realtime.Tenants.Migrations.FilterActionPostgresChanges method up (line 5) | def up do method down (line 314) | def down do FILE: lib/realtime/tenants/repo/migrations/20260218120000_fix_bytea_double_encoding_in_cast.ex class Realtime.Tenants.Migrations.FixByteaDoubleEncodingInCast (line 1) | defmodule Realtime.Tenants.Migrations.FixByteaDoubleEncodingInCast method up (line 6) | def up do method down (line 26) | def down do FILE: lib/realtime/users_counter.ex class Realtime.UsersCounter (line 1) | defmodule Realtime.UsersCounter method already_counted? (line 16) | def already_counted?(pid, tenant_id), do: Beacon.local_member?(:users,... method local_tenants (line 20) | def local_tenants(), do: Beacon.local_groups(:users) method tenant_users (line 26) | def tenant_users(tenant_id), do: Beacon.member_count(:users, tenant_id) method tenant_counts (line 32) | def tenant_counts(), do: Beacon.member_counts(:users) method local_tenant_counts (line 38) | def local_tenant_counts(), do: Beacon.local_member_counts(:users) FILE: lib/realtime_web.ex class RealtimeWeb (line 1) | defmodule RealtimeWeb method static_paths (line 20) | def static_paths, do: ~w(assets fonts images favicon.svg robots.txt wo... method controller (line 22) | def controller do method view (line 34) | def view do method live_view (line 49) | def live_view do method live_component (line 58) | def live_component do method component (line 66) | def component do method router (line 74) | def router do method channel (line 85) | def channel do method view_helpers (line 92) | defp view_helpers do method verified_routes (line 121) | def verified_routes do FILE: lib/realtime_web/api_spec.ex class RealtimeWeb.ApiSpec (line 1) | defmodule RealtimeWeb.ApiSpec method spec (line 17) | def spec do FILE: lib/realtime_web/channels/auth/channels_authorization.ex class RealtimeWeb.ChannelsAuthorization (line 1) | defmodule RealtimeWeb.ChannelsAuthorization method authorize (line 18) | def authorize(_token, _jwt_secret, _jwt_jwks), do: {:error, :invalid_t... method authorize_conn (line 20) | def authorize_conn(token, jwt_secret, jwt_jwks) do method clean_token (line 39) | defp clean_token(token), do: Regex.replace(~r/\s|\n/, URI.decode(token... FILE: lib/realtime_web/channels/auth/jwt_verification.ex class RealtimeWeb.JwtVerification (line 1) | defmodule RealtimeWeb.JwtVerification method verify (line 50) | def verify(_token, _jwt_secret, _jwt_jwks), do: {:error, :not_a_string} method check_claims_format (line 52) | defp check_claims_format(token) do method check_header_format (line 60) | defp check_header_format(token) do method generate_signer (line 124) | defp generate_signer(_header, _jwt_secret, _jwt_jwks), do: {:error, :e... class JwtAuthToken (line 8) | defmodule JwtAuthToken method token_config (line 13) | def token_config do method add_claim_validator (line 21) | defp add_claim_validator(claims, "exp") do method add_claim_validator (line 26) | defp add_claim_validator(claims, claim_key, expected_val) do FILE: lib/realtime_web/channels/payloads/broadcast.ex class RealtimeWeb.Channels.Payloads.Broadcast (line 1) | defmodule RealtimeWeb.Channels.Payloads.Broadcast method changeset (line 16) | def changeset(broadcast, attrs) do FILE: lib/realtime_web/channels/payloads/broadcast/replay.ex class RealtimeWeb.Channels.Payloads.Broadcast.Replay (line 1) | defmodule RealtimeWeb.Channels.Payloads.Broadcast.Replay method changeset (line 14) | def changeset(broadcast, attrs) do FILE: lib/realtime_web/channels/payloads/config.ex class RealtimeWeb.Channels.Payloads.Config (line 1) | defmodule RealtimeWeb.Channels.Payloads.Config method changeset (line 20) | def changeset(config, attrs) do FILE: lib/realtime_web/channels/payloads/flexible_boolean.ex class RealtimeWeb.Channels.Payloads.FlexibleBoolean (line 1) | defmodule RealtimeWeb.Channels.Payloads.FlexibleBoolean method type (line 14) | def type, do: :boolean method cast (line 27) | def cast(_), do: :error method load (line 30) | def load(value), do: {:ok, value} method dump (line 34) | def dump(_), do: :error FILE: lib/realtime_web/channels/payloads/join.ex class RealtimeWeb.Channels.Payloads.Join (line 1) | defmodule RealtimeWeb.Channels.Payloads.Join method changeset (line 17) | def changeset(join, attrs) do method validate (line 24) | def validate(params) do method presence_enabled? (line 35) | def presence_enabled?(%__MODULE__{config: %Config{presence: %Presence{... method presence_enabled? (line 36) | def presence_enabled?(_), do: true method presence_key (line 38) | def presence_key(%__MODULE__{config: %Config{presence: %Presence{key: ... method presence_key (line 39) | def presence_key(%__MODULE__{config: %Config{presence: %Presence{key: ... method presence_key (line 40) | def presence_key(_), do: UUID.uuid1() method ack_broadcast? (line 42) | def ack_broadcast?(%__MODULE__{config: %Config{broadcast: %Broadcast{a... method ack_broadcast? (line 43) | def ack_broadcast?(_), do: false method self_broadcast? (line 45) | def self_broadcast?(%__MODULE__{config: %Config{broadcast: %Broadcast{... method self_broadcast? (line 46) | def self_broadcast?(_), do: false method private? (line 48) | def private?(%__MODULE__{config: %Config{private: private}}), do: private method private? (line 49) | def private?(_), do: false method error_message (line 51) | def error_message(_field, meta) do method format_type (line 59) | defp format_type(RealtimeWeb.Channels.Payloads.FlexibleBoolean), do: :... method format_type (line 60) | defp format_type(type), do: type FILE: lib/realtime_web/channels/payloads/postgres_change.ex class RealtimeWeb.Channels.Payloads.PostgresChange (line 1) | defmodule RealtimeWeb.Channels.Payloads.PostgresChange method changeset (line 16) | def changeset(postgres_change, attrs) do FILE: lib/realtime_web/channels/payloads/presence.ex class RealtimeWeb.Channels.Payloads.Presence (line 1) | defmodule RealtimeWeb.Channels.Payloads.Presence method changeset (line 15) | def changeset(presence, attrs) do FILE: lib/realtime_web/channels/presence.ex class RealtimeWeb.Presence (line 1) | defmodule RealtimeWeb.Presence FILE: lib/realtime_web/channels/realtime_channel.ex class RealtimeWeb.RealtimeChannel (line 1) | defmodule RealtimeWeb.RealtimeChannel method join (line 37) | def join("realtime:", _params, socket) do method join (line 41) | def join("realtime:" <> sub_topic = topic, params, socket) do method handle_info (line 251) | def handle_info({:replay, messages}, socket) do method handle_info (line 262) | def handle_info(:update_rate_counter, socket) do method handle_info (line 275) | def handle_info(%{event: "postgres_cdc_rls_down"}, socket) do method handle_info (line 283) | def handle_info(_msg, %{assigns: %{policies: %Policies{broadcast: %Bro... method handle_info (line 288) | def handle_info(%{event: type, payload: payload} = msg, socket) do method handle_info (line 295) | def handle_info(:postgres_subscribe, %{assigns: %{channel_name: channe... method handle_info (line 355) | def handle_info(:confirm_token, %{assigns: %{pg_change_params: pg_chan... method handle_info (line 372) | def handle_info(:disconnect, %{assigns: %{channel_name: channel_name}}... method handle_info (line 378) | def handle_info(:sync_presence, %{assigns: %{presence_enabled?: true}}... method handle_info (line 388) | def handle_info(:sync_presence, socket), do: {:noreply, socket} method handle_info (line 389) | def handle_info(_, socket), do: {:noreply, socket} method handle_in (line 392) | def handle_in("broadcast", payload, %{assigns: %{private?: true}} = so... method handle_in (line 404) | def handle_in("broadcast", payload, %{assigns: %{private?: false}} = s... method handle_in (line 408) | def handle_in("presence", payload, %{assigns: %{private?: true}} = soc... method handle_in (line 431) | def handle_in("presence", payload, %{assigns: %{private?: false}} = so... method handle_in (line 451) | def handle_in("access_token", %{"access_token" => "sb_" <> _}, socket) do method handle_in (line 519) | def handle_in(type, payload, socket) do method terminate (line 531) | def terminate(reason, %{transport_pid: transport_pid}) do method postgres_subscribe (line 538) | defp postgres_subscribe(min \\ 1, max \\ 3) do method backoff (line 542) | defp backoff(min, max) do method limit_joins (line 547) | def limit_joins(tenant, socket) do method limit_channels (line 566) | def limit_channels(tenant, %{transport_pid: pid}) do method limit_max_users (line 577) | defp limit_max_users(tenant, transport_pid) do method assign_counter (line 586) | defp assign_counter(socket, tenant) do method assign_presence_counter (line 593) | defp assign_presence_counter(socket, tenant) do method assign_client_presence_rate_limit (line 601) | defp assign_client_presence_rate_limit(socket, tenant) do method count (line 626) | defp count(%{assigns: %{rate_counter: counter}}), do: GenCounter.add(c... method presence_key (line 628) | defp presence_key(params) do method assign_access_token (line 635) | defp assign_access_token(%{assigns: %{tenant_token: tenant_token}} = s... method confirm_token (line 658) | defp confirm_token(%{assigns: assigns}) do method push_system_message (line 715) | defp push_system_message(extension, socket, status, message, channel_n... method new_api? (line 724) | defp new_api?(%{"config" => _}), do: true method new_api? (line 725) | defp new_api?(_), do: false method pg_change_params (line 727) | defp pg_change_params(true, params, channel_pid, claims, _) do method pg_change_params (line 746) | defp pg_change_params(false, _, channel_pid, claims, sub_topic) do method postgres_cdc_subscribe (line 764) | defp postgres_cdc_subscribe(_tenant, %{pg_change_params: []}), do: [] method postgres_cdc_subscribe (line 766) | defp postgres_cdc_subscribe(tenant, opts) do method add_id_to_postgres_changes (line 793) | defp add_id_to_postgres_changes(pg_change_params) do method assign_authorization_context (line 800) | defp assign_authorization_context(socket, topic, claims) do method maybe_assign_policies (line 843) | defp maybe_assign_policies(_, _, socket), do: {:ok, assign(socket, pol... method only_private? (line 845) | defp only_private?(tenant, %{assigns: %{private?: private?}}) do method maybe_replay_messages (line 853) | defp maybe_replay_messages(%{"broadcast" => %{"replay" => _}}, _sub_to... method maybe_replay_messages (line 879) | defp maybe_replay_messages(_, _, _, _, _), do: {:ok, MapSet.new()} method presence_enabled? (line 881) | defp presence_enabled?(client_enabled?, %Tenant{presence_enabled: tena... method max_heap_size (line 885) | defp max_heap_size(), do: Application.fetch_env!(:realtime, :websocket... FILE: lib/realtime_web/channels/realtime_channel/assign.ex class RealtimeWeb.RealtimeChannel.Assigns (line 1) | defmodule RealtimeWeb.RealtimeChannel.Assigns FILE: lib/realtime_web/channels/realtime_channel/broadcast_handler.ex class RealtimeWeb.RealtimeChannel.BroadcastHandler (line 1) | defmodule RealtimeWeb.RealtimeChannel.BroadcastHandler method handle (line 22) | def handle(payload, %{assigns: %{private?: false}} = socket), do: hand... method handle (line 25) | def handle(payload, db_conn, %{assigns: %{private?: true}} = socket) do method handle (line 75) | def handle(payload, _db_conn, %{assigns: %{private?: false}} = socket) do method send_message (line 105) | defp send_message(tenant_id, self_broadcast, tenant_topic, payload) do method build_broadcast (line 133) | defp build_broadcast(topic, {user_event, user_payload_encoding, user_p... method build_broadcast (line 142) | defp build_broadcast(topic, payload) do method increment_rate_counter (line 146) | defp increment_rate_counter(%{assigns: %{policies: %Policies{broadcast... method increment_rate_counter (line 150) | defp increment_rate_counter(%{assigns: %{rate_counter: counter}} = soc... method run_authorization_check (line 155) | defp run_authorization_check( method run_authorization_check (line 163) | defp run_authorization_check(socket, _db_conn, _authorization_context) do FILE: lib/realtime_web/channels/realtime_channel/logging.ex class RealtimeWeb.RealtimeChannel.Logging (line 1) | defmodule RealtimeWeb.RealtimeChannel.Logging method log_error (line 21) | def log_error(socket, code, msg) do method log_warning (line 33) | def log_warning(socket, code, msg) do method maybe_log_error (line 43) | def maybe_log_error(socket, code, msg), do: maybe_log(socket, :error, ... method maybe_log_warning (line 49) | def maybe_log_warning(socket, code, msg), do: maybe_log(socket, :warni... method maybe_log_info (line 55) | def maybe_log_info(socket, msg), do: maybe_log(socket, :info, nil, msg) method build_msg (line 57) | defp build_msg(code, msg) do method log (line 62) | defp log(%{assigns: %{tenant: tenant, access_token: access_token}}, le... method maybe_log (line 68) | defp maybe_log(%{assigns: %{log_level: log_level}} = socket, level, co... method system_errors (line 82) | def system_errors, do: @system_errors method emit_system_error (line 87) | defp emit_system_error(_, _), do: nil method stringify! (line 90) | defp stringify!(msg), do: inspect(msg, pretty: true) method update_metadata_with_token_claims (line 92) | defp update_metadata_with_token_claims(nil), do: nil method update_metadata_with_token_claims (line 94) | defp update_metadata_with_token_claims(token) do FILE: lib/realtime_web/channels/realtime_channel/message_dispatcher.ex class RealtimeWeb.RealtimeChannel.MessageDispatcher (line 1) | defmodule RealtimeWeb.RealtimeChannel.MessageDispatcher method fastlane_metadata (line 10) | def fastlane_metadata(fastlane_pid, serializer, topic, log_level, tena... method dispatch (line 23) | def dispatch(subscribers, from, %Broadcast{event: @presence_diff} = ms... method dispatch (line 47) | def dispatch(subscribers, from, msg) do method maybe_log (line 86) | defp maybe_log(_level, _join_topic, _msg, _tenant_id), do: :ok method do_dispatch (line 88) | defp do_dispatch(msg, fastlane_pid, serializer, join_topic, cache, ten... method fastlane! (line 118) | defp fastlane!(Phoenix.Socket.V1.JSONSerializer = serializer, %UserBro... method fastlane! (line 124) | defp fastlane!(serializer, msg), do: {:ok, serializer.fastlane!(msg)} method tenant_id (line 126) | defp tenant_id([{_pid, {:rc_fastlane, _, _, _, _, tenant_id, _}} | _])... method tenant_id (line 127) | defp tenant_id(_), do: nil method increment_presence_counter (line 135) | defp increment_presence_counter(_tenant_id, _event, _count), do: :ok method message_id (line 137) | defp message_id(%Broadcast{payload: %{"meta" => %{"id" => id}}}), do: id method message_id (line 138) | defp message_id(_), do: nil method already_replayed? (line 140) | defp already_replayed?(nil, _replayed_message_ids), do: false method already_replayed? (line 141) | defp already_replayed?(message_id, replayed_message_ids), do: MapSet.m... FILE: lib/realtime_web/channels/realtime_channel/presence_handler.ex class RealtimeWeb.RealtimeChannel.PresenceHandler (line 1) | defmodule RealtimeWeb.RealtimeChannel.PresenceHandler method sync (line 29) | def sync(%{assigns: %{presence_enabled?: false}}), do: :ok method handle (line 64) | def handle(%{"event" => event} = payload, db_conn, socket) do method handle (line 74) | def handle(_, _, socket), do: {:ok, socket} method handle_presence_event (line 107) | defp handle_presence_event("untrack", _, _, socket) do method handle_presence_event (line 113) | defp handle_presence_event(event, _, _, _) do method track (line 118) | defp track(socket, payload) do method check_track_payload (line 161) | defp check_track_payload(assigns, new_payload) do method presence_dirty_list (line 169) | defp presence_dirty_list(topic) do method limit_presence_event (line 178) | defp limit_presence_event(socket) do method limit_client_presence_event (line 191) | defp limit_client_presence_event(socket) do method validate_payload_size (line 215) | defp validate_payload_size(tenant, payload), do: Tenants.validate_payl... FILE: lib/realtime_web/channels/realtime_channel/tracker.ex class RealtimeWeb.RealtimeChannel.Tracker (line 1) | defmodule RealtimeWeb.RealtimeChannel.Tracker method track (line 19) | def track(pid), do: :ets.update_counter(@table, pid, 1, {pid, 0}) method untrack (line 25) | def untrack(pid), do: :ets.update_counter(@table, pid, -1, {pid, 0}) method count (line 31) | def count(pid) do method list_pids (line 42) | def list_pids, do: :ets.tab2list(@table) method start_link (line 44) | def start_link(opts) do method init (line 59) | def init(opts) do method handle_info (line 66) | def handle_info(:check_channels, state) do method chunked_killing (line 73) | defp chunked_killing(cont \\ nil) do method table_name (line 87) | def table_name, do: @table FILE: lib/realtime_web/channels/socket_disconnect.ex class RealtimeWeb.SocketDisconnect (line 1) | defmodule RealtimeWeb.SocketDisconnect method distributed_disconnect (line 37) | def distributed_disconnect(%Tenant{external_id: external_id}), do: dis... method distributed_disconnect (line 39) | def distributed_disconnect(external_id) do method disconnect (line 49) | def disconnect(%Tenant{external_id: external_id}), do: disconnect(exte... method disconnect (line 51) | def disconnect(tenant_external_id) do FILE: lib/realtime_web/channels/tenant_rate_limiters.ex class RealtimeWeb.TenantRateLimiters (line 1) | defmodule RealtimeWeb.TenantRateLimiters method check_tenant (line 12) | def check_tenant(tenant) do method max_concurrent_users_check (line 18) | defp max_concurrent_users_check(%Tenant{max_concurrent_users: max_conn... method max_joins_per_second_check (line 26) | defp max_joins_per_second_check(%Tenant{max_joins_per_second: max_join... FILE: lib/realtime_web/channels/user_socket.ex class RealtimeWeb.UserSocket (line 1) | defmodule RealtimeWeb.UserSocket method handle_in (line 5) | def handle_in({payload, opts}, {_state, socket} = full_state) do method handle_info (line 29) | def handle_info( method id (line 61) | def id(%{assigns: %{tenant: tenant}}), do: subscribers_id(tenant) method subscribers_id (line 64) | def subscribers_id(tenant), do: "user_socket:" <> tenant method connect (line 67) | def connect(params, socket, opts) do method access_token (line 143) | defp access_token(params, headers) do method log_level (line 150) | defp log_level(params) do method max_heap_size (line 157) | defp max_heap_size(), do: Application.fetch_env!(:realtime, :websocket... method measure_traffic_interval_in_ms (line 158) | defp measure_traffic_interval_in_ms(), do: Application.fetch_env!(:rea... method collect_traffic_telemetry (line 160) | defp collect_traffic_telemetry(nil, _tenant_external_id, previous_recv... method collect_traffic_telemetry (line 163) | defp collect_traffic_telemetry(transport_pid, tenant_external_id, prev... FILE: lib/realtime_web/controllers/broadcast_controller.ex class RealtimeWeb.BroadcastController (line 1) | defmodule RealtimeWeb.BroadcastController method broadcast (line 35) | def broadcast(%{assigns: %{tenant: tenant}} = conn, attrs) do FILE: lib/realtime_web/controllers/fallback_controller.ex class RealtimeWeb.FallbackController (line 1) | defmodule RealtimeWeb.FallbackController method call (line 13) | def call(conn, {:error, :not_found}) do method call (line 22) | def call(conn, {:error, %Ecto.Changeset{} = changeset}) do method call (line 43) | def call(conn, {:error, %Ecto.Changeset{valid?: false} = changeset}) do method call (line 55) | def call(conn, {:error, _}) do method call (line 62) | def call(conn, %Ecto.Changeset{valid?: false} = changeset) do method call (line 74) | def call(conn, response) do FILE: lib/realtime_web/controllers/legacy_metrics_controller.ex class RealtimeWeb.LegacyMetricsController (line 1) | defmodule RealtimeWeb.LegacyMetricsController method index (line 8) | def index(conn, _) do method region (line 12) | def region(conn, %{"region" => region}) do method get_combined_metrics (line 16) | def get_combined_metrics do method serve_metrics (line 21) | defp serve_metrics(conn, nodes, label) do method collect_metrics (line 33) | defp collect_metrics(nodes, conn) do method bump_max_heap_size (line 66) | defp bump_max_heap_size do FILE: lib/realtime_web/controllers/metrics_controller.ex class RealtimeWeb.MetricsController (line 1) | defmodule RealtimeWeb.MetricsController method index (line 8) | def index(conn, _) do method tenant (line 12) | def tenant(conn, _) do method region (line 16) | def region(conn, %{"region" => region}) do method region_tenant (line 20) | def region_tenant(conn, %{"region" => region}) do method serve_metrics (line 24) | defp serve_metrics(conn, nodes, metrics_fun, label) do method collect_metrics (line 36) | defp collect_metrics(nodes, metrics_fun, conn) do method get_global_metrics (line 61) | def get_global_metrics do method get_tenant_metrics (line 66) | def get_tenant_metrics do method get_metrics (line 72) | def get_metrics, do: get_global_metrics() method bump_max_heap_size (line 74) | defp bump_max_heap_size do FILE: lib/realtime_web/controllers/page_controller.ex class RealtimeWeb.PageController (line 1) | defmodule RealtimeWeb.PageController method index (line 4) | def index(conn, _params) do method healthcheck (line 8) | def healthcheck(conn, _params) do FILE: lib/realtime_web/controllers/ping_controller.ex class RealtimeWeb.PingController (line 1) | defmodule RealtimeWeb.PingController method ping (line 4) | def ping(conn, _params) do FILE: lib/realtime_web/controllers/tenant_controller.ex class RealtimeWeb.TenantController (line 1) | defmodule RealtimeWeb.TenantController method index (line 51) | def index(conn, _params) do method show (line 76) | def show(conn, %{"tenant_id" => id}) do method create (line 105) | def create(conn, %{"tenant" => params}) do method update (line 134) | def update(conn, %{"tenant_id" => external_id, "tenant" => tenant_para... method delete (line 187) | def delete(conn, %{"tenant_id" => tenant_id}) do method reload (line 227) | def reload(conn, %{"tenant_id" => tenant_id}) do method shutdown (line 260) | def shutdown(conn, %{"tenant_id" => tenant_id}) do method health (line 291) | def health(conn, %{"tenant_id" => tenant_id}) do method set_observability_attributes (line 299) | defp set_observability_attributes(conn, _opts) do FILE: lib/realtime_web/dashboard/process_dump.ex class Realtime.Dashboard.ProcessDump (line 1) | defmodule Realtime.Dashboard.ProcessDump method menu_link (line 8) | def menu_link(_, _) do method mount (line 13) | def mount(_, _, socket) do method render (line 21) | def render(assigns) do method dump_processes (line 33) | defp dump_processes(name) do FILE: lib/realtime_web/dashboard/tenant_info.ex class Realtime.Dashboard.TenantInfo (line 1) | defmodule Realtime.Dashboard.TenantInfo method menu_link (line 12) | def menu_link(_, _), do: {:ok, "Tenant Info"} method mount (line 15) | def mount(_, _, socket) do method handle_event (line 20) | def handle_event("lookup", %{"project_ref" => ref}, socket) do method render (line 30) | def render(assigns) do method prepare_tenant (line 97) | defp prepare_tenant(tenant) do method prepare_extension (line 101) | defp prepare_extension(ext) do FILE: lib/realtime_web/endpoint.ex class RealtimeWeb.Endpoint (line 1) | defmodule RealtimeWeb.Endpoint method log_level (line 76) | def log_level(%{path_info: ["healthcheck"]}) do method log_level (line 80) | def log_level(%{path_info: ["api", "tenants", _, "health"]}) do method log_level (line 84) | def log_level(_), do: :info FILE: lib/realtime_web/gettext.ex class RealtimeWeb.Gettext (line 1) | defmodule RealtimeWeb.Gettext FILE: lib/realtime_web/live/components.ex class RealtimeWeb.Components (line 1) | defmodule RealtimeWeb.Components method h1 (line 17) | def h1(assigns) do method h2 (line 32) | def h2(assigns) do method h3 (line 47) | def h3(assigns) do method button (line 67) | def button(assigns) do method link_button (line 93) | def link_button(assigns) do method gray_link_button (line 118) | def gray_link_button(assigns) do method patch_button (line 144) | def patch_button(assigns) do method modal (line 186) | def modal(assigns) do method badge (line 259) | def badge(assigns) do method select (line 284) | def select(assigns) do method text_input (line 308) | def text_input(assigns) do method label (line 337) | def label(assigns) do method show (line 345) | def show(js \\ %JS{}, selector) do method hide (line 355) | def hide(js \\ %JS{}, selector) do method hide_modal (line 376) | def hide_modal(js \\ %JS{}, id) do FILE: lib/realtime_web/live/inspector_live/conn_component.ex class RealtimeWeb.InspectorLive.ConnComponent (line 1) | defmodule RealtimeWeb.InspectorLive.ConnComponent method mount (line 46) | def mount(socket) do method update (line 59) | def update(assigns, socket) do method handle_event (line 66) | def handle_event( method handle_event (line 86) | def handle_event( method handle_event (line 108) | def handle_event("validate", %{"connection" => conn}, socket) do method handle_event (line 122) | def handle_event("connect", %{"connection" => conn} = params, socket) do method handle_event (line 133) | def handle_event("disconnect", _params, socket) do method handle_event (line 142) | def handle_event("clear_local_storage", _params, socket) do method handle_event (line 159) | def handle_event( method handle_event (line 178) | def handle_event("local_storage", %{"log_level" => nil} = params, sock... method handle_event (line 193) | def handle_event("local_storage", params, socket) do method handle_event (line 207) | def handle_event("cancel", params, socket) do method send_share_url (line 213) | defp send_share_url(conn) do class Connection (line 4) | defmodule Connection method changeset (line 24) | def changeset(form, params \\ %{}) do FILE: lib/realtime_web/live/inspector_live/index.ex class RealtimeWeb.InspectorLive.Index (line 1) | defmodule RealtimeWeb.InspectorLive.Index method mount (line 21) | def mount(_params, _session, socket) do method handle_params (line 39) | def handle_params(params, _url, socket) do method handle_event (line 53) | def handle_event("send_message", params, socket) do method handle_event (line 57) | def handle_event("postgres_subscribed", _params, socket) do method handle_event (line 63) | def handle_event("presence_subscribed", _params, socket) do method handle_event (line 69) | def handle_event("broadcast_subscribed", %{"host" => host}, socket) do method handle_info (line 81) | def handle_info({:share_url, url}, socket) do class Message (line 6) | defmodule Message method changeset (line 15) | def changeset(form, params \\ %{}) do FILE: lib/realtime_web/live/page_live/index.ex class RealtimeWeb.PageLive.Index (line 1) | defmodule RealtimeWeb.PageLive.Index method mount (line 5) | def mount(_params, _session, socket) do method handle_params (line 10) | def handle_params(params, _url, socket) do method apply_action (line 14) | defp apply_action(socket, :index, _params) do FILE: lib/realtime_web/live/ping_live.ex class RealtimeWeb.PingLive (line 1) | defmodule RealtimeWeb.PingLive method mount (line 4) | def mount(_params, _session, socket) do method render (line 9) | def render(assigns) do method handle_info (line 15) | def handle_info(:ping, socket) do method handle_event (line 21) | def handle_event("pong", %{"ping" => ping}, socket) do method ping (line 33) | defp ping do FILE: lib/realtime_web/live/status_live/index.ex class RealtimeWeb.StatusLive.Index (line 1) | defmodule RealtimeWeb.StatusLive.Index method mount (line 9) | def mount(_params, _session, socket) do method handle_params (line 21) | def handle_params(params, _url, socket) do method handle_info (line 26) | def handle_info(%Phoenix.Socket.Broadcast{payload: %Payload{} = payloa... method apply_action (line 32) | defp apply_action(socket, :index, _params) do method all_nodes (line 37) | defp all_nodes do method default_pings (line 41) | defp default_pings do method pair_id (line 49) | defp pair_id(from, to) do FILE: lib/realtime_web/live/tenants_live/index.ex class RealtimeWeb.TenantsLive.Index (line 1) | defmodule RealtimeWeb.TenantsLive.Index method mount (line 33) | def mount(_params, _session, socket) do method handle_params (line 53) | def handle_params(params, _url, socket) do method handle_event (line 74) | def handle_event("validate", %{"filter" => filter}, socket) do method list_tenants (line 88) | defp list_tenants(%Filter{} = filter) do class Socket (line 7) | defmodule Socket class Filter (line 11) | defmodule Filter method changeset (line 22) | def changeset(form, params \\ %{}) do method apply_changes_form (line 27) | def apply_changes_form(changeset) do FILE: lib/realtime_web/live/time_live.ex class RealtimeWeb.TimeLive (line 1) | defmodule RealtimeWeb.TimeLive method mount (line 4) | def mount(_params, _session, socket) do method render (line 8) | def render(assigns) do method handle_info (line 14) | def handle_info(:time, socket) do method assign_time (line 18) | defp assign_time(socket) do FILE: lib/realtime_web/open_api_schemas.ex class RealtimeWeb.OpenApiSchemas (line 1) | defmodule RealtimeWeb.OpenApiSchemas class ChannelParams (line 8) | defmodule ChannelParams method params (line 23) | def params, do: {"Channel Params", "application/json", __MODULE__} class TenantBatchParams (line 26) | defmodule TenantBatchParams method params (line 55) | def params, do: {"Tenant Batch Params", "application/json", __MODULE__} class TenantParams (line 58) | defmodule TenantParams method params (line 188) | def params, do: {"Tenant Params", "application/json", __MODULE__} class TenantResponseValue (line 191) | defmodule TenantResponseValue class ChannelResponseValue (line 306) | defmodule ChannelResponseValue class TenantHealthResponseValue (line 328) | defmodule TenantHealthResponseValue class TenantHealthResponse (line 364) | defmodule TenantHealthResponse method response (line 373) | def response, do: {"Tenant Response", "application/json", __MODULE__} class TenantResponse (line 376) | defmodule TenantResponse method response (line 385) | def response, do: {"Tenant Response", "application/json", __MODULE__} class TenantResponseList (line 388) | defmodule TenantResponseList method response (line 397) | def response, do: {"Tenant List Response", "application/json", __MODUL... class ChannelResponse (line 400) | defmodule ChannelResponse method response (line 409) | def response, do: {"Tenant Response", "application/json", __MODULE__} class ChannelResponseList (line 412) | defmodule ChannelResponseList method response (line 421) | def response, do: {"Tenant List Response", "application/json", __MODUL... class EmptyResponse (line 424) | defmodule EmptyResponse method response (line 433) | def response, do: {"Empty Response", "application/json", __MODULE__} class NotFoundResponse (line 436) | defmodule NotFoundResponse method response (line 447) | def response, do: {"Not Found", "application/json", __MODULE__} class ErrorResponse (line 450) | defmodule ErrorResponse method response (line 461) | def response, do: {"Error", "application/json", __MODULE__} class UnauthorizedResponse (line 464) | defmodule UnauthorizedResponse method response (line 475) | def response, do: {"Unauthorized", "application/json", __MODULE__} class UnprocessableEntityResponse (line 478) | defmodule UnprocessableEntityResponse method response (line 497) | def response, do: {"Unprocessable Entity", "application/json", __MODUL... class TooManyRequestsResponse (line 500) | defmodule TooManyRequestsResponse method response (line 519) | def response, do: {"Too Many Requests", "application/json", __MODULE__} FILE: lib/realtime_web/plugs/assign_tenant.ex class RealtimeWeb.Plugs.AssignTenant (line 1) | defmodule RealtimeWeb.Plugs.AssignTenant method init (line 17) | def init(opts) do method call (line 21) | def call(%Plug.Conn{host: host} = conn, _opts) do method error_response (line 39) | defp error_response(conn, message) do method initialize_counters (line 46) | defp initialize_counters(tenant) do FILE: lib/realtime_web/plugs/auth_tenant.ex class RealtimeWeb.AuthTenant (line 1) | defmodule RealtimeWeb.AuthTenant method init (line 15) | def init(opts), do: opts method call (line 17) | def call(%{assigns: %{tenant: tenant}} = conn, _opts) do method call (line 34) | def call(conn, _opts), do: unauthorized(conn) method access_token (line 36) | defp access_token(conn) do method unauthorized (line 67) | defp unauthorized(conn), FILE: lib/realtime_web/plugs/baggage_request_id.ex class RealtimeWeb.Plugs.BaggageRequestId (line 1) | defmodule RealtimeWeb.Plugs.BaggageRequestId method baggage_key (line 9) | def baggage_key, do: Application.get_env(:realtime, :request_id_baggag... method init (line 17) | def init(opts) do method call (line 24) | def call(conn, baggage_key) do method valid_request_id? (line 38) | defp valid_request_id?(s), do: byte_size(s) in 10..200 FILE: lib/realtime_web/plugs/metrics_mode.ex class RealtimeWeb.Plugs.MetricsMode (line 1) | defmodule RealtimeWeb.Plugs.MetricsMode method init (line 7) | def init(opts), do: opts method call (line 9) | def call(conn, _opts) do method dispatch_legacy (line 13) | defp dispatch_legacy(%{path_info: ["tenant-metrics" | _]} = conn) do method dispatch_legacy (line 17) | defp dispatch_legacy(conn) do FILE: lib/realtime_web/plugs/rate_limiter.ex class RealtimeWeb.Plugs.RateLimiter (line 1) | defmodule RealtimeWeb.Plugs.RateLimiter method init (line 11) | def init(opts) do method call (line 15) | def call( method call (line 45) | def call(conn, _opts) do FILE: lib/realtime_web/router.ex class RealtimeWeb.Router (line 1) | defmodule RealtimeWeb.Router method check_auth (line 144) | defp check_auth(conn, [secret_key, blocklist_key]) do method dashboard_auth (line 161) | defp dashboard_auth(conn, _opts) do method set_span_request_id (line 177) | defp set_span_request_id(conn, _) do FILE: lib/realtime_web/socket/user_broadcast.ex class RealtimeWeb.Socket.UserBroadcast (line 1) | defmodule RealtimeWeb.Socket.UserBroadcast method convert_to_json_broadcast (line 21) | def convert_to_json_broadcast(%__MODULE__{user_payload_encoding: :json... method convert_to_json_broadcast (line 38) | def convert_to_json_broadcast(%__MODULE__{}), do: {:error, "User paylo... FILE: lib/realtime_web/socket/v2_serializer.ex class RealtimeWeb.Socket.V2Serializer (line 1) | defmodule RealtimeWeb.Socket.V2Serializer method fastlane! (line 19) | def fastlane!(%UserBroadcast{} = msg) do method fastlane! (line 47) | def fastlane!(%Broadcast{payload: {:binary, data}} = msg) do method fastlane! (line 63) | def fastlane!(%Broadcast{payload: %{}} = msg) do method fastlane! (line 68) | def fastlane!(%Broadcast{payload: invalid}) do method encode! (line 73) | def encode!(%Reply{payload: {:binary, data}} = reply) do method encode! (line 98) | def encode!(%Reply{} = reply) do method encode! (line 110) | def encode!(%Message{payload: {:binary, data}} = msg) do method encode! (line 130) | def encode!(%Message{payload: %{}} = msg) do method encode! (line 135) | def encode!(%Message{payload: invalid}) do method decode! (line 140) | def decode!(raw_message, opts) do method decode_text (line 147) | defp decode_text(raw_message) do method decode_binary (line 158) | defp decode_binary(<< method decode_binary (line 179) | defp decode_binary(<< method byte_size! (line 214) | defp byte_size!(nil, _kind, _max), do: 0 method byte_size! (line 216) | defp byte_size!(bin, kind, max) do FILE: lib/realtime_web/telemetry.ex class RealtimeWeb.Telemetry (line 1) | defmodule RealtimeWeb.Telemetry method start_link (line 7) | def start_link(arg) do method init (line 12) | def init(_arg) do method metrics (line 24) | def metrics do method periodic_measurements (line 50) | defp periodic_measurements do FILE: lib/realtime_web/tenant_broadcaster.ex class RealtimeWeb.TenantBroadcaster (line 1) | defmodule RealtimeWeb.TenantBroadcaster method pubsub_direct_broadcast (line 19) | def pubsub_direct_broadcast(node, tenant_id, topic, message, dispatche... method do_direct_broadcast (line 37) | defp do_direct_broadcast(_node, topic, message, dispatcher) do method pubsub_broadcast (line 43) | def pubsub_broadcast(tenant_id, topic, message, dispatcher, message_ty... method pubsub_broadcast_from (line 64) | def pubsub_broadcast_from(tenant_id, from, topic, message, dispatcher,... method collect_payload_size (line 89) | def collect_payload_size(tenant_id, payload, message_type) do method pubsub_adapter (line 96) | defp pubsub_adapter, do: Application.fetch_env!(:realtime, :pubsub_ada... FILE: lib/realtime_web/views/changeset_view.ex class RealtimeWeb.ChangesetView (line 1) | defmodule RealtimeWeb.ChangesetView method translate_errors (line 10) | def translate_errors(changeset) do method render (line 14) | def render("error.json", %{changeset: changeset}) do FILE: lib/realtime_web/views/error_helpers.ex class RealtimeWeb.ErrorHelpers (line 1) | defmodule RealtimeWeb.ErrorHelpers method error_tag (line 11) | def error_tag(form, field) do method translate_error (line 23) | def translate_error({msg, opts}) do FILE: lib/realtime_web/views/error_view.ex class RealtimeWeb.ErrorView (line 1) | defmodule RealtimeWeb.ErrorView method render (line 4) | def render("error.json", %{conn: %{assigns: %{message: message}}}), do... method template_not_found (line 6) | def template_not_found(template, _assigns), do: Phoenix.Controller.sta... FILE: lib/realtime_web/views/layout_view.ex class RealtimeWeb.LayoutView (line 1) | defmodule RealtimeWeb.LayoutView FILE: lib/realtime_web/views/tenant_view.ex class RealtimeWeb.TenantView (line 1) | defmodule RealtimeWeb.TenantView method render (line 5) | def render("index.json", %{tenants: tenants}) do method render (line 9) | def render("show.json", %{tenant: tenant}) do method render (line 13) | def render("not_found.json", %{tenant: nil}) do method render (line 17) | def render("tenant.json", %{tenant: tenant}) do FILE: mix.exs class Realtime.MixProject (line 1) | defmodule Realtime.MixProject method project (line 4) | def project do method dialyzer (line 27) | defp dialyzer do method application (line 40) | def application do method elixirc_paths (line 48) | defp elixirc_paths(:test), do: ["lib", "test/support"] method elixirc_paths (line 49) | defp elixirc_paths(_), do: ["lib"] method deps (line 54) | defp deps do method aliases (line 121) | defp aliases do FILE: priv/repo/migrations/20210706140551_create_tenant.exs class Realtime.Repo.Migrations.CreateTenants (line 1) | defmodule Realtime.Repo.Migrations.CreateTenants method change (line 4) | def change do FILE: priv/repo/migrations/20220329161857_add_extensions_table.exs class Realtime.Repo.Migrations.AddExtensionsTable (line 1) | defmodule Realtime.Repo.Migrations.AddExtensionsTable method change (line 4) | def change do FILE: priv/repo/migrations/20220410212326_add_tenant_max_eps.exs class Realtime.Repo.Migrations.AddTenantMaxEps (line 1) | defmodule Realtime.Repo.Migrations.AddTenantMaxEps method up (line 4) | def up do method down (line 10) | def down do FILE: priv/repo/migrations/20220506102948_rename_poll_interval_to_poll_interval_ms.exs class Realtime.Repo.Migrations.RenamePollIntervalToPollIntervalMs (line 1) | defmodule Realtime.Repo.Migrations.RenamePollIntervalToPollIntervalMs method up (line 5) | def up do method down (line 9) | def down do FILE: priv/repo/migrations/20220527210857_add_external_id_uniq_index.exs class Realtime.Repo.Migrations.AddExternalIdUniqIndex (line 1) | defmodule Realtime.Repo.Migrations.AddExternalIdUniqIndex method change (line 4) | def change do FILE: priv/repo/migrations/20220815211129_new_max_events_per_second_default.exs class Realtime.Repo.Migrations.NewMaxEventsPerSecondDefault (line 1) | defmodule Realtime.Repo.Migrations.NewMaxEventsPerSecondDefault method change (line 4) | def change do FILE: priv/repo/migrations/20220815215024_set_current_max_events_per_second.exs class Realtime.Repo.Migrations.SetCurrentMaxEventsPerSecond (line 1) | defmodule Realtime.Repo.Migrations.SetCurrentMaxEventsPerSecond method change (line 4) | def change do FILE: priv/repo/migrations/20220818141501_change_limits_defaults.exs class Realtime.Repo.Migrations.ChangeLimitsDefaults (line 1) | defmodule Realtime.Repo.Migrations.ChangeLimitsDefaults method change (line 4) | def change do FILE: priv/repo/migrations/20221018173709_add_cdc_default.exs class Realtime.Repo.Migrations.AddCdcDefault (line 1) | defmodule Realtime.Repo.Migrations.AddCdcDefault method up (line 4) | def up do method down (line 10) | def down do FILE: priv/repo/migrations/20221102172703_rename_pg_type.exs class Realtime.Repo.Migrations.RenamePgType (line 1) | defmodule Realtime.Repo.Migrations.RenamePgType method up (line 4) | def up do method down (line 8) | def down do FILE: priv/repo/migrations/20221223010058_drop_tenants_uniq_external_id_index.exs class Realtime.Repo.Migrations.DropTenantsUniqExternalIdIndex (line 1) | defmodule Realtime.Repo.Migrations.DropTenantsUniqExternalIdIndex method change (line 4) | def change do FILE: priv/repo/migrations/20230110180046_add_limits_fields_to_tenants.exs class Realtime.Repo.Migrations.AddLimitsFieldsToTenants (line 1) | defmodule Realtime.Repo.Migrations.AddLimitsFieldsToTenants method change (line 4) | def change do FILE: priv/repo/migrations/20230810220907_alter_tenants_table_columns_to_text.exs class Realtime.Repo.Migrations.AlterTenantsTableColumnsToText (line 1) | defmodule Realtime.Repo.Migrations.AlterTenantsTableColumnsToText method change (line 4) | def change do FILE: priv/repo/migrations/20230810220924_alter_extensions_table_columns_to_text.exs class Realtime.Repo.Migrations.AlterExtensionsTableColumnsToText (line 1) | defmodule Realtime.Repo.Migrations.AlterExtensionsTableColumnsToText method change (line 4) | def change do FILE: priv/repo/migrations/20240306114423_add_tenant_jwt_jwks.exs class Realtime.Repo.Migrations.AdddTenantJwtJwksColumn (line 1) | defmodule Realtime.Repo.Migrations.AdddTenantJwtJwksColumn method change (line 4) | def change do FILE: priv/repo/migrations/20240418082835_add_authorization_flag.exs class Realtime.Repo.Migrations.AddAuthorizationFlag (line 1) | defmodule Realtime.Repo.Migrations.AddAuthorizationFlag method change (line 4) | def change do FILE: priv/repo/migrations/20240625211759_remove_enable_authorization_flag.exs class Realtime.Repo.Migrations.RemoveEnableAuthorizationFlag (line 1) | defmodule Realtime.Repo.Migrations.RemoveEnableAuthorizationFlag method change (line 4) | def change do FILE: priv/repo/migrations/20240902173232_add_extension_external_id_index.exs class Realtime.Repo.Migrations.AddExtensionExternalIdIndex (line 1) | defmodule Realtime.Repo.Migrations.AddExtensionExternalIdIndex method change (line 4) | def change do FILE: priv/repo/migrations/20241106103258_add_private_only_flag_column_to_tenant.exs class Realtime.Repo.Migrations.AddPrivateOnlyFlagColumnToTenant (line 1) | defmodule Realtime.Repo.Migrations.AddPrivateOnlyFlagColumnToTenant method change (line 4) | def change do FILE: priv/repo/migrations/20250424203323_add_migrations_ran_to_tenant.exs class Realtime.Repo.Migrations.AddMigrationsRanToTenant (line 1) | defmodule Realtime.Repo.Migrations.AddMigrationsRanToTenant method change (line 4) | def change do FILE: priv/repo/migrations/20250613072131_add_tenant_broadcast_adapter.exs class Realtime.Repo.Migrations.AddTenantBroadcastAdapter (line 1) | defmodule Realtime.Repo.Migrations.AddTenantBroadcastAdapter method change (line 4) | def change do FILE: priv/repo/migrations/20250711044927_change_default_broadcast_adapter_to_gen_rpc.exs class Realtime.Repo.Migrations.ChangeDefaultBroadcastAdapterToGenRpc (line 1) | defmodule Realtime.Repo.Migrations.ChangeDefaultBroadcastAdapterToGenRpc method change (line 4) | def change do FILE: priv/repo/migrations/20250811121559_add_max_presence_events_per_second.exs class Realtime.Repo.Migrations.AddMaxPresenceEventsPerSecond (line 1) | defmodule Realtime.Repo.Migrations.AddMaxPresenceEventsPerSecond method change (line 4) | def change do FILE: priv/repo/migrations/20250926223044_set_default_presence_value.exs class Realtime.Repo.Migrations.SetDefaultPresenceValue (line 1) | defmodule Realtime.Repo.Migrations.SetDefaultPresenceValue method change (line 5) | def change do FILE: priv/repo/migrations/20251204170944_nullable_jwt_secrets.exs class Realtime.Repo.Migrations.NullableJwtSecrets (line 1) | defmodule Realtime.Repo.Migrations.NullableJwtSecrets method change (line 4) | def change do FILE: priv/repo/migrations/20251218000543_ensure_jwt_secret_is_text.exs class Realtime.Repo.Migrations.EnsureJwtSecretIsText (line 1) | defmodule Realtime.Repo.Migrations.EnsureJwtSecretIsText method change (line 4) | def change do FILE: priv/repo/migrations/20260209232800_add_max_client_presence_events_per_second.exs class Realtime.Repo.Migrations.AddMaxClientPresenceEventsPerSecond (line 1) | defmodule Realtime.Repo.Migrations.AddMaxClientPresenceEventsPerSecond method change (line 4) | def change do FILE: priv/repo/migrations/20260304000000_add_presence_enabled_to_tenants.exs class Realtime.Repo.Migrations.AddPresenceEnabledToTenants (line 1) | defmodule Realtime.Repo.Migrations.AddPresenceEnabledToTenants method change (line 4) | def change do FILE: test/api_jwt_secret_test.exs class RealtimeWeb.ApiJwtSecretTest (line 1) | defmodule RealtimeWeb.ApiJwtSecretTest FILE: test/e2e/legacy/tests.ts function signInUser (line 381) | async function signInUser( function stopClient (line 394) | async function stopClient(supabase: SupabaseClient) { function executeInsert (line 400) | async function executeInsert( function executeUpdate (line 413) | async function executeUpdate( function executeDelete (line 427) | async function executeDelete( function generateJwtToken (line 439) | async function generateJwtToken(payload: JWTPayload) { FILE: test/e2e/realtime-check.ts constant ANON_KEY (line 24) | const ANON_KEY: string = opts.publishableKey ?? process.env.SUPABASE_ANO... constant SERVICE_KEY (line 25) | const SERVICE_KEY: string = opts.secretKey ?? process.env.SUPABASE_SERVI... constant TEST_CATEGORIES (line 29) | const TEST_CATEGORIES = TEST_FILTER constant PROJECT_URL (line 50) | const PROJECT_URL = (() => { constant DB_URL (line 56) | const DB_URL = (() => { constant DB_SSL (line 63) | const DB_SSL = env !== "local" ? { rejectUnauthorized: false } : false; constant REALTIME_OPTS (line 65) | const REALTIME_OPTS = { heartbeatIntervalMs: 5000, timeout: 5000 }; constant BROADCAST_CONFIG (line 66) | const BROADCAST_CONFIG = { config: { broadcast: { self: true } } }; constant EVENT_TIMEOUT_MS (line 67) | const EVENT_TIMEOUT_MS = 8000; constant RATE_LIMIT_PAUSE_MS (line 68) | const RATE_LIMIT_PAUSE_MS = 2000; constant BROADCAST_API_HEADERS (line 69) | const BROADCAST_API_HEADERS = { constant LOAD_MESSAGES (line 74) | const LOAD_MESSAGES = 20; constant LOAD_SETTLE_MS (line 75) | const LOAD_SETTLE_MS = 5000; constant LOAD_DELIVERY_SLO (line 76) | const LOAD_DELIVERY_SLO = 99; function measureThroughput (line 82) | function measureThroughput(latencies: number[], total: number, label: st... type Metric (line 96) | type Metric = { label: string; value: number; unit: string }; type TestResult (line 97) | type TestResult = { suite: string; name: string; passed: boolean; durati... function test (line 102) | async function test(name: string, fn: () => Promise) { function suite (line 119) | function suite(name: string) { function waitFor (line 124) | async function waitFor(getter: () => T | null, label: string): Promis... function stopClient (line 133) | async function stopClient(supabase: SupabaseClient) { function signInUser (line 138) | async function signInUser(supabase: SupabaseClient, email: string, passw... function waitForSubscribed (line 144) | async function waitForSubscribed(channel: ReturnType k.startsWith("load... constant FUNCTIONAL_SUITES (line 1272) | const FUNCTIONAL_SUITES = Object.keys(SUITES).filter((k) => !k.startsWit... function main (line 1274) | async function main() { FILE: test/extensions/extensions_test.exs class Realtime.ExtensionsTest (line 1) | defmodule Realtime.ExtensionsTest FILE: test/extensions/postgres_cdc_rls/db_settings_test.exs class Extensions.PostgresCdcRls.DbSettingsTest (line 1) | defmodule Extensions.PostgresCdcRls.DbSettingsTest FILE: test/extensions/postgres_cdc_rls/message_dispatcher_test.exs class Extensions.PostgresCdcRls.MessageDispatcherTest (line 1) | defmodule Extensions.PostgresCdcRls.MessageDispatcherTest class FakeSerializer (line 7) | defmodule FakeSerializer method fastlane! (line 8) | def fastlane!(msg), do: {:encoded, msg} FILE: test/extensions/postgres_cdc_rls/replications_test.exs class Extensions.PostgresCdcRls.ReplicationsTest (line 1) | defmodule Extensions.PostgresCdcRls.ReplicationsTest method drop_slot_on_exit (line 14) | defp drop_slot_on_exit(tenant, slot_name) do FILE: test/extensions/postgres_cdc_rls/worker_supervisor_test.exs class Extensions.PostgresCdcRls.WorkerSupervisorTest (line 1) | defmodule Extensions.PostgresCdcRls.WorkerSupervisorTest FILE: test/integration/distributed_realtime_channel_test.exs class Realtime.Integration.DistributedRealtimeChannelTest (line 1) | defmodule Realtime.Integration.DistributedRealtimeChannelTest FILE: test/integration/measure_traffic_test.exs class Realtime.Integration.MeasureTrafficTest (line 1) | defmodule Realtime.Integration.MeasureTrafficTest method handle_telemetry (line 10) | def handle_telemetry(event, measurements, metadata, name) do method get_count (line 34) | defp get_count(event, tenant) do FILE: test/integration/region_aware_migrations_test.exs class Realtime.Integration.RegionAwareMigrationsTest (line 1) | defmodule Realtime.Integration.RegionAwareMigrationsTest FILE: test/integration/region_aware_routing_test.exs class Realtime.Integration.RegionAwareRoutingTest (line 1) | defmodule Realtime.Integration.RegionAwareRoutingTest FILE: test/integration/rt_channel/authorization_test.exs class Realtime.Integration.RtChannel.AuthorizationTest (line 1) | defmodule Realtime.Integration.RtChannel.AuthorizationTest FILE: test/integration/rt_channel/billable_events_test.exs class Realtime.Integration.RtChannel.BillableEventsTest (line 1) | defmodule Realtime.Integration.RtChannel.BillableEventsTest method handle_telemetry (line 44) | def handle_telemetry(event, measurements, metadata, name) do method get_count (line 268) | defp get_count(event, tenant) do FILE: test/integration/rt_channel/broadcast_test.exs class Realtime.Integration.RtChannel.BroadcastTest (line 1) | defmodule Realtime.Integration.RtChannel.BroadcastTest method setup_trigger (line 424) | defp setup_trigger(%{tenant: tenant, topic: topic}) do FILE: test/integration/rt_channel/connection_lifecycle_test.exs class Realtime.Integration.RtChannel.ConnectionLifecycleTest (line 1) | defmodule Realtime.Integration.RtChannel.ConnectionLifecycleTest FILE: test/integration/rt_channel/postgres_changes_test.exs class Realtime.Integration.RtChannel.PostgresChangesTest (line 1) | defmodule Realtime.Integration.RtChannel.PostgresChangesTest FILE: test/integration/rt_channel/presence_test.exs class Realtime.Integration.RtChannel.PresenceTest (line 1) | defmodule Realtime.Integration.RtChannel.PresenceTest FILE: test/integration/rt_channel/token_handling_test.exs class Realtime.Integration.RtChannel.TokenHandlingTest (line 1) | defmodule Realtime.Integration.RtChannel.TokenHandlingTest FILE: test/integration/rt_channel/wal_bloat_test.exs class Realtime.Integration.RtChannel.WalBloatTest (line 1) | defmodule Realtime.Integration.RtChannel.WalBloatTest method active_replication_slot_pid! (line 126) | defp active_replication_slot_pid!(db_conn) do method await_replication_slot_active (line 137) | defp await_replication_slot_active(db_conn, retries, interval_ms) do method generate_wal_bloat (line 158) | defp generate_wal_bloat(tenant) do method terminate_bloat_connections (line 175) | defp terminate_bloat_connections(db_conn) do FILE: test/integration/tests.ts function stopClient (line 200) | async function stopClient(client: RealtimeClient | null) { FILE: test/integration/tracker_test.exs class Integration.TrackerTest (line 1) | defmodule Integration.TrackerTest FILE: test/realtime/adapters/postgres/protocol_test.exs class Realtime.Adapters.Postgres.ProtocolTest (line 1) | defmodule Realtime.Adapters.Postgres.ProtocolTest FILE: test/realtime/api/extensions_test.exs class Realtime.Api.ExtensionsTest (line 1) | defmodule Realtime.Api.ExtensionsTest FILE: test/realtime/api_test.exs class Realtime.ApiTest (line 1) | defmodule Realtime.ApiTest method create_tenants (line 17) | defp create_tenants(_) do FILE: test/realtime/database_distributed_test.exs class Realtime.DatabaseDistributedTest (line 1) | defmodule Realtime.DatabaseDistributedTest method handle_telemetry (line 12) | def handle_telemetry(event, metadata, content, pid: pid), do: send(pid... FILE: test/realtime/database_test.exs class Realtime.DatabaseTest (line 1) | defmodule Realtime.DatabaseTest method handle_telemetry (line 9) | def handle_telemetry(event, metadata, content, pid: pid), do: send(pid... method update_extension (line 398) | defp update_extension(tenant, extension) do FILE: test/realtime/extensions/cdc_rls/cdc_rls_test.exs class Realtime.Extensions.CdcRlsTest (line 1) | defmodule Realtime.Extensions.CdcRlsTest method integration (line 488) | defp integration(_) do method distributed_integration (line 508) | defp distributed_integration(_) do method pubsub_subscribe (line 528) | defp pubsub_subscribe(external_id, event \\ "*") do method handle_telemetry (line 557) | def handle_telemetry(event, measures, metadata, pid: pid), do: send(pi... FILE: test/realtime/extensions/cdc_rls/replication_poller_test.exs class Realtime.Extensions.PostgresCdcRls.ReplicationPollerTest (line 1) | defmodule Realtime.Extensions.PostgresCdcRls.ReplicationPollerTest method handle_telemetry (line 733) | def handle_telemetry(event, measures, metadata, pid: pid), do: send(pi... method build_result (line 735) | defp build_result(subscription_ids) do FILE: test/realtime/extensions/cdc_rls/replications_test.exs class Realtime.Extensions.PostgresCdcRls.ReplicationsTest (line 1) | defmodule Realtime.Extensions.PostgresCdcRls.ReplicationsTest FILE: test/realtime/extensions/cdc_rls/subscription_manager_test.exs class Realtime.Extensions.CdcRls.SubscriptionManagerTest (line 1) | defmodule Realtime.Extensions.CdcRls.SubscriptionManagerTest method pg_change_params (line 249) | defp pg_change_params do FILE: test/realtime/extensions/cdc_rls/subscriptions_checker_distributed_test.exs class Realtime.Extensions.CdcRls.SubscriptionsCheckerDistributedTest (line 1) | defmodule Realtime.Extensions.CdcRls.SubscriptionsCheckerDistributedTest FILE: test/realtime/extensions/cdc_rls/subscriptions_checker_test.exs class Realtime.Extensions.PostgresCdcRl.SubscriptionsCheckerTest (line 1) | defmodule Realtime.Extensions.PostgresCdcRl.SubscriptionsCheckerTest FILE: test/realtime/extensions/cdc_rls/subscriptions_test.exs class Realtime.Extensions.PostgresCdcRls.SubscriptionsTest (line 1) | defmodule Realtime.Extensions.PostgresCdcRls.SubscriptionsTest method create_subscriptions (line 312) | defp create_subscriptions(conn, num) do FILE: test/realtime/gen_counter/gen_counter_test.exs class Realtime.GenCounterTest (line 1) | defmodule Realtime.GenCounterTest FILE: test/realtime/gen_rpc_pub_sub/worker_test.exs class Realtime.GenRpcPubSub.WorkerTest (line 1) | defmodule Realtime.GenRpcPubSub.WorkerTest FILE: test/realtime/gen_rpc_pub_sub_test.exs class Realtime.GenRpcPubSubTest (line 4) | defmodule Realtime.GenRpcPubSubTest FILE: test/realtime/gen_rpc_test.exs class Realtime.GenRpcTest (line 1) | defmodule Realtime.GenRpcTest method handle_telemetry (line 388) | def handle_telemetry(event, measurements, metadata, pid: pid), do: sen... FILE: test/realtime/helpers_test.exs class Realtime.HelpersTest (line 1) | defmodule Realtime.HelpersTest FILE: test/realtime/log_filter_test.exs class Realtime.LogFilterTest (line 1) | defmodule Realtime.LogFilterTest method gen_statem_event (line 65) | defp gen_statem_event(reason) do method ranch_event (line 74) | defp ranch_event(ref, protocol, pid, reason) do method db_connection_log_event (line 78) | defp db_connection_log_event(message) do FILE: test/realtime/logs_test.exs class Realtime.LogsTest (line 1) | defmodule Realtime.LogsTest FILE: test/realtime/messages_test.exs class Realtime.MessagesTest (line 1) | defmodule Realtime.MessagesTest method handle_telemetry (line 260) | def handle_telemetry(event, measures, metadata, pid: pid), do: send(pi... FILE: test/realtime/metrics_cleaner_test.exs class Realtime.MetricsCleanerTest (line 1) | defmodule Realtime.MetricsCleanerTest FILE: test/realtime/metrics_pusher_test.exs class Realtime.MetricsPusherTest (line 1) | defmodule Realtime.MetricsPusherTest method start_and_allow_pusher (line 11) | defp start_and_allow_pusher(opts) do FILE: test/realtime/monitoring/distributed_metrics_test.exs class Realtime.DistributedMetricsTest (line 1) | defmodule Realtime.DistributedMetricsTest FILE: test/realtime/monitoring/erl_sys_mon_test.exs class Realtime.Monitoring.ErlSysMonTest (line 1) | defmodule Realtime.Monitoring.ErlSysMonTest FILE: test/realtime/monitoring/gen_rpc_metrics_test.exs class Realtime.GenRpcMetricsTest (line 1) | defmodule Realtime.GenRpcMetricsTest FILE: test/realtime/monitoring/latency_test.exs class Realtime.LatencyTest (line 1) | defmodule Realtime.LatencyTest FILE: test/realtime/monitoring/prom_ex/plugins/distributed_test.exs class Realtime.PromEx.Plugins.DistributedTest (line 1) | defmodule Realtime.PromEx.Plugins.DistributedTest method metric_value (line 62) | defp metric_value(metrics, metric, expected_tags), do: MetricsHelper.s... class MetricsTest (line 6) | defmodule MetricsTest method plugins (line 9) | def plugins do FILE: test/realtime/monitoring/prom_ex/plugins/gen_rpc_test.exs class Realtime.PromEx.Plugins.GenRpcTest (line 1) | defmodule Realtime.PromEx.Plugins.GenRpcTest method metric_value (line 63) | defp metric_value(metrics, metric, expected_tags), do: MetricsHelper.s... class MetricsTest (line 6) | defmodule MetricsTest method plugins (line 9) | def plugins do FILE: test/realtime/monitoring/prom_ex/plugins/phoenix_test.exs class Realtime.PromEx.Plugins.PhoenixTest (line 1) | defmodule Realtime.PromEx.Plugins.PhoenixTest method metric_value (line 86) | defp metric_value(metric, expected_tags \\ nil) do class MetricsTest (line 6) | defmodule MetricsTest method plugins (line 9) | def plugins do FILE: test/realtime/monitoring/prom_ex/plugins/tenant_test.exs class Realtime.PromEx.Plugins.TenantTest (line 1) | defmodule Realtime.PromEx.Plugins.TenantTest method handle_telemetry (line 25) | def handle_telemetry(event, metadata, content, pid: pid), do: send(pid... method metric_value (line 338) | defp metric_value(metric, expected_tags \\ nil) do class MetricsTest (line 13) | defmodule MetricsTest method plugins (line 17) | def plugins, do: [{Tenant, poll_rate: 50}, {TenantGlobal, poll_rate: 50}] FILE: test/realtime/monitoring/prom_ex/plugins/tenants_test.exs class Realtime.PromEx.Plugins.TenantsTest (line 1) | defmodule Realtime.PromEx.Plugins.TenantsTest method metric_value (line 123) | defp metric_value(metric, expected_tags \\ nil) do class MetricsTest (line 9) | defmodule MetricsTest method plugins (line 12) | def plugins do class Test (line 17) | defmodule Test method success (line 18) | def success, do: {:ok, "success"} method failure (line 19) | def failure, do: {:error, "failure"} method exception (line 20) | def exception, do: raise(RuntimeError) FILE: test/realtime/monitoring/prom_ex_test.exs class Realtime.PromExTest (line 1) | defmodule Realtime.PromExTest FILE: test/realtime/monitoring/prometheus_test.exs class Realtime.Monitoring.PrometheusTest (line 2) | defmodule Realtime.Monitoring.PrometheusTest method export (line 422) | defp export(name) do method lines_to_string (line 428) | defp lines_to_string(lines) do class StorageCounter (line 8) | defmodule StorageCounter method start (line 12) | def start() do method fresh_id (line 16) | def fresh_id() do class TestError (line 22) | defmodule TestError FILE: test/realtime/nodes_test.exs class Realtime.NodesTest (line 1) | defmodule Realtime.NodesTest method spawn_fake_node (line 7) | defp spawn_fake_node(region, node) do FILE: test/realtime/oid_test.exs class Realtime.OidTest (line 1) | defmodule Realtime.OidTest FILE: test/realtime/postgres_decoder_test.exs class Realtime.PostgresDecoderTest (line 1) | defmodule Realtime.PostgresDecoderTest FILE: test/realtime/rate_counter/rate_counter_test.exs class Realtime.RateCounterTest (line 1) | defmodule Realtime.RateCounterTest method handle_telemetry (line 331) | def handle_telemetry(event, measures, metadata, pid: pid), do: send(pi... FILE: test/realtime/repo_replica_test.exs class Realtime.Repo.ReplicaTest (line 1) | defmodule Realtime.Repo.ReplicaTest method replica_asserts (line 117) | defp replica_asserts(mod, replica) do FILE: test/realtime/rpc_test.exs class Realtime.RpcTest (line 1) | defmodule Realtime.RpcTest method handle_telemetry (line 18) | def handle_telemetry(event, measurements, metadata, pid: pid), do: sen... FILE: test/realtime/signal_handler_test.exs class Realtime.SignalHandlerTest (line 1) | defmodule Realtime.SignalHandlerTest class FakeHandler (line 6) | defmodule FakeHandler method handle_event (line 7) | def handle_event(signal, _state), do: send(self(), signal) FILE: test/realtime/syn_handler_test.exs class Realtime.SynHandlerTest (line 1) | defmodule Realtime.SynHandlerTest method assert_process_down (line 331) | defp assert_process_down(pid, reason, timeout) do FILE: test/realtime/telemetry/logger_test.exs class Realtime.Telemetry.LoggerTest (line 1) | defmodule Realtime.Telemetry.LoggerTest FILE: test/realtime/tenants/authorization_remote_test.exs class Realtime.Tenants.AuthorizationRemoteTest (line 1) | defmodule Realtime.Tenants.AuthorizationRemoteTest method remote_rls_context (line 230) | defp remote_rls_context(context) do FILE: test/realtime/tenants/authorization_test.exs class Realtime.Tenants.AuthorizationTest (line 1) | defmodule Realtime.Tenants.AuthorizationTest method update_db_pool_size (line 287) | defp update_db_pool_size(tenant, db_pool) do FILE: test/realtime/tenants/batch_broadcast_test.exs class Realtime.Tenants.BatchBroadcastTest (line 1) | defmodule Realtime.Tenants.BatchBroadcastTest FILE: test/realtime/tenants/cache_test.exs class Realtime.Tenants.CacheTest (line 1) | defmodule Realtime.Tenants.CacheTest method seed_remote_cache (line 145) | defp seed_remote_cache(node, external_id, tenant, attempts \\ 20) do method assert_eventually (line 161) | defp assert_eventually(fun, attempts \\ 50, interval \\ 100) method assert_eventually (line 163) | defp assert_eventually(fun, 0, _interval) do method assert_eventually (line 167) | defp assert_eventually(fun, attempts, interval) do FILE: test/realtime/tenants/connect/get_tenant_test.exs class Realtime.Tenants.Connect.GetTenantTest (line 1) | defmodule Realtime.Tenants.Connect.GetTenantTest FILE: test/realtime/tenants/connect/piper_test.exs class Realtime.Tenants.Connect.PiperTest (line 1) | defmodule Realtime.Tenants.Connect.PiperTest class Piper1 (line 8) | defmodule Piper1 method run (line 10) | def run(acc), do: {:ok, Map.put(acc, :piper1, "Piper1")} class Piper2 (line 13) | defmodule Piper2 method run (line 15) | def run(acc), do: Map.get(acc, :piper1) && {:ok, Map.put(acc, :piper2,... class Piper3 (line 18) | defmodule Piper3 method run (line 20) | def run(acc), do: Map.get(acc, :piper2) && {:ok, Map.put(acc, :piper3,... class PiperErr (line 23) | defmodule PiperErr method run (line 25) | def run(_acc), do: {:error, "PiperErr"} class PiperBadReturn (line 28) | defmodule PiperBadReturn method run (line 30) | def run(_acc), do: nil class PiperException (line 33) | defmodule PiperException method run (line 35) | def run(_acc), do: raise("PiperException") FILE: test/realtime/tenants/connect/reconcile_migrations_test.exs class Realtime.Tenants.Connect.ReconcileMigrationsTest (line 1) | defmodule Realtime.Tenants.Connect.ReconcileMigrationsTest FILE: test/realtime/tenants/connect/register_process_test.exs class Realtime.Tenants.Connect.RegisterProcessTest (line 1) | defmodule Realtime.Tenants.Connect.RegisterProcessTest FILE: test/realtime/tenants/connect_test.exs class Realtime.Tenants.ConnectTest (line 1) | defmodule Realtime.Tenants.ConnectTest method assert_process_down (line 23) | defp assert_process_down(pid, timeout \\ 100, reason \\ nil) do method refute_process_down (line 33) | defp refute_process_down(pid, timeout \\ 500) do method check_db_connections_created (line 818) | defp check_db_connections_created(test_pid, tenant_id) do method update_extension (line 840) | defp update_extension(tenant, extension) do method assert_pid (line 850) | defp assert_pid(call, attempts \\ 10) method assert_pid (line 852) | defp assert_pid(_call, 0) do method assert_pid (line 856) | defp assert_pid(call, attempts) do method assert_replication_status (line 867) | defp assert_replication_status(tenant_id, attempts \\ 20) method assert_replication_status (line 869) | defp assert_replication_status(tenant_id, 0) do method assert_replication_status (line 873) | defp assert_replication_status(tenant_id, attempts) do FILE: test/realtime/tenants/janitor/maintenance_task_test.exs class Realtime.Tenants.Janitor.MaintenanceTaskTest (line 1) | defmodule Realtime.Tenants.Janitor.MaintenanceTaskTest method verify_partitions (line 86) | defp verify_partitions(conn) do FILE: test/realtime/tenants/janitor_test.exs class Realtime.Tenants.JanitorTest (line 1) | defmodule Realtime.Tenants.JanitorTest method verify_partitions (line 171) | defp verify_partitions(conn) do FILE: test/realtime/tenants/migrations_test.exs class Realtime.Tenants.MigrationsTest (line 1) | defmodule Realtime.Tenants.MigrationsTest FILE: test/realtime/tenants/rebalancer_test.exs class Realtime.Tenants.RebalancerTest (line 1) | defmodule Realtime.Tenants.RebalancerTest FILE: test/realtime/tenants/replication_connection/watchdog_test.exs class Realtime.Tenants.ReplicationConnection.WatchdogTest (line 1) | defmodule Realtime.Tenants.ReplicationConnection.WatchdogTest class FakeReplicationConnection (line 8) | defmodule FakeReplicationConnection method child_spec (line 9) | def child_spec(opts) do method start_link (line 13) | def start_link(opts \\ []), do: :gen_statem.start_link(__MODULE__, opt... method callback_mode (line 15) | def callback_mode, do: :state_functions method init (line 17) | def init(opts) do method idle (line 30) | def idle({:call, from}, :health_check, %{respond_to_health_checks: tru... method idle (line 39) | def idle({:call, _from}, :health_check, %{respond_to_health_checks: fa... method idle (line 44) | def idle({:call, from}, :get_health_check_count, data) do method idle (line 49) | def idle({:call, from}, :set_no_respond, data) do method get_health_check_count (line 54) | def get_health_check_count(pid), do: :gen_statem.call(pid, :get_health... method set_no_respond (line 56) | def set_no_respond(pid), do: :gen_statem.call(pid, :set_no_respond) FILE: test/realtime/tenants/replication_connection_test.exs class Realtime.Tenants.ReplicationConnectionTest (line 1) | defmodule Realtime.Tenants.ReplicationConnectionTest method handle_telemetry (line 723) | def handle_telemetry(event, measures, metadata, pid: pid), do: send(pi... method subscribe (line 768) | defp subscribe(tenant_topic, topic) do method assert_process_down (line 781) | defp assert_process_down(pid, timeout \\ 100) do method message_fixture_with_conn (line 786) | defp message_fixture_with_conn(_tenant, conn, override) do method assert_publication_contains_only_messages (line 802) | defp assert_publication_contains_only_messages(db_conn, publication_na... method assert_replication_started (line 818) | defp assert_replication_started(db_conn, slot_name, retries \\ 10, int... method check_replication_status (line 825) | defp check_replication_status(_db_conn, _slot_name, 0, _interval_ms), ... method check_replication_status (line 827) | defp check_replication_status(db_conn, slot_name, retries_remaining, i... FILE: test/realtime/tenants/repo_test.exs class Realtime.Tenants.RepoTest (line 1) | defmodule Realtime.Tenants.RepoTest FILE: test/realtime/tenants_test.exs class Realtime.TenantsTest (line 1) | defmodule Realtime.TenantsTest FILE: test/realtime/users_counter_test.exs class Realtime.UsersCounterTest (line 1) | defmodule Realtime.UsersCounterTest method generate_load (line 94) | defp generate_load(tenant_id) do FILE: test/realtime_web/channels/auth/channels_authorization_test.exs class RealtimeWeb.ChannelsAuthorizationTest (line 1) | defmodule RealtimeWeb.ChannelsAuthorizationTest FILE: test/realtime_web/channels/auth/jwt_verification_test.exs class RealtimeWeb.JwtVerificationTest (line 1) | defmodule RealtimeWeb.JwtVerificationTest FILE: test/realtime_web/channels/payloads/flexible_boolean_test.exs class RealtimeWeb.Channels.Payloads.FlexibleBooleanTest (line 1) | defmodule RealtimeWeb.Channels.Payloads.FlexibleBooleanTest FILE: test/realtime_web/channels/payloads/join_test.exs class RealtimeWeb.Channels.Payloads.JoinTest (line 1) | defmodule RealtimeWeb.Channels.Payloads.JoinTest FILE: test/realtime_web/channels/realtime_channel/broadcast_handler_test.exs class RealtimeWeb.RealtimeChannel.BroadcastHandlerTest (line 1) | defmodule RealtimeWeb.RealtimeChannel.BroadcastHandlerTest method initiate_tenant (line 444) | defp initiate_tenant(context) do method socket_fixture (line 478) | defp socket_fixture(tenant, topic, opts \\ []) do method message (line 520) | defp message(RealtimeWeb.Socket.V2Serializer, topic, payload), do: [ni... method message (line 522) | defp message(Phoenix.Socket.V1.JSONSerializer, topic, payload) do FILE: test/realtime_web/channels/realtime_channel/logging_test.exs class RealtimeWeb.RealtimeChannel.LoggingTest (line 1) | defmodule RealtimeWeb.RealtimeChannel.LoggingTest method handle_telemetry (line 7) | def handle_telemetry(event, measures, metadata, pid: pid), do: send(pi... FILE: test/realtime_web/channels/realtime_channel/message_dispatcher_test.exs class RealtimeWeb.RealtimeChannel.MessageDispatcherTest (line 1) | defmodule RealtimeWeb.RealtimeChannel.MessageDispatcherTest class TestSerializer (line 12) | defmodule TestSerializer method fastlane! (line 13) | def fastlane!(msg) do FILE: test/realtime_web/channels/realtime_channel/presence_handler_test.exs class RealtimeWeb.RealtimeChannel.PresenceHandlerTest (line 1) | defmodule RealtimeWeb.RealtimeChannel.PresenceHandlerTest method initiate_tenant (line 742) | defp initiate_tenant(context) do method socket_fixture (line 756) | defp socket_fixture(tenant, topic, presence_key, opts \\ []) do method handle_telemetry (line 838) | def handle_telemetry(event, measures, metadata, %{pid: pid, tenant: te... FILE: test/realtime_web/channels/realtime_channel/tracker_test.exs class RealtimeWeb.RealtimeChannel.TrackerTest (line 1) | defmodule RealtimeWeb.RealtimeChannel.TrackerTest FILE: test/realtime_web/channels/realtime_channel_test.exs class RealtimeWeb.RealtimeChannelTest (line 1) | defmodule RealtimeWeb.RealtimeChannelTest method conn_opts (line 1397) | defp conn_opts(tenant, token) do method update_extension (line 1406) | defp update_extension(tenant, extension) do method assert_process_down (line 1419) | defp assert_process_down(pid) do method rls_context (line 1424) | defp rls_context(%{tenant: tenant, policies: policies}) do method rls_context (line 1430) | defp rls_context(_), do: :ok FILE: test/realtime_web/channels/socket_disconnect_test.exs class RealtimeWeb.SocketDisconnectTest (line 1) | defmodule RealtimeWeb.SocketDisconnectTest FILE: test/realtime_web/channels/tenant_rate_limiters_test.exs class RealtimeWeb.TenantRateLimitersTest (line 1) | defmodule RealtimeWeb.TenantRateLimitersTest FILE: test/realtime_web/channels/user_socket_test.exs class RealtimeWeb.UserSocketTest (line 1) | defmodule RealtimeWeb.UserSocketTest FILE: test/realtime_web/controllers/broadcast_controller_test.exs class RealtimeWeb.BroadcastControllerTest (line 1) | defmodule RealtimeWeb.BroadcastControllerTest method subscribe (line 28) | defp subscribe(tenant_topic, topic) do method assert_receive_messages (line 41) | defp assert_receive_messages(count) do method generate_message_with_policies (line 517) | defp generate_message_with_policies(db_conn, tenant) do method generate_conn (line 523) | defp generate_conn(conn, tenant) do FILE: test/realtime_web/controllers/fallback_controller_test.exs class RealtimeWeb.FallbackControllerTest (line 1) | defmodule RealtimeWeb.FallbackControllerTest FILE: test/realtime_web/controllers/legacy_metrics_controller_test.exs class RealtimeWeb.LegacyMetricsControllerTest (line 1) | defmodule RealtimeWeb.LegacyMetricsControllerTest method fire_all_tenant_events (line 44) | defp fire_all_tenant_events do FILE: test/realtime_web/controllers/live_dasboard_test.exs class RealtimeWeb.LiveDashboardTest (line 1) | defmodule RealtimeWeb.LiveDashboardTest method using_basic_auth (line 72) | defp using_basic_auth(conn, username, password) do FILE: test/realtime_web/controllers/metrics_controller_test.exs class RealtimeWeb.MetricsControllerTest (line 1) | defmodule RealtimeWeb.MetricsControllerTest method fire_all_tenant_events (line 57) | defp fire_all_tenant_events do FILE: test/realtime_web/controllers/openapi_controller_test.exs class RealtimeWeb.Controllers.OpenapiControllerTest (line 1) | defmodule RealtimeWeb.Controllers.OpenapiControllerTest FILE: test/realtime_web/controllers/page_controller_test.exs class RealtimeWeb.PageControllerTest (line 1) | defmodule RealtimeWeb.PageControllerTest FILE: test/realtime_web/controllers/tenant_controller_test.exs class RealtimeWeb.TenantControllerTest (line 1) | defmodule RealtimeWeb.TenantControllerTest method with_tenant (line 35) | defp with_tenant(_context) do method default_tenant_attrs (line 651) | defp default_tenant_attrs(port) do method wait_on_postgres_cdc_rls (line 675) | defp wait_on_postgres_cdc_rls(external_id, attempt \\ 10) method wait_on_postgres_cdc_rls (line 677) | defp wait_on_postgres_cdc_rls(external_id, 0) do method wait_on_postgres_cdc_rls (line 681) | defp wait_on_postgres_cdc_rls(external_id, attempt) do FILE: test/realtime_web/dashboard/tenant_info_test.exs class Realtime.Dashboard.TenantInfoTest (line 1) | defmodule Realtime.Dashboard.TenantInfoTest method using_basic_auth (line 62) | defp using_basic_auth(conn, username, password) do FILE: test/realtime_web/integration/tracing_test.exs class Realtime.Integration.TracingTest (line 1) | defmodule Realtime.Integration.TracingTest FILE: test/realtime_web/live/inspector_live/index_test.exs class RealtimeWeb.InspectorLive.IndexTest (line 1) | defmodule RealtimeWeb.InspectorLive.IndexTest FILE: test/realtime_web/live/page_live/index_test.exs class RealtimeWeb.PageLive.IndexTest (line 1) | defmodule RealtimeWeb.PageLive.IndexTest FILE: test/realtime_web/live/status_live/index_test.exs class RealtimeWeb.StatusLive.IndexTest (line 1) | defmodule RealtimeWeb.StatusLive.IndexTest FILE: test/realtime_web/live/tenants_live/index_test.exs class RealtimeWeb.TenantsLive.IndexTest (line 1) | defmodule RealtimeWeb.TenantsLive.IndexTest method using_basic_auth (line 67) | defp using_basic_auth(conn, username, password) do FILE: test/realtime_web/plugs/assign_tenant_test.exs class RealtimeWeb.Plugs.AssignTenantTest (line 1) | defmodule RealtimeWeb.Plugs.AssignTenantTest FILE: test/realtime_web/plugs/auth_tenant_test.exs class RealtimeWeb.AuthTenantTest (line 1) | defmodule RealtimeWeb.AuthTenantTest FILE: test/realtime_web/plugs/baggage_request_id_test.exs class RealtimeWeb.Plugs.BaggageRequestIdTest (line 1) | defmodule RealtimeWeb.Plugs.BaggageRequestIdTest method call (line 8) | defp call(conn, opts) do method generated_request_id? (line 81) | defp generated_request_id?(request_id) do FILE: test/realtime_web/plugs/metrics_mode_test.exs class RealtimeWeb.Plugs.MetricsModeTest (line 1) | defmodule RealtimeWeb.Plugs.MetricsModeTest FILE: test/realtime_web/plugs/rate_limiter_test.exs class RealtimeWeb.Plugs.RateLimiterTest (line 1) | defmodule RealtimeWeb.Plugs.RateLimiterTest FILE: test/realtime_web/socket/v2_serializer_test.exs class RealtimeWeb.Socket.V2SerializerTest (line 1) | defmodule RealtimeWeb.Socket.V2SerializerTest method encode! (line 271) | defp encode!(serializer, msg) do method decode! (line 283) | defp decode!(serializer, msg, opts), do: serializer.decode!(msg, opts) method fastlane! (line 285) | defp fastlane!(serializer, msg) do FILE: test/realtime_web/tenant_broadcaster_test.exs class RealtimeWeb.TenantBroadcasterTest (line 1) | defmodule RealtimeWeb.TenantBroadcasterTest method handle_telemetry (line 247) | def handle_telemetry(event, measures, metadata, %{pid: pid, tenant: te... FILE: test/realtime_web/views/error_view_test.exs class RealtimeWeb.ErrorViewTest (line 1) | defmodule RealtimeWeb.ErrorViewTest FILE: test/realtime_web/views/layout_view_test.exs class RealtimeWeb.LayoutViewTest (line 1) | defmodule RealtimeWeb.LayoutViewTest FILE: test/realtime_web/views/page_view_test.exs class RealtimeWeb.PageViewTest (line 1) | defmodule RealtimeWeb.PageViewTest FILE: test/support/channel_case.ex class RealtimeWeb.ChannelCase (line 1) | defmodule RealtimeWeb.ChannelCase FILE: test/support/cleanup.ex class Cleanup (line 1) | defmodule Cleanup method ensure_no_replication_slot (line 3) | def ensure_no_replication_slot(attempts \\ 5) method ensure_no_replication_slot (line 4) | def ensure_no_replication_slot(0), do: raise("Replication slot teardow... method ensure_no_replication_slot (line 7) | def ensure_no_replication_slot(attempts) do FILE: test/support/clustered.ex class Clustered (line 1) | defmodule Clustered method start (line 27) | def start(aux_mod \\ nil, opts \\ []) do method start_disconnected (line 47) | def start_disconnected(aux_mod \\ nil, opts \\ []) do method wait_for_gen_rpc (line 137) | defp wait_for_gen_rpc(pid) do method wait_for_port_free (line 146) | defp wait_for_port_free(port, attempts \\ 50, delay_ms \\ 100) method wait_for_port_free (line 147) | defp wait_for_port_free(_port, 0, _delay_ms), do: :ok method wait_for_port_free (line 149) | defp wait_for_port_free(port, attempts, delay_ms) do method wait_for_port (line 161) | defp wait_for_port(_host, _port, 0, _delay_ms), do: raise("gen_rpc tcp... method wait_for_port (line 163) | defp wait_for_port(host, port, attempts, delay_ms) do FILE: test/support/conn_case.ex class RealtimeWeb.ConnCase (line 1) | defmodule RealtimeWeb.ConnCase FILE: test/support/containers.ex class Containers (line 1) | defmodule Containers method pull (line 12) | def pull do method start_container (line 23) | def start_container(), do: GenServer.call(__MODULE__, :start_container... method port (line 24) | def port(), do: GenServer.call(__MODULE__, :port, 10_000) method start_link (line 26) | def start_link(max_cases), do: GenServer.start_link(__MODULE__, max_ca... method init (line 28) | def init(max_cases) do method handle_continue (line 36) | def handle_continue({:pool, max_cases}, state) do method handle_call (line 52) | def handle_call(:port, _from, state) do method handle_call (line 57) | def handle_call(:start_container, _from, state) do method random_string (line 72) | defp random_string(length) do method initialize (line 78) | def initialize(external_id) do method checkout (line 106) | def checkout() do method storage_up! (line 118) | defp storage_up!(tenant) do method checkout_tenant (line 131) | def checkout_tenant(opts \\ []), do: do_checkout_tenant(opts, :sandbox) method checkout_tenant_unboxed (line 132) | def checkout_tenant_unboxed(opts \\ []), do: do_checkout_tenant(opts, ... method do_checkout_tenant (line 134) | defp do_checkout_tenant(opts, mode) do method repo_run (line 203) | defp repo_run(:unboxed, fun), do: Ecto.Adapters.SQL.Sandbox.unboxed_ru... method repo_run (line 204) | defp repo_run(:sandbox, fun), do: fun.() method stop_containers (line 206) | def stop_containers() do method stop_container (line 215) | def stop_container(external_id) do method existing_containers (line 220) | defp existing_containers(pattern) do method check_container_ready (line 239) | defp check_container_ready(name, attempts \\ 50) method check_container_ready (line 240) | defp check_container_ready(name, 0), do: raise("Container #{name} is n... method check_container_ready (line 242) | defp check_container_ready(name, attempts) do method run_migrations (line 254) | defp run_migrations(tenant) do method docker_run! (line 284) | defp docker_run!(name, port) do FILE: test/support/containers/container.ex class Containers.Container (line 1) | defmodule Containers.Container method start_link (line 4) | def start_link(args \\ [], opts \\ []) do method port (line 8) | def port(pid), do: GenServer.call(pid, :port, 15_000) method name (line 9) | def name(pid), do: GenServer.call(pid, :name, 15_000) method handle_call (line 12) | def handle_call(:port, _from, state) do method handle_call (line 17) | def handle_call(:name, _from, state) do method init (line 22) | def init(_args) do method handle_continue (line 27) | def handle_continue(:start_container, _state) do method handle_continue (line 34) | def handle_continue(:check_container_ready, state) do method check_container_ready (line 39) | defp check_container_ready(name, attempts \\ 100) method check_container_ready (line 40) | defp check_container_ready(name, 0), do: raise("Container #{name} is n... method check_container_ready (line 42) | defp check_container_ready(name, attempts) do FILE: test/support/data_case.ex class Realtime.DataCase (line 1) | defmodule Realtime.DataCase method setup_sandbox (line 31) | def setup_sandbox(tags) do method errors_on (line 48) | def errors_on(changeset) do FILE: test/support/generators.ex class Generators (line 1) | defmodule Generators method port (line 10) | def port(), do: Containers.port() method tenant_fixture (line 13) | def tenant_fixture(override \\ %{}) do method message_fixture (line 49) | def message_fixture(tenant, override \\ %{}) do method random_string (line 69) | def random_string(length \\ 20) do method clean_table (line 73) | def clean_table(db_conn, schema, table) do method create_messages_partitions (line 96) | def create_messages_partitions(db_conn, start_date, end_date) do method create_rls_policies (line 124) | def create_rls_policies(conn, policies, params) do method policy_query (line 141) | def policy_query(query, params \\ nil) method policy_query (line 143) | def policy_query(:authenticated_all_topic_read, _) do method policy_query (line 152) | def policy_query(:authenticated_all_topic_insert, _) do method policy_query (line 161) | def policy_query(:authenticated_read_matching_user_sub, %{sub: sub}) do method policy_query (line 170) | def policy_query(:read_matching_user_role, %{role: role}) do method policy_query (line 178) | def policy_query(:authenticated_write_matching_user_sub, %{sub: sub}) do method policy_query (line 187) | def policy_query(:write_matching_user_role, %{role: role}) do method policy_query (line 195) | def policy_query(:authenticated_read_broadcast, %{topic: name}) do method policy_query (line 204) | def policy_query(:authenticated_write_broadcast, %{topic: name}) do method policy_query (line 213) | def policy_query(:authenticated_read_presence, %{topic: name}) do method policy_query (line 222) | def policy_query(:authenticated_write_presence, %{topic: name}) do method policy_query (line 231) | def policy_query(:authenticated_read_broadcast_and_presence, %{topic: ... method policy_query (line 240) | def policy_query(:authenticated_write_broadcast_and_presence, %{topic:... method policy_query (line 249) | def policy_query(:broken_read_presence, _) do method policy_query (line 258) | def policy_query(:broken_write_presence, _) do method generate_jwt_token (line 268) | def generate_jwt_token(secret_or_tenant) do method generate_jwt_token (line 274) | def generate_jwt_token(%Tenant{} = tenant, claims) do method test_port (line 286) | defp test_port do method get_connection (line 292) | def get_connection(tenant, serializer \\ Phoenix.Socket.V1.JSONSeriali... method uri (line 306) | def uri(tenant, serializer, port \\ nil), method vsn (line 309) | defp vsn(Phoenix.Socket.V1.JSONSerializer), do: "1.0.0" method vsn (line 310) | defp vsn(RealtimeWeb.Socket.V2Serializer), do: "2.0.0" method token_valid (line 313) | def token_valid(tenant, role, claims \\ %{}), do: generate_token(tenan... method token_no_role (line 315) | def token_no_role(tenant), do: generate_token(tenant) method generate_token (line 318) | def generate_token(tenant, claims \\ %{}) do FILE: test/support/integrations.ex class Integrations (line 1) | defmodule Integrations method checkout_tenant_and_connect (line 10) | def checkout_tenant_and_connect(_context \\ %{}) do method rls_context (line 17) | def rls_context(%{tenant: tenant} = context) do method change_tenant_configuration (line 50) | def change_tenant_configuration(%Tenant{external_id: external_id}, lim... method checkout_tenant_connect_and_setup_postgres_changes (line 60) | def checkout_tenant_connect_and_setup_postgres_changes(_context \\ %{}... method setup_postgres_changes (line 66) | def setup_postgres_changes(conn) do method assert_process_down (line 120) | def assert_process_down(pid, timeout \\ 1000) do FILE: test/support/joken_current_time_mock.ex class RealtimeWeb.Joken.CurrentTime.Mock (line 1) | defmodule RealtimeWeb.Joken.CurrentTime.Mock method start_link (line 12) | def start_link do method child_spec (line 21) | def child_spec(_args) do method current_time (line 28) | def current_time do method freeze (line 38) | def freeze do method freeze (line 42) | def freeze(timestamp) do method unique_name_per_process (line 48) | def unique_name_per_process do FILE: test/support/metrics_helper.ex class MetricsHelper (line 1) | defmodule MetricsHelper method search (line 4) | def search(prometheus_metrics, metric_name, expected_tags \\ nil) do method parse (line 27) | defp parse(metric_string, regex, expected_tags) do method parse_tags (line 43) | defp parse_tags(tags_string) do method matching_tags (line 50) | defp matching_tags(tags, expected_tags) do FILE: test/support/rate_counter_helper.ex class RateCounterHelper (line 1) | defmodule RateCounterHelper method stop (line 5) | def stop(tenant_id) do method tick! (line 21) | def tick!(args) do method tick_tenant_rate_counters! (line 27) | def tick_tenant_rate_counters!(tenant_id) do FILE: test/support/replication_test_handler.ex class Replication.TestHandler (line 1) | defmodule Replication.TestHandler method call (line 25) | def call(_, _), do: :noreply FILE: test/support/tenant_connection.ex class TenantConnection (line 1) | defmodule TenantConnection method create_message (line 11) | def create_message(attrs, conn, opts \\ [mode: :savepoint]) do method ensure_connect_down (line 28) | def ensure_connect_down(tenant_id) do FILE: test/support/tracing.ex class Realtime.Tracing (line 1) | defmodule Realtime.Tracing FILE: test/support/websocket_client.ex class Realtime.Integration.WebsocketClient (line 4) | defmodule Realtime.Integration.WebsocketClient method connect (line 35) | def connect(sender, url, serializer, headers \\ []) do method close (line 45) | def close(socket), do: GenServer.cast(socket, :close) method send_event (line 50) | def send_event(socket, topic, event, msg) do method send (line 57) | def send(socket, msg), do: GenServer.call(socket, {:send, msg}) method send_heartbeat (line 62) | def send_heartbeat(socket), do: send_event(socket, "phoenix", "heartbe... method join (line 67) | def join(socket, topic, msg), do: send_event(socket, topic, "phx_join"... method leave (line 72) | def leave(socket, topic, msg), do: send_event(socket, topic, "phx_leav... method init (line 77) | def init({sender, serializer}) do method handle_call (line 83) | def handle_call({:connect, url, headers}, from, state) do method handle_call (line 116) | def handle_call({:send, msg}, _from, state) do method handle_cast (line 126) | def handle_cast(:close, state), do: do_close(state) method do_close (line 128) | defp do_close(state) do method handle_info (line 137) | def handle_info(message, state) do method handle_responses (line 155) | defp handle_responses(state, responses) method handle_responses (line 157) | defp handle_responses(%{request_ref: ref} = state, [{:status, ref, sta... method handle_responses (line 163) | defp handle_responses(%{request_ref: ref} = state, [{:headers, ref, re... method handle_responses (line 169) | defp handle_responses(%{request_ref: ref} = state, [{:done, ref} | res... method handle_responses (line 199) | defp handle_responses(state, [_response | rest]), do: handle_responses... method handle_responses (line 201) | defp handle_responses(state, []), do: state method handle_frames (line 203) | defp handle_frames(state, frames) do method stream_frame (line 240) | defp stream_frame(state, frame) do method reply (line 255) | defp reply(state, response) do method serialize_msg (line 260) | defp serialize_msg(msg, %{serializer: :noop} = state), do: {msg, state} method serialize_msg (line 262) | defp serialize_msg(%Message{payload: {:binary, _}} = msg, %{ref: ref} ... method serialize_msg (line 268) | defp serialize_msg(%Message{} = msg, %{ref: ref} = state) do method serialize_msg (line 274) | defp serialize_msg(msg, state), do: {msg, state} method join_ref_for (line 276) | defp join_ref_for( method join_ref_for (line 284) | defp join_ref_for(%{topic: topic}, %{topics: topics} = state) do method encode! (line 288) | defp encode!(map, state) do method binary_encode_push! (line 293) | defp binary_encode_push!(%Message{payload: {:binary, data}} = msg) do method binary_decode (line 316) | defp binary_decode(<< method binary_decode (line 330) | defp binary_decode(<<