Edit

kmx.io/kmxgit/lib/kmxgit_web/telemetry.ex

Branch :

  • lib/kmxgit_web/telemetry.ex
  • ## kmxgit
    ## Copyright 2022 kmx.io <contact@kmx.io>
    ##
    ## Permission is hereby granted to use this software granted
    ## the above copyright notice and this permission paragraph
    ## are included in all copies and substantial portions of this
    ## software.
    ##
    ## THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
    ## PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
    ## AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
    ## THIS SOFTWARE.
    
    defmodule KmxgitWeb.Telemetry do
      use Supervisor
      import Telemetry.Metrics
    
      def start_link(arg) do
        Supervisor.start_link(__MODULE__, arg, name: __MODULE__)
      end
    
      @impl true
      def init(_arg) do
        children = [
          # Telemetry poller will execute the given period measurements
          # every 10_000ms. Learn more here: https://hexdocs.pm/telemetry_metrics
          {:telemetry_poller, measurements: periodic_measurements(), period: 10_000}
          # Add reporters as children of your supervision tree.
          # {Telemetry.Metrics.ConsoleReporter, metrics: metrics()}
        ]
    
        Supervisor.init(children, strategy: :one_for_one)
      end
    
      def metrics do
        [
          # Phoenix Metrics
          summary("phoenix.endpoint.stop.duration",
            unit: {:native, :millisecond}
          ),
          summary("phoenix.router_dispatch.stop.duration",
            tags: [:route],
            unit: {:native, :millisecond}
          ),
    
          # Database Metrics
          summary("kmxgit.repo.query.total_time",
            unit: {:native, :millisecond},
            description: "The sum of the other measurements"
          ),
          summary("kmxgit.repo.query.decode_time",
            unit: {:native, :millisecond},
            description: "The time spent decoding the data received from the database"
          ),
          summary("kmxgit.repo.query.query_time",
            unit: {:native, :millisecond},
            description: "The time spent executing the query"
          ),
          summary("kmxgit.repo.query.queue_time",
            unit: {:native, :millisecond},
            description: "The time spent waiting for a database connection"
          ),
          summary("kmxgit.repo.query.idle_time",
            unit: {:native, :millisecond},
            description:
              "The time the connection spent waiting before being checked out for the query"
          ),
    
          # VM Metrics
          summary("vm.memory.total", unit: {:byte, :kilobyte}),
          summary("vm.total_run_queue_lengths.total"),
          summary("vm.total_run_queue_lengths.cpu"),
          summary("vm.total_run_queue_lengths.io")
        ]
      end
    
      defp periodic_measurements do
        [
          # A module, function and arguments to be invoked periodically.
          # This function must call :telemetry.execute/3 and a metric must be added above.
          # {KmxgitWeb, :count_users, []}
        ]
      end
    end