Skip to content

Commit

Permalink
Do not start telemetry_poller when no metric exports are configured (#…
Browse files Browse the repository at this point in the history
…2190)

While I was testing the shut down of `Electric.Connection.Supervisor`, I
saw errors getting logged when one of telemetry_poller's probes timed
out on a `GenServer.call()` to the connection manager. The thing is, we
didn't even need telemetry poller running in that scenario.
  • Loading branch information
alco authored Dec 24, 2024
1 parent 84eb729 commit bfdbd49
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 4 deletions.
12 changes: 12 additions & 0 deletions packages/sync-service/lib/electric/config.ex
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,18 @@ defmodule Electric.Config do
Application.fetch_env!(:electric, key)
end

@doc """
True when at least one metric exporter is enabled.
This function is used to skip starting the Electric.Telemetry supervisor when there's no need
to capture periodic measurements. Useful in the dev and test environments.
"""
def telemetry_export_enabled? do
not is_nil(Electric.Config.get_env(:telemetry_statsd_host)) or
not is_nil(Electric.Config.get_env(:prometheus_port)) or
Electric.Config.get_env(:call_home_telemetry?)
end

@doc ~S"""
Parse a PostgreSQL URI into a keyword list.
Expand Down
12 changes: 8 additions & 4 deletions packages/sync-service/lib/electric/telemetry.ex
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,17 @@ defmodule Electric.Telemetry do
require Logger

def start_link(init_arg) do
Supervisor.start_link(__MODULE__, init_arg, name: __MODULE__)
if Electric.Config.telemetry_export_enabled?() do
Supervisor.start_link(__MODULE__, init_arg, name: __MODULE__)
else
# Avoid starting the telemetry supervisor and its telemetry_poller child if we're not
# intending to export periodic measurements metrics anywhere.
:ignore
end
end

def init(opts) do
system_metrics_poll_interval =
Electric.Config.get_env(:system_metrics_poll_interval)

system_metrics_poll_interval = Electric.Config.get_env(:system_metrics_poll_interval)
statsd_host = Electric.Config.get_env(:telemetry_statsd_host)
prometheus? = not is_nil(Electric.Config.get_env(:prometheus_port))
call_home_telemetry? = Electric.Config.get_env(:call_home_telemetry?)
Expand Down

0 comments on commit bfdbd49

Please sign in to comment.