packages feed

prodapi-userauth-0.1.0.0: src/Prod/UserAuth/Counters.hs

{-# LANGUAGE StrictData #-}

module Prod.UserAuth.Counters (
    Counters (..),
    initCounters,
)
where

import Data.Text (Text)
import qualified Prometheus as Prometheus

data Counters
    = Counters
    { registrations :: Prometheus.Vector (Text) Prometheus.Counter
    , logins :: Prometheus.Vector (Text) Prometheus.Counter
    , echoes :: Prometheus.Vector (Text) Prometheus.Counter
    , whoamis :: Prometheus.Vector (Text) Prometheus.Counter
    , recoveryRequests :: Prometheus.Vector (Text) Prometheus.Counter
    , recoveryApplied :: Prometheus.Vector (Text) Prometheus.Counter
    }

initCounters :: IO Counters
initCounters =
    Counters
        <$> statuses "userauth_registrations" "number of registrations"
        <*> statuses "userauth_logins" "number of logins recorded"
        <*> statuses "userauth_echoes" "number of token-echo recorded"
        <*> statuses "userauth_whoamis" "number of whoamis received"
        <*> statuses "userauth_recovery_requests" "number of recovery-requests received"
        <*> statuses "userauth_recovery_applied" "number of recovery-requests applied"
  where
    statuses k h =
        Prometheus.register $
            Prometheus.vector "status" $
                Prometheus.counter (Prometheus.Info k h)