{-# LANGUAGE OverloadedStrings #-}

-- | The names of the instruments arbiter registers.
module Arbiter.Otel.MetricNames
  ( MetricName (..)
  , metricName
  , arbiterMetricNames
  ) where

import Data.Text (Text)

-- | Every instrument the library registers.
data MetricName
  = -- Worker lifecycle
    JobsClaimed
  | JobsProcessed
  | JobsRetries
  | AdmissionAdmitted
  | MaintenanceRows
  | HandlerDuration
  | -- Queue depth
    QueueDepth
  | QueueDepthByKind
  | QueueOldestReadyAge
  | QueueOldestInFlightAge
  | Workers
  | -- Admission
    AdmissionKeys
  | AdmissionLimit
  | AdmissionInFlight
  | AdmissionBusiestKey
  | AdmissionTokens
  | -- Postgres health
    PgTableDeadTuples
  | PgTableLiveTuples
  | PgTableAutovacuumAge
  | PgTableSizeBytes
  | PgTableScans
  | PgTableBlocks
  | PgTableXidAge
  | PgDbConnections
  | PgDbBackends
  | PgDbOldestTransactionAge
  | PgDbOldestQueryAge
  | DbReachable
  | GaugesAge
  deriving stock (MetricName
MetricName -> MetricName -> Bounded MetricName
forall a. a -> a -> Bounded a
$cminBound :: MetricName
minBound :: MetricName
$cmaxBound :: MetricName
maxBound :: MetricName
Bounded, Int -> MetricName
MetricName -> Int
MetricName -> [MetricName]
MetricName -> MetricName
MetricName -> MetricName -> [MetricName]
MetricName -> MetricName -> MetricName -> [MetricName]
(MetricName -> MetricName)
-> (MetricName -> MetricName)
-> (Int -> MetricName)
-> (MetricName -> Int)
-> (MetricName -> [MetricName])
-> (MetricName -> MetricName -> [MetricName])
-> (MetricName -> MetricName -> [MetricName])
-> (MetricName -> MetricName -> MetricName -> [MetricName])
-> Enum MetricName
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: MetricName -> MetricName
succ :: MetricName -> MetricName
$cpred :: MetricName -> MetricName
pred :: MetricName -> MetricName
$ctoEnum :: Int -> MetricName
toEnum :: Int -> MetricName
$cfromEnum :: MetricName -> Int
fromEnum :: MetricName -> Int
$cenumFrom :: MetricName -> [MetricName]
enumFrom :: MetricName -> [MetricName]
$cenumFromThen :: MetricName -> MetricName -> [MetricName]
enumFromThen :: MetricName -> MetricName -> [MetricName]
$cenumFromTo :: MetricName -> MetricName -> [MetricName]
enumFromTo :: MetricName -> MetricName -> [MetricName]
$cenumFromThenTo :: MetricName -> MetricName -> MetricName -> [MetricName]
enumFromThenTo :: MetricName -> MetricName -> MetricName -> [MetricName]
Enum, MetricName -> MetricName -> Bool
(MetricName -> MetricName -> Bool)
-> (MetricName -> MetricName -> Bool) -> Eq MetricName
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: MetricName -> MetricName -> Bool
== :: MetricName -> MetricName -> Bool
$c/= :: MetricName -> MetricName -> Bool
/= :: MetricName -> MetricName -> Bool
Eq, Int -> MetricName -> ShowS
[MetricName] -> ShowS
MetricName -> String
(Int -> MetricName -> ShowS)
-> (MetricName -> String)
-> ([MetricName] -> ShowS)
-> Show MetricName
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> MetricName -> ShowS
showsPrec :: Int -> MetricName -> ShowS
$cshow :: MetricName -> String
show :: MetricName -> String
$cshowList :: [MetricName] -> ShowS
showList :: [MetricName] -> ShowS
Show)

-- | The exported name of a metric.
metricName :: MetricName -> Text
metricName :: MetricName -> Text
metricName = \case
  MetricName
JobsClaimed -> Text
"arbiter.jobs.claimed"
  MetricName
JobsProcessed -> Text
"arbiter.jobs.processed"
  MetricName
JobsRetries -> Text
"arbiter.jobs.retries"
  MetricName
AdmissionAdmitted -> Text
"arbiter.admission.admitted"
  MetricName
MaintenanceRows -> Text
"arbiter.maintenance.rows"
  MetricName
HandlerDuration -> Text
"arbiter.job.handler.duration"
  MetricName
QueueDepth -> Text
"arbiter.queue.depth"
  MetricName
QueueDepthByKind -> Text
"arbiter.queue.depth_by_kind"
  MetricName
QueueOldestReadyAge -> Text
"arbiter.queue.oldest_ready_age"
  MetricName
QueueOldestInFlightAge -> Text
"arbiter.queue.oldest_in_flight_age"
  MetricName
Workers -> Text
"arbiter.workers"
  MetricName
AdmissionKeys -> Text
"arbiter.admission.keys"
  MetricName
AdmissionLimit -> Text
"arbiter.admission.limit"
  MetricName
AdmissionInFlight -> Text
"arbiter.admission.in_flight"
  MetricName
AdmissionBusiestKey -> Text
"arbiter.admission.busiest_key"
  MetricName
AdmissionTokens -> Text
"arbiter.admission.tokens"
  MetricName
PgTableDeadTuples -> Text
"arbiter.pg.table.dead_tuples"
  MetricName
PgTableLiveTuples -> Text
"arbiter.pg.table.live_tuples"
  MetricName
PgTableAutovacuumAge -> Text
"arbiter.pg.table.autovacuum_age"
  MetricName
PgTableSizeBytes -> Text
"arbiter.pg.table.size_bytes"
  MetricName
PgTableScans -> Text
"arbiter.pg.table.scans"
  MetricName
PgTableBlocks -> Text
"arbiter.pg.table.blocks"
  MetricName
PgTableXidAge -> Text
"arbiter.pg.table.xid_age"
  MetricName
PgDbConnections -> Text
"arbiter.pg.database.connections"
  MetricName
PgDbBackends -> Text
"arbiter.pg.database.backends"
  MetricName
PgDbOldestTransactionAge -> Text
"arbiter.pg.database.oldest_transaction_age"
  MetricName
PgDbOldestQueryAge -> Text
"arbiter.pg.database.oldest_query_age"
  MetricName
DbReachable -> Text
"arbiter.db.reachable"
  MetricName
GaugesAge -> Text
"arbiter.gauges.age"

-- | Every metric name arbiter exports.
arbiterMetricNames :: [Text]
arbiterMetricNames :: [Text]
arbiterMetricNames = (MetricName -> Text) -> [MetricName] -> [Text]
forall a b. (a -> b) -> [a] -> [b]
map MetricName -> Text
metricName [MetricName
forall a. Bounded a => a
minBound .. MetricName
forall a. Bounded a => a
maxBound]