diff options
| author | Mark Felder <feld@feld.me> | 2022-11-02 22:49:55 -0400 | 
|---|---|---|
| committer | Mark Felder <feld@feld.me> | 2023-11-13 15:34:59 -0500 | 
| commit | 66cb3294ed942d461cabc32881e2a10ebfd182af (patch) | |
| tree | 3ebc0620d5dce16a4da8dca8cf3bfac1e7253d94 | |
| parent | 752bc168f6877e6a3ce2e2e508ec50069e9c1f61 (diff) | |
| download | pleroma-66cb3294ed942d461cabc32881e2a10ebfd182af.tar.gz pleroma-66cb3294ed942d461cabc32881e2a10ebfd182af.zip | |
Switch to PromEx for prometheus metrics
Recommending use of the separate HTTP server for exposing the metrics
and securing it externally on your firewall or reverse proxy. It will
listen on port 4021 by default.
| -rw-r--r-- | changelog.d/promex.add | 1 | ||||
| -rw-r--r-- | config/config.exs | 26 | ||||
| -rw-r--r-- | lib/pleroma/application.ex | 25 | ||||
| -rw-r--r-- | lib/pleroma/config/transfer_task.ex | 3 | ||||
| -rw-r--r-- | lib/pleroma/prom_ex.ex | 49 | ||||
| -rw-r--r-- | lib/pleroma/repo.ex | 2 | ||||
| -rw-r--r-- | lib/pleroma/web/endpoint.ex | 41 | ||||
| -rw-r--r-- | mix.exs | 15 | ||||
| -rw-r--r-- | mix.lock | 9 | ||||
| -rw-r--r-- | test/pleroma/web/endpoint/metrics_exporter_test.exs | 69 | 
10 files changed, 79 insertions, 161 deletions
| diff --git a/changelog.d/promex.add b/changelog.d/promex.add new file mode 100644 index 000000000..1daaf7e4e --- /dev/null +++ b/changelog.d/promex.add @@ -0,0 +1 @@ +Add PromEx to replace the prometheus library diff --git a/config/config.exs b/config/config.exs index f2c137872..e2fc12480 100644 --- a/config/config.exs +++ b/config/config.exs @@ -648,12 +648,26 @@ config :pleroma, Pleroma.Emails.UserEmail,  config :pleroma, Pleroma.Emails.NewUsersDigestEmail, enabled: false -config :prometheus, Pleroma.Web.Endpoint.MetricsExporter, -  enabled: false, -  auth: false, -  ip_whitelist: [], -  path: "/api/pleroma/app_metrics", -  format: :text +config :pleroma, Pleroma.PromEx, +  disabled: false, +  manual_metrics_start_delay: :no_delay, +  drop_metrics_groups: [], +  grafana: [ +    host: System.get_env("GRAFANA_HOST", "http://localhost:3000"), +    auth_token: System.get_env("GRAFANA_TOKEN"), +    upload_dashboards_on_start: false, +    folder_name: "BEAM", +    annotate_app_lifecycle: true +  ], +  metrics_server: [ +    port: 4021, +    path: "/metrics", +    protocol: :http, +    pool_size: 5, +    cowboy_opts: [], +    auth_strategy: :none +  ], +  datasource: "Prometheus"  config :pleroma, Pleroma.ScheduledActivity,    daily_user_limit: 25, diff --git a/lib/pleroma/application.ex b/lib/pleroma/application.ex index 7bbc132f1..52cd6e9a9 100644 --- a/lib/pleroma/application.ex +++ b/lib/pleroma/application.ex @@ -54,7 +54,6 @@ defmodule Pleroma.Application do      Config.DeprecationWarnings.warn()      Pleroma.Web.Plugs.HTTPSecurityPlug.warn_if_disabled()      Pleroma.ApplicationRequirements.verify!() -    setup_instrumenters()      load_custom_modules()      Pleroma.Docs.JSON.compile()      limiters_setup() @@ -91,6 +90,7 @@ defmodule Pleroma.Application do      # Define workers and child supervisors to be supervised      children =        [ +        Pleroma.PromEx,          Pleroma.Repo,          Config.TransferTask,          Pleroma.Emoji, @@ -170,29 +170,6 @@ defmodule Pleroma.Application do      end    end -  defp setup_instrumenters do -    require Prometheus.Registry - -    if Application.get_env(:prometheus, Pleroma.Repo.Instrumenter) do -      :ok = -        :telemetry.attach( -          "prometheus-ecto", -          [:pleroma, :repo, :query], -          &Pleroma.Repo.Instrumenter.handle_event/4, -          %{} -        ) - -      Pleroma.Repo.Instrumenter.setup() -    end - -    Pleroma.Web.Endpoint.MetricsExporter.setup() -    Pleroma.Web.Endpoint.PipelineInstrumenter.setup() - -    # Note: disabled until prometheus-phx is integrated into prometheus-phoenix: -    # Pleroma.Web.Endpoint.Instrumenter.setup() -    PrometheusPhx.setup() -  end -    defp cachex_children do      [        build_cachex("used_captcha", ttl_interval: seconds_valid_interval()), diff --git a/lib/pleroma/config/transfer_task.ex b/lib/pleroma/config/transfer_task.ex index 44a984019..6fd05b0e0 100644 --- a/lib/pleroma/config/transfer_task.ex +++ b/lib/pleroma/config/transfer_task.ex @@ -55,8 +55,7 @@ defmodule Pleroma.Config.TransferTask do        started_applications = Application.started_applications() -      # TODO: some problem with prometheus after restart! -      reject = [nil, :prometheus, :postgrex] +      reject = [nil, :postgrex]        reject =          if restart_pleroma? do diff --git a/lib/pleroma/prom_ex.ex b/lib/pleroma/prom_ex.ex new file mode 100644 index 000000000..6608708b7 --- /dev/null +++ b/lib/pleroma/prom_ex.ex @@ -0,0 +1,49 @@ +defmodule Pleroma.PromEx do +  use PromEx, otp_app: :pleroma + +  alias PromEx.Plugins + +  @impl true +  def plugins do +    [ +      # PromEx built in plugins +      Plugins.Application, +      Plugins.Beam, +      {Plugins.Phoenix, router: Pleroma.Web.Router, endpoint: Pleroma.Web.Endpoint}, +      Plugins.Ecto, +      Plugins.Oban +      # Plugins.PhoenixLiveView, +      # Plugins.Absinthe, +      # Plugins.Broadway, + +      # Add your own PromEx metrics plugins +      # Pleroma.Users.PromExPlugin +    ] +  end + +  @impl true +  def dashboard_assigns do +    [ +      datasource_id: Pleroma.Config.get([Pleroma.PromEx, :datasource]), +      default_selected_interval: "30s" +    ] +  end + +  @impl true +  def dashboards do +    [ +      # PromEx built in Grafana dashboards +      {:prom_ex, "application.json"}, +      {:prom_ex, "beam.json"}, +      {:prom_ex, "phoenix.json"}, +      {:prom_ex, "ecto.json"}, +      {:prom_ex, "oban.json"} +      # {:prom_ex, "phoenix_live_view.json"}, +      # {:prom_ex, "absinthe.json"}, +      # {:prom_ex, "broadway.json"}, + +      # Add your dashboard definitions here with the format: {:otp_app, "path_in_priv"} +      # {:pleroma, "/grafana_dashboards/user_metrics.json"} +    ] +  end +end diff --git a/lib/pleroma/repo.ex b/lib/pleroma/repo.ex index 515b0c1ff..a50a59b3b 100644 --- a/lib/pleroma/repo.ex +++ b/lib/pleroma/repo.ex @@ -11,8 +11,6 @@ defmodule Pleroma.Repo do    import Ecto.Query    require Logger -  defmodule Instrumenter, do: use(Prometheus.EctoInstrumenter) -    @doc """    Dynamically loads the repository url from the    DATABASE_URL environment variable. diff --git a/lib/pleroma/web/endpoint.ex b/lib/pleroma/web/endpoint.ex index 65dd72c49..307fa069e 100644 --- a/lib/pleroma/web/endpoint.ex +++ b/lib/pleroma/web/endpoint.ex @@ -151,47 +151,6 @@ defmodule Pleroma.Web.Endpoint do    plug(Pleroma.Web.Plugs.RemoteIp) -  defmodule Instrumenter do -    use Prometheus.PhoenixInstrumenter -  end - -  defmodule PipelineInstrumenter do -    use Prometheus.PlugPipelineInstrumenter -  end - -  defmodule MetricsExporter do -    use Prometheus.PlugExporter -  end - -  defmodule MetricsExporterCaller do -    @behaviour Plug - -    def init(opts), do: opts - -    def call(conn, opts) do -      prometheus_config = Application.get_env(:prometheus, MetricsExporter, []) -      ip_whitelist = List.wrap(prometheus_config[:ip_whitelist]) - -      cond do -        !prometheus_config[:enabled] -> -          conn - -        ip_whitelist != [] and -            !Enum.find(ip_whitelist, fn ip -> -              Pleroma.Helpers.InetHelper.parse_address(ip) == {:ok, conn.remote_ip} -            end) -> -          conn - -        true -> -          MetricsExporter.call(conn, opts) -      end -    end -  end - -  plug(PipelineInstrumenter) - -  plug(MetricsExporterCaller) -    plug(Pleroma.Web.Router)    @doc """ @@ -140,7 +140,7 @@ defmodule Pleroma.Mixfile do        {:castore, "~> 0.1"},        {:cowlib, "~> 2.9", override: true},        {:gun, "~> 2.0.0-rc.1", override: true}, -      {:finch, "~> 0.10.0"}, +      {:finch, "~> 0.15"},        {:jason, "~> 1.2"},        {:mogrify, "~> 0.9.1"},        {:ex_aws, "~> 2.1.6"}, @@ -163,18 +163,7 @@ defmodule Pleroma.Mixfile do        {:http_signatures, "~> 0.1.1"},        {:telemetry, "~> 1.0.0", override: true},        {:poolboy, "~> 1.5"}, -      {:prometheus, "~> 4.6"}, -      {:prometheus_ex, -       git: "https://github.com/lanodan/prometheus.ex.git", -       branch: "fix/elixir-1.14", -       override: true}, -      {:prometheus_plugs, "~> 1.1"}, -      {:prometheus_phoenix, "~> 1.3"}, -      # Note: once `prometheus_phx` is integrated into `prometheus_phoenix`, remove the former: -      {:prometheus_phx, -       git: "https://git.pleroma.social/pleroma/elixir-libraries/prometheus-phx.git", -       branch: "no-logging"}, -      {:prometheus_ecto, "~> 1.4"}, +      {:prom_ex, "~> 1.9"},        {:recon, "~> 2.5"},        {:joken, "~> 2.0"},        {:pot, "~> 1.0"}, @@ -46,7 +46,7 @@    "fast_html": {:hex, :fast_html, "2.0.5", "c61760340606c1077ff1f196f17834056cb1dd3d5cb92a9f2cabf28bc6221c3c", [:make, :mix], [{:elixir_make, "~> 0.4", [hex: :elixir_make, repo: "hexpm", optional: false]}, {:nimble_pool, "~> 0.2.0", [hex: :nimble_pool, repo: "hexpm", optional: false]}], "hexpm", "605f4f4829443c14127694ebabb681778712ceecb4470ec32aa31012330e6506"},    "fast_sanitize": {:hex, :fast_sanitize, "0.2.3", "67b93dfb34e302bef49fec3aaab74951e0f0602fd9fa99085987af05bd91c7a5", [:mix], [{:fast_html, "~> 2.0", [hex: :fast_html, repo: "hexpm", optional: false]}, {:plug, "~> 1.8", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "e8ad286d10d0386e15d67d0ee125245ebcfbc7d7290b08712ba9013c8c5e56e2"},    "file_system": {:hex, :file_system, "0.2.10", "fb082005a9cd1711c05b5248710f8826b02d7d1784e7c3451f9c1231d4fc162d", [:mix], [], "hexpm", "41195edbfb562a593726eda3b3e8b103a309b733ad25f3d642ba49696bf715dc"}, -  "finch": {:hex, :finch, "0.10.2", "9ad27d68270d879f73f26604bb2e573d40f29bf0e907064a9a337f90a16a0312", [:mix], [{:castore, "~> 0.1", [hex: :castore, repo: "hexpm", optional: false]}, {:mint, "~> 1.3", [hex: :mint, repo: "hexpm", optional: false]}, {:nimble_options, "~> 0.4.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:nimble_pool, "~> 0.2", [hex: :nimble_pool, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "dd8b11b282072cec2ef30852283949c248bd5d2820c88d8acc89402b81db7550"}, +  "finch": {:hex, :finch, "0.16.0", "40733f02c89f94a112518071c0a91fe86069560f5dbdb39f9150042f44dcfb1a", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: false]}, {:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mint, "~> 1.3", [hex: :mint, repo: "hexpm", optional: false]}, {:nimble_options, "~> 0.4 or ~> 1.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:nimble_pool, "~> 0.2.6 or ~> 1.0", [hex: :nimble_pool, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "f660174c4d519e5fec629016054d60edd822cdfe2b7270836739ac2f97735ec5"},    "flake_id": {:hex, :flake_id, "0.1.0", "7716b086d2e405d09b647121a166498a0d93d1a623bead243e1f74216079ccb3", [:mix], [{:base62, "~> 1.2", [hex: :base62, repo: "hexpm", optional: false]}, {:ecto, ">= 2.0.0", [hex: :ecto, repo: "hexpm", optional: true]}], "hexpm", "31fc8090fde1acd267c07c36ea7365b8604055f897d3a53dd967658c691bd827"},    "floki": {:hex, :floki, "0.34.3", "5e2dcaec5d7c228ce5b1d3501502e308b2d79eb655e4191751a1fe491c37feac", [:mix], [], "hexpm", "9577440eea5b97924b4bf3c7ea55f7b8b6dce589f9b28b096cc294a8dc342341"},    "gen_smtp": {:hex, :gen_smtp, "0.15.0", "9f51960c17769b26833b50df0b96123605a8024738b62db747fece14eb2fbfcc", [:rebar3], [], "hexpm", "29bd14a88030980849c7ed2447b8db6d6c9278a28b11a44cafe41b791205440f"}, @@ -77,11 +77,12 @@    "mock": {:hex, :mock, "0.3.8", "7046a306b71db2488ef54395eeb74df0a7f335a7caca4a3d3875d1fc81c884dd", [:mix], [{:meck, "~> 0.9.2", [hex: :meck, repo: "hexpm", optional: false]}], "hexpm", "7fa82364c97617d79bb7d15571193fc0c4fe5afd0c932cef09426b3ee6fe2022"},    "mogrify": {:hex, :mogrify, "0.9.3", "238c782f00271dace01369ad35ae2e9dd020feee3443b9299ea5ea6bed559841", [:mix], [], "hexpm", "0189b1e1de27455f2b9ae8cf88239cefd23d38de9276eb5add7159aea51731e6"},    "mox": {:hex, :mox, "1.0.2", "dc2057289ac478b35760ba74165b4b3f402f68803dd5aecd3bfd19c183815d64", [:mix], [], "hexpm", "f9864921b3aaf763c8741b5b8e6f908f44566f1e427b2630e89e9a73b981fef2"}, -  "nimble_options": {:hex, :nimble_options, "0.4.0", "c89babbab52221a24b8d1ff9e7d838be70f0d871be823165c94dd3418eea728f", [:mix], [], "hexpm", "e6701c1af326a11eea9634a3b1c62b475339ace9456c1a23ec3bc9a847bca02d"}, +  "nimble_options": {:hex, :nimble_options, "1.0.2", "92098a74df0072ff37d0c12ace58574d26880e522c22801437151a159392270e", [:mix], [], "hexpm", "fd12a8db2021036ce12a309f26f564ec367373265b53e25403f0ee697380f1b8"},    "nimble_parsec": {:hex, :nimble_parsec, "0.6.0", "32111b3bf39137144abd7ba1cce0914533b2d16ef35e8abc5ec8be6122944263", [:mix], [], "hexpm", "27eac315a94909d4dc68bc07a4a83e06c8379237c5ea528a9acff4ca1c873c52"},    "nimble_pool": {:hex, :nimble_pool, "0.2.6", "91f2f4c357da4c4a0a548286c84a3a28004f68f05609b4534526871a22053cde", [:mix], [], "hexpm", "1c715055095d3f2705c4e236c18b618420a35490da94149ff8b580a2144f653f"},    "nodex": {:git, "https://git.pleroma.social/pleroma/nodex", "cb6730f943cfc6aad674c92161be23a8411f15d1", [ref: "cb6730f943cfc6aad674c92161be23a8411f15d1"]},    "oban": {:hex, :oban, "2.13.6", "a0cb1bce3bd393770512231fb5a3695fa19fd3af10d7575bf73f837aee7abf43", [:mix], [{:ecto_sql, "~> 3.6", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.16", [hex: :postgrex, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "3c1c5eb16f377b3cbbf2ea14be24d20e3d91285af9d1ac86260b7c2af5464887"}, +  "octo_fetch": {:hex, :octo_fetch, "0.3.0", "89ff501d2ac0448556ff1931634a538fe6d6cd358ba827ce1747e6a42a46efbf", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: false]}], "hexpm", "c07e44f2214ab153743b7b3182f380798d0b294b1f283811c1e30cff64096d3d"},    "open_api_spex": {:hex, :open_api_spex, "3.17.3", "ada8e352eb786050dd639db2439d3316e92f3798eb2abd051f55bb9af825b37e", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}, {:poison, "~> 3.0 or ~> 4.0 or ~> 5.0", [hex: :poison, repo: "hexpm", optional: true]}, {:ymlr, "~> 2.0 or ~> 3.0", [hex: :ymlr, repo: "hexpm", optional: true]}], "hexpm", "165db21a85ca83cffc8e7c8890f35b354eddda8255de7404a2848ed652b9f0fe"},    "parse_trans": {:hex, :parse_trans, "3.3.1", "16328ab840cc09919bd10dab29e431da3af9e9e7e7e6f0089dd5a2d2820011d8", [:rebar3], [], "hexpm", "07cd9577885f56362d414e8c4c4e6bdf10d43a8767abb92d24cbe8b24c54888b"},    "pbkdf2_elixir": {:hex, :pbkdf2_elixir, "1.2.1", "9cbe354b58121075bd20eb83076900a3832324b7dd171a6895fab57b6bb2752c", [:mix], [{:comeonin, "~> 5.3", [hex: :comeonin, repo: "hexpm", optional: false]}], "hexpm", "d3b40a4a4630f0b442f19eca891fcfeeee4c40871936fed2f68e1c4faa30481f"}, @@ -103,7 +104,7 @@    "poolboy": {:hex, :poolboy, "1.5.2", "392b007a1693a64540cead79830443abf5762f5d30cf50bc95cb2c1aaafa006b", [:rebar3], [], "hexpm", "dad79704ce5440f3d5a3681c8590b9dc25d1a561e8f5a9c995281012860901e3"},    "postgrex": {:hex, :postgrex, "0.17.3", "c92cda8de2033a7585dae8c61b1d420a1a1322421df84da9a82a6764580c503d", [:mix], [{:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.5 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:table, "~> 0.1.0", [hex: :table, repo: "hexpm", optional: true]}], "hexpm", "946cf46935a4fdca7a81448be76ba3503cff082df42c6ec1ff16a4bdfbfb098d"},    "pot": {:hex, :pot, "1.0.2", "13abb849139fdc04ab8154986abbcb63bdee5de6ed2ba7e1713527e33df923dd", [:rebar3], [], "hexpm", "78fe127f5a4f5f919d6ea5a2a671827bd53eb9d37e5b4128c0ad3df99856c2e0"}, -  "prom_ex": {:hex, :prom_ex, "1.7.1", "39331ee3fe6f9a8587d8208bf9274a253bb80281700e127dd18786cda5e08c37", [:mix], [{:absinthe, ">= 1.6.0", [hex: :absinthe, repo: "hexpm", optional: true]}, {:broadway, ">= 1.0.2", [hex: :broadway, repo: "hexpm", optional: true]}, {:ecto, ">= 3.5.0", [hex: :ecto, repo: "hexpm", optional: true]}, {:finch, "~> 0.10.2", [hex: :finch, repo: "hexpm", optional: false]}, {:jason, "~> 1.2", [hex: :jason, repo: "hexpm", optional: false]}, {:oban, ">= 2.4.0", [hex: :oban, repo: "hexpm", optional: true]}, {:phoenix, ">= 1.5.0", [hex: :phoenix, repo: "hexpm", optional: true]}, {:phoenix_live_view, ">= 0.14.0", [hex: :phoenix_live_view, repo: "hexpm", optional: true]}, {:plug, ">= 1.12.1", [hex: :plug, repo: "hexpm", optional: true]}, {:plug_cowboy, "~> 2.5.1", [hex: :plug_cowboy, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.0.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:telemetry_metrics, "~> 0.6.1", [hex: :telemetry_metrics, repo: "hexpm", optional: false]}, {:telemetry_metrics_prometheus_core, "~> 1.0.2", [hex: :telemetry_metrics_prometheus_core, repo: "hexpm", optional: false]}, {:telemetry_poller, "~> 1.0.0", [hex: :telemetry_poller, repo: "hexpm", optional: false]}], "hexpm", "4c978872b88a929833925a0f4d0561824804c671fdd04581e765509ed0a6ed08"}, +  "prom_ex": {:hex, :prom_ex, "1.9.0", "63e6dda6c05cdeec1f26c48443dcc38ffd2118b3665ae8d2bd0e5b79f2aea03e", [:mix], [{:absinthe, ">= 1.6.0", [hex: :absinthe, repo: "hexpm", optional: true]}, {:broadway, ">= 1.0.2", [hex: :broadway, repo: "hexpm", optional: true]}, {:ecto, ">= 3.5.0", [hex: :ecto, repo: "hexpm", optional: true]}, {:finch, "~> 0.15", [hex: :finch, repo: "hexpm", optional: false]}, {:jason, "~> 1.2", [hex: :jason, repo: "hexpm", optional: false]}, {:oban, ">= 2.4.0", [hex: :oban, repo: "hexpm", optional: true]}, {:octo_fetch, "~> 0.3", [hex: :octo_fetch, repo: "hexpm", optional: false]}, {:phoenix, ">= 1.5.0", [hex: :phoenix, repo: "hexpm", optional: true]}, {:phoenix_live_view, ">= 0.14.0", [hex: :phoenix_live_view, repo: "hexpm", optional: true]}, {:plug, ">= 1.12.1", [hex: :plug, repo: "hexpm", optional: true]}, {:plug_cowboy, "~> 2.5", [hex: :plug_cowboy, repo: "hexpm", optional: false]}, {:telemetry, ">= 1.0.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:telemetry_metrics, "~> 0.6", [hex: :telemetry_metrics, repo: "hexpm", optional: false]}, {:telemetry_metrics_prometheus_core, "~> 1.0", [hex: :telemetry_metrics_prometheus_core, repo: "hexpm", optional: false]}, {:telemetry_poller, "~> 1.0", [hex: :telemetry_poller, repo: "hexpm", optional: false]}], "hexpm", "01f3d4f69ec93068219e686cc65e58a29c42bea5429a8ff4e2121f19db178ee6"},    "prometheus": {:hex, :prometheus, "4.10.0", "792adbf0130ff61b5fa8826f013772af24b6e57b984445c8d602c8a0355704a1", [:mix, :rebar3], [{:quantile_estimator, "~> 0.2.1", [hex: :quantile_estimator, repo: "hexpm", optional: false]}], "hexpm", "2a99bb6dce85e238c7236fde6b0064f9834dc420ddbd962aac4ea2a3c3d59384"},    "prometheus_ecto": {:hex, :prometheus_ecto, "1.4.3", "3dd4da1812b8e0dbee81ea58bb3b62ed7588f2eae0c9e97e434c46807ff82311", [:mix], [{:ecto, "~> 2.0 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:prometheus_ex, "~> 1.1 or ~> 2.0 or ~> 3.0", [hex: :prometheus_ex, repo: "hexpm", optional: false]}], "hexpm", "8d66289f77f913b37eda81fd287340c17e61a447549deb28efc254532b2bed82"},    "prometheus_ex": {:git, "https://github.com/lanodan/prometheus.ex.git", "31f7fbe4b71b79ba27efc2a5085746c4011ceb8f", [branch: "fix/elixir-1.14"]}, @@ -123,7 +124,7 @@    "table_rex": {:hex, :table_rex, "3.1.1", "0c67164d1714b5e806d5067c1e96ff098ba7ae79413cc075973e17c38a587caa", [:mix], [], "hexpm", "678a23aba4d670419c23c17790f9dcd635a4a89022040df7d5d772cb21012490"},    "telemetry": {:hex, :telemetry, "1.0.0", "0f453a102cdf13d506b7c0ab158324c337c41f1cc7548f0bc0e130bbf0ae9452", [:rebar3], [], "hexpm", "73bc09fa59b4a0284efb4624335583c528e07ec9ae76aca96ea0673850aec57a"},    "telemetry_metrics": {:hex, :telemetry_metrics, "0.6.1", "315d9163a1d4660aedc3fee73f33f1d355dcc76c5c3ab3d59e76e3edf80eef1f", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7be9e0871c41732c233be71e4be11b96e56177bf15dde64a8ac9ce72ac9834c6"}, -  "telemetry_metrics_prometheus_core": {:hex, :telemetry_metrics_prometheus_core, "1.0.2", "c98b1c580de637bfeac00db41b9fb91fb4c3548ee3d512a8ed7299172312eaf3", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:telemetry_metrics, "~> 0.6", [hex: :telemetry_metrics, repo: "hexpm", optional: false]}], "hexpm", "48351a0d56f80e38c997b44232b1043e0a081670d16766eee920e6254175b730"}, +  "telemetry_metrics_prometheus_core": {:hex, :telemetry_metrics_prometheus_core, "1.1.0", "4e15f6d7dbedb3a4e3aed2262b7e1407f166fcb9c30ca3f96635dfbbef99965c", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:telemetry_metrics, "~> 0.6", [hex: :telemetry_metrics, repo: "hexpm", optional: false]}], "hexpm", "0dd10e7fe8070095df063798f82709b0a1224c31b8baf6278b423898d591a069"},    "telemetry_poller": {:hex, :telemetry_poller, "1.0.0", "db91bb424e07f2bb6e73926fcafbfcbcb295f0193e0a00e825e589a0a47e8453", [:rebar3], [{:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "b3a24eafd66c3f42da30fc3ca7dda1e9d546c12250a2d60d7b81d264fbec4f6e"},    "tesla": {:hex, :tesla, "1.4.4", "bb89aa0c9745190930366f6a2ac612cdf2d0e4d7fff449861baa7875afd797b2", [:mix], [{:castore, "~> 0.1", [hex: :castore, repo: "hexpm", optional: true]}, {:exjsx, ">= 3.0.0", [hex: :exjsx, repo: "hexpm", optional: true]}, {:finch, "~> 0.3", [hex: :finch, repo: "hexpm", optional: true]}, {:fuse, "~> 2.4", [hex: :fuse, repo: "hexpm", optional: true]}, {:gun, "~> 1.3", [hex: :gun, repo: "hexpm", optional: true]}, {:hackney, "~> 1.6", [hex: :hackney, repo: "hexpm", optional: true]}, {:ibrowse, "4.4.0", [hex: :ibrowse, repo: "hexpm", optional: true]}, {:jason, ">= 1.0.0", [hex: :jason, repo: "hexpm", optional: true]}, {:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mint, "~> 1.0", [hex: :mint, repo: "hexpm", optional: true]}, {:poison, ">= 1.0.0", [hex: :poison, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: true]}], "hexpm", "d5503a49f9dec1b287567ea8712d085947e247cb11b06bc54adb05bfde466457"},    "timex": {:hex, :timex, "3.7.7", "3ed093cae596a410759104d878ad7b38e78b7c2151c6190340835515d4a46b8a", [:mix], [{:combine, "~> 0.10", [hex: :combine, repo: "hexpm", optional: false]}, {:gettext, "~> 0.10", [hex: :gettext, repo: "hexpm", optional: false]}, {:tzdata, "~> 1.0", [hex: :tzdata, repo: "hexpm", optional: false]}], "hexpm", "0ec4b09f25fe311321f9fc04144a7e3affe48eb29481d7a5583849b6c4dfa0a7"}, diff --git a/test/pleroma/web/endpoint/metrics_exporter_test.exs b/test/pleroma/web/endpoint/metrics_exporter_test.exs deleted file mode 100644 index ad236d4cb..000000000 --- a/test/pleroma/web/endpoint/metrics_exporter_test.exs +++ /dev/null @@ -1,69 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/> -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.Endpoint.MetricsExporterTest do -  # Modifies AppEnv, has to stay synchronous -  use Pleroma.Web.ConnCase - -  alias Pleroma.Web.Endpoint.MetricsExporter - -  defp config do -    Application.get_env(:prometheus, MetricsExporter) -  end - -  describe "with default config" do -    test "does NOT expose app metrics", %{conn: conn} do -      conn -      |> get(config()[:path]) -      |> json_response(404) -    end -  end - -  describe "when enabled" do -    setup do -      initial_config = config() -      on_exit(fn -> Application.put_env(:prometheus, MetricsExporter, initial_config) end) - -      Application.put_env( -        :prometheus, -        MetricsExporter, -        Keyword.put(initial_config, :enabled, true) -      ) -    end - -    test "serves app metrics", %{conn: conn} do -      conn = get(conn, config()[:path]) -      assert response = response(conn, 200) - -      for metric <- [ -            "http_requests_total", -            "http_request_duration_microseconds", -            "phoenix_controller_call_duration", -            "telemetry_scrape_duration", -            "erlang_vm_memory_atom_bytes_total" -          ] do -        assert response =~ ~r/#{metric}/ -      end -    end - -    test "when IP whitelist configured, " <> -           "serves app metrics only if client IP is whitelisted", -         %{conn: conn} do -      Application.put_env( -        :prometheus, -        MetricsExporter, -        Keyword.put(config(), :ip_whitelist, ["127.127.127.127", {1, 1, 1, 1}, '255.255.255.255']) -      ) - -      conn -      |> get(config()[:path]) -      |> json_response(404) - -      conn -      |> Map.put(:remote_ip, {127, 127, 127, 127}) -      |> get(config()[:path]) -      |> response(200) -    end -  end -end | 
