purescript-metrics/src/System/Metrics/Meter.purs

90 lines
3.0 KiB
Plaintext
Raw Normal View History

2017-11-15 18:00:34 +05:30
module System.Metrics.Meter
( Meter
2017-11-20 17:06:31 +05:30
, Summary(..)
2017-11-15 18:00:34 +05:30
, new
, markN
, mark
, fifteenMinuteRate
, fiveMinuteRate
, oneMinuteRate
, meanRate
, count
, read
) where
import Control.Monad.Eff (Eff)
import Control.Monad.Eff.Ref (REF)
2017-11-15 19:37:09 +05:30
import Data.Foreign.Class (class Encode)
import Data.Foreign.Generic (defaultOptions, genericEncode)
2017-11-15 18:00:34 +05:30
import Data.Function.Uncurried (Fn2, runFn2)
import Data.Generic.Rep (class Generic)
import Data.Generic.Rep.Show (genericShow)
2017-11-15 19:37:09 +05:30
import Prelude
2017-11-15 18:00:34 +05:30
2017-11-20 17:06:31 +05:30
-- | A mutable metric which measures the rate at which a set of events occur.
2017-11-15 18:00:34 +05:30
foreign import data Meter :: Type
foreign import _new :: forall eff. Eff (ref :: REF | eff) Meter
foreign import _markN :: forall eff. Fn2 Meter Int (Eff (ref :: REF | eff) Unit)
2017-11-20 17:06:31 +05:30
-- | Returns the fifteen minute moving-average rate of the events recorded by the meter.
2017-11-15 18:00:34 +05:30
foreign import fifteenMinuteRate :: forall eff. Meter -> Eff (ref :: REF | eff) Number
2017-11-20 17:06:31 +05:30
-- | Returns the five minute moving-average rate of the events recorded by the meter.
2017-11-15 18:00:34 +05:30
foreign import fiveMinuteRate :: forall eff. Meter -> Eff (ref :: REF | eff) Number
2017-11-20 17:06:31 +05:30
-- | Returns the one minute moving-average rate of the events recorded by the meter.
2017-11-15 18:00:34 +05:30
foreign import oneMinuteRate :: forall eff. Meter -> Eff (ref :: REF | eff) Number
2017-11-20 17:06:31 +05:30
-- | Returns the mean rate of the events recorded by the meter.
2017-11-15 18:00:34 +05:30
foreign import meanRate :: forall eff. Meter -> Eff (ref :: REF | eff) Number
2017-11-20 17:06:31 +05:30
-- | Returns the count of the events recorded by the meter.
2017-11-15 18:00:34 +05:30
foreign import count :: forall eff. Meter -> Eff (ref :: REF | eff) Int
2017-11-20 17:06:31 +05:30
-- | Create a new meter.
2017-11-15 18:00:34 +05:30
new :: forall eff. Eff (ref :: REF | eff) Meter
new = _new
2017-11-20 17:06:31 +05:30
-- | Marks the meter with occurrance of n events.
2017-11-15 18:00:34 +05:30
markN :: forall eff. Meter -> Int -> Eff (ref :: REF | eff) Unit
markN = runFn2 _markN
2017-11-20 17:06:31 +05:30
-- | Marks the meter with occurrance of one event.
2017-11-15 18:00:34 +05:30
mark :: forall eff. Meter -> Eff (ref :: REF | eff) Unit
mark m = markN m 1
2017-11-20 17:06:31 +05:30
-- | Summary of the measurements in the meter. Contains:
-- |
-- | - count: count
-- | - m1: one minute rate
-- | - m5: five minute rate
-- | - m15: fifteen minute rate
-- | - mean: mean rate
2017-11-15 18:00:34 +05:30
newtype Summary = Summary {
count :: Int
, m1 :: Number
, m5 :: Number
, m15 :: Number
, mean :: Number
}
2017-11-15 19:37:09 +05:30
derive instance eqMSummary :: Eq Summary
derive instance genericMSummary :: Generic Summary _
instance showMSummary :: Show Summary where
2017-11-15 18:00:34 +05:30
show = genericShow
2017-11-15 19:37:09 +05:30
instance encodeMSummary :: Encode Summary where
encode = genericEncode $ defaultOptions { unwrapSingleConstructors = true }
2017-11-15 18:00:34 +05:30
2017-11-20 17:06:31 +05:30
-- | Returns the summary of the measurements in the meter.
2017-11-15 18:00:34 +05:30
read :: forall eff. Meter -> Eff (ref :: REF | eff) Summary
read m = Summary <$> ({ count: _
, m1: _
, m5: _
, m15: _
, mean: _
} <$> count m
<*> oneMinuteRate m
<*> fiveMinuteRate m
<*> fifteenMinuteRate m
<*> meanRate m)