composite-ekg-0.8.1.0: EKG Metrics for Vinyl records
Safe HaskellNone
LanguageHaskell2010

Composite.Ekg

Synopsis

Documentation

class EkgMetric a where Source #

Type class for constructing a configured EKG metric store for record type of named fields

For example, given:

type FActiveUsers    = "activeUsers"           :-> Gauge
type FResponseTimes  = "endpointResponseTimes" :-> Distribution
type FOrdersPlaced   = "ordersPlaced"          :-> Counter
type EkgMetrics = '[FActiveUsers, FResponseTimes, FRevenue]

And then used in:

configureMetrics :: IO (Rec EkgMetrics)
configureMetrics = do
  store <- newStore
  metrics <- ekgMetric "myapp" store
  _ <- forkServerWith store "localhost" 8080
  pure metrics

Compare to a more traditional:

metrics <- EkgMetrics
 <$> createGauge "myapp.active_users store
 <*> createDistribution "myapp.endpoint_response_times" store
 <*> createCounter "myapp.orders_placed" store

The former is more concise and harder to make naming errors particularly in larger store sets

Methods

ekgMetric :: Text -> Store -> IO a Source #

Instances

Instances details
EkgMetric Distribution Source # 
Instance details

Defined in Composite.Ekg

EkgMetric Label Source # 
Instance details

Defined in Composite.Ekg

Methods

ekgMetric :: Text -> Store -> IO Label Source #

EkgMetric Gauge Source # 
Instance details

Defined in Composite.Ekg

Methods

ekgMetric :: Text -> Store -> IO Gauge Source #

EkgMetric Counter Source # 
Instance details

Defined in Composite.Ekg

(EkgMetric a, EkgMetric (Record rs), KnownSymbol s) => EkgMetric (Record ((s :-> a) ': rs)) Source # 
Instance details

Defined in Composite.Ekg

Methods

ekgMetric :: Text -> Store -> IO (Record ((s :-> a) ': rs)) Source #

EkgMetric (Record ('[] :: [Type])) Source # 
Instance details

Defined in Composite.Ekg

Methods

ekgMetric :: Text -> Store -> IO (Record '[]) Source #