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

supabase / supavisor / e5e7ebfe80dbec4965226225050d4ef5c8216e88-PR-605

21 Feb 2025 02:35PM UTC coverage: 45.973% (-0.03%) from 46.003%
e5e7ebfe80dbec4965226225050d4ef5c8216e88-PR-605

Pull #605

github

hauleth
fix: remaining SSL connections that need to set `verify_none` option
Pull Request #605: fix: remaining SSL connections that need to set `verify_none` option

2 of 9 new or added lines in 3 files covered. (22.22%)

267 existing lines in 26 files now uncovered.

959 of 2086 relevant lines covered (45.97%)

635.02 hits per line

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

38.46
/lib/supavisor_web/controllers/metrics_controller.ex
1
defmodule SupavisorWeb.MetricsController do
2
  @moduledoc """
3
  Handles requests for Prometheus metrics
4
  from all nodes in the cluster.
5
  """
6

7
  use SupavisorWeb, :controller
8
  require Logger
9
  alias Supavisor.Monitoring.PromEx
10

11
  @spec index(Plug.Conn.t(), any()) :: Plug.Conn.t()
12
  def index(conn, _) do
UNCOV
13
    cluster_metrics = fetch_cluster_metrics()
1✔
14

15
    conn
16
    |> put_resp_content_type("text/plain")
UNCOV
17
    |> send_resp(200, cluster_metrics)
1✔
18
  end
19

20
  def tenant(conn, %{"external_id" => ext_id}) do
21
    cluster_metrics = fetch_cluster_metrics(ext_id)
×
22
    code = if cluster_metrics == "", do: 404, else: 200
×
23

24
    conn
25
    |> put_resp_content_type("text/plain")
26
    |> send_resp(code, [cluster_metrics, "\n"])
×
27
  end
28

29
  @spec fetch_cluster_metrics() :: String.t()
30
  def fetch_cluster_metrics do
31
    Node.list()
32
    |> Task.async_stream(&fetch_node_metrics/1, timeout: :infinity)
UNCOV
33
    |> Enum.reduce(PromEx.get_metrics(), &merge_node_metrics/2)
1✔
34
  end
35

36
  @spec fetch_node_metrics(atom()) :: {atom(), term()}
UNCOV
37
  def fetch_node_metrics(node) do
1✔
38
    {node, :rpc.call(node, PromEx, :get_metrics, [], 25_000)}
39
  end
40

41
  @spec fetch_cluster_metrics(String.t()) :: String.t()
42
  def fetch_cluster_metrics(tenant) do
43
    Node.list()
44
    |> Task.async_stream(&fetch_node_metrics(&1, tenant), timeout: :infinity)
×
45
    |> Enum.reduce(PromEx.get_tenant_metrics(tenant), &merge_node_metrics/2)
×
46
  end
47

48
  @spec fetch_node_metrics(atom(), String.t()) :: {atom(), term()}
49
  def fetch_node_metrics(node, tenant) do
×
50
    {node, :rpc.call(node, PromEx, :get_tenant_metrics, [tenant], 25_000)}
51
  end
52

53
  def merge_node_metrics({_, {node, {:badrpc, reason}}}, acc) do
54
    Logger.error("Cannot fetch metrics from the node #{inspect(node)} because #{inspect(reason)}")
×
55
    acc
×
56
  end
57

UNCOV
58
  def merge_node_metrics({_, {_node, metrics}}, acc) do
1✔
59
    [metrics, "\n" | acc]
60
  end
61
end
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc