calamity-0.1.30.2: Calamity/Metrics/Eff.hs
{-# LANGUAGE TemplateHaskell #-}
-- | Effect for handling metrics
module Calamity.Metrics.Eff (
Counter,
Gauge,
Histogram,
HistogramSample (..),
MetricEff (..),
registerCounter,
registerGauge,
registerHistogram,
addCounter,
modifyGauge,
observeHistogram,
) where
import Calamity.Internal.Utils (DefaultingMap)
import Calamity.Metrics.Internal
import Data.Default.Class
import Data.Map
import Data.Text
import GHC.Generics
import Polysemy
import TextShow
import Calamity.Internal.OverriddenVia
data HistogramSample' = HistogramSample'
{ buckets :: DefaultingMap Double Double
, sum :: Double
, count :: Int
}
deriving (Generic)
deriving (Default)
data HistogramSample = HistogramSample
{ buckets :: Map Double Double
, sum :: Double
, count :: Int
}
deriving (Eq, Show, Generic)
deriving (Default) via OverriddenVia HistogramSample HistogramSample
deriving
(TextShow)
via FromStringShow HistogramSample
data MetricEff m a where
-- | Register a 'Counter'
RegisterCounter ::
-- | Name
Text ->
-- | Labels
[(Text, Text)] ->
MetricEff m Counter
-- | Register a 'Gauge'
RegisterGauge ::
-- | Name
Text ->
-- | Labels
[(Text, Text)] ->
MetricEff m Gauge
-- | Register a 'Histogram'
RegisterHistogram ::
-- | Name
Text ->
-- | Labels
[(Text, Text)] ->
-- | Upper bounds
[Double] ->
MetricEff m Histogram
AddCounter :: Int -> Counter -> MetricEff m Int
ModifyGauge :: (Double -> Double) -> Gauge -> MetricEff m Double
ObserveHistogram :: Double -> Histogram -> MetricEff m HistogramSample
makeSem ''MetricEff