Adds Encode instance for sample value
parent
f5036f0d58
commit
7208342f77
|
@ -28,6 +28,8 @@ import Control.Monad.Eff (Eff)
|
||||||
import Control.Monad.Eff.Class (liftEff)
|
import Control.Monad.Eff.Class (liftEff)
|
||||||
import Control.Monad.Eff.Exception (EXCEPTION, throw)
|
import Control.Monad.Eff.Exception (EXCEPTION, throw)
|
||||||
import Control.Monad.Eff.Ref (REF, Ref, modifyRef', newRef, readRef)
|
import Control.Monad.Eff.Ref (REF, Ref, modifyRef', newRef, readRef)
|
||||||
|
import Data.Foreign.Class (class Encode)
|
||||||
|
import Data.Foreign.Generic (defaultOptions, genericEncode)
|
||||||
import Data.Generic.Rep (class Generic)
|
import Data.Generic.Rep (class Generic)
|
||||||
import Data.Generic.Rep.Show (genericShow)
|
import Data.Generic.Rep.Show (genericShow)
|
||||||
import Data.Map as Map
|
import Data.Map as Map
|
||||||
|
@ -185,6 +187,8 @@ derive instance eqVal :: Eq Value
|
||||||
derive instance genVal :: Generic Value _
|
derive instance genVal :: Generic Value _
|
||||||
instance showVal :: Show Value where
|
instance showVal :: Show Value where
|
||||||
show = genericShow
|
show = genericShow
|
||||||
|
instance encodeVal :: Encode Value where
|
||||||
|
encode = genericEncode $ defaultOptions { unwrapSingleConstructors = true }
|
||||||
|
|
||||||
sampleOne :: forall eff. MetricSampler -> Aff (ref :: REF | eff) Value
|
sampleOne :: forall eff. MetricSampler -> Aff (ref :: REF | eff) Value
|
||||||
sampleOne (CounterS c) = CounterV <$> liftEff (Counter.read c)
|
sampleOne (CounterS c) = CounterV <$> liftEff (Counter.read c)
|
||||||
|
|
|
@ -16,15 +16,19 @@ module System.Metrics.Histogram
|
||||||
, read
|
, read
|
||||||
) where
|
) where
|
||||||
|
|
||||||
|
import Prelude
|
||||||
|
|
||||||
import Control.Monad.Eff (Eff)
|
import Control.Monad.Eff (Eff)
|
||||||
import Control.Monad.Eff.Ref (REF)
|
import Control.Monad.Eff.Ref (REF)
|
||||||
import Data.Array (index)
|
import Data.Array (index)
|
||||||
|
import Data.Foreign.Class (class Encode, encode)
|
||||||
|
import Data.Foreign.Generic (defaultOptions, genericEncode)
|
||||||
|
import Data.Foreign.NullOrUndefined (NullOrUndefined(..))
|
||||||
import Data.Function.Uncurried (Fn2, runFn2)
|
import Data.Function.Uncurried (Fn2, runFn2)
|
||||||
import Data.Generic.Rep (class Generic)
|
import Data.Generic.Rep (class Generic)
|
||||||
import Data.Generic.Rep.Show (genericShow)
|
import Data.Generic.Rep.Show (genericShow)
|
||||||
import Data.Maybe (Maybe)
|
import Data.Maybe (Maybe)
|
||||||
import Data.Nullable (Nullable, toMaybe)
|
import Data.Nullable (Nullable, toMaybe)
|
||||||
import Prelude
|
|
||||||
|
|
||||||
foreign import data Histogram :: Type
|
foreign import data Histogram :: Type
|
||||||
foreign import _newWithExponentialDecaySampling ::
|
foreign import _newWithExponentialDecaySampling ::
|
||||||
|
@ -85,10 +89,46 @@ newtype Summary = Summary {
|
||||||
, p999 :: Maybe Number
|
, p999 :: Maybe Number
|
||||||
}
|
}
|
||||||
|
|
||||||
derive instance eqSummary :: Eq Summary
|
derive instance eqHSummary :: Eq Summary
|
||||||
derive instance genericSummary :: Generic Summary _
|
derive instance genericHSummary :: Generic Summary _
|
||||||
instance showSummary :: Show Summary where
|
instance showHSummary :: Show Summary where
|
||||||
show = genericShow
|
show = genericShow
|
||||||
|
instance encodeHSummary :: Encode Summary where
|
||||||
|
encode = fromSummary >>> encode
|
||||||
|
|
||||||
|
newtype Summary' = Summary' {
|
||||||
|
min :: NullOrUndefined Number
|
||||||
|
, max :: NullOrUndefined Number
|
||||||
|
, sum :: NullOrUndefined Number
|
||||||
|
, variance :: NullOrUndefined Number
|
||||||
|
, mean :: NullOrUndefined Number
|
||||||
|
, stdDev :: NullOrUndefined Number
|
||||||
|
, count :: Int
|
||||||
|
, median :: NullOrUndefined Number
|
||||||
|
, p75 :: NullOrUndefined Number
|
||||||
|
, p95 :: NullOrUndefined Number
|
||||||
|
, p99 :: NullOrUndefined Number
|
||||||
|
, p999 :: NullOrUndefined Number
|
||||||
|
}
|
||||||
|
|
||||||
|
fromSummary :: Summary -> Summary'
|
||||||
|
fromSummary (Summary { min , max , sum , variance , mean , stdDev , count , median , p75 , p95 , p99 , p999 }) =
|
||||||
|
Summary' { min: NullOrUndefined min
|
||||||
|
, max: NullOrUndefined max
|
||||||
|
, sum: NullOrUndefined sum
|
||||||
|
, variance: NullOrUndefined variance
|
||||||
|
, mean: NullOrUndefined mean
|
||||||
|
, stdDev: NullOrUndefined stdDev
|
||||||
|
, count: count
|
||||||
|
, median: NullOrUndefined median
|
||||||
|
, p75: NullOrUndefined p75
|
||||||
|
, p95: NullOrUndefined p95
|
||||||
|
, p99: NullOrUndefined p99
|
||||||
|
, p999: NullOrUndefined p999 }
|
||||||
|
|
||||||
|
derive instance genericHSummary' :: Generic Summary' _
|
||||||
|
instance encodeHSummary' :: Encode Summary' where
|
||||||
|
encode = genericEncode $ defaultOptions { unwrapSingleConstructors = true }
|
||||||
|
|
||||||
read :: forall eff. Histogram -> Eff (ref :: REF | eff) Summary
|
read :: forall eff. Histogram -> Eff (ref :: REF | eff) Summary
|
||||||
read h = do
|
read h = do
|
||||||
|
|
|
@ -14,10 +14,12 @@ module System.Metrics.Meter
|
||||||
|
|
||||||
import Control.Monad.Eff (Eff)
|
import Control.Monad.Eff (Eff)
|
||||||
import Control.Monad.Eff.Ref (REF)
|
import Control.Monad.Eff.Ref (REF)
|
||||||
|
import Data.Foreign.Class (class Encode)
|
||||||
|
import Data.Foreign.Generic (defaultOptions, genericEncode)
|
||||||
import Data.Function.Uncurried (Fn2, runFn2)
|
import Data.Function.Uncurried (Fn2, runFn2)
|
||||||
import Data.Generic.Rep (class Generic)
|
import Data.Generic.Rep (class Generic)
|
||||||
import Data.Generic.Rep.Show (genericShow)
|
import Data.Generic.Rep.Show (genericShow)
|
||||||
import Prelude (class Eq, class Show, Unit, (<$>), (<*>))
|
import Prelude
|
||||||
|
|
||||||
foreign import data Meter :: Type
|
foreign import data Meter :: Type
|
||||||
foreign import _new :: forall eff. Eff (ref :: REF | eff) Meter
|
foreign import _new :: forall eff. Eff (ref :: REF | eff) Meter
|
||||||
|
@ -45,10 +47,12 @@ newtype Summary = Summary {
|
||||||
, mean :: Number
|
, mean :: Number
|
||||||
}
|
}
|
||||||
|
|
||||||
derive instance eqSummary :: Eq Summary
|
derive instance eqMSummary :: Eq Summary
|
||||||
derive instance genericSummary :: Generic Summary _
|
derive instance genericMSummary :: Generic Summary _
|
||||||
instance showSummary :: Show Summary where
|
instance showMSummary :: Show Summary where
|
||||||
show = genericShow
|
show = genericShow
|
||||||
|
instance encodeMSummary :: Encode Summary where
|
||||||
|
encode = genericEncode $ defaultOptions { unwrapSingleConstructors = true }
|
||||||
|
|
||||||
read :: forall eff. Meter -> Eff (ref :: REF | eff) Summary
|
read :: forall eff. Meter -> Eff (ref :: REF | eff) Summary
|
||||||
read m = Summary <$> ({ count: _
|
read m = Summary <$> ({ count: _
|
||||||
|
|
|
@ -27,6 +27,8 @@ import Control.Monad.Eff.Class (liftEff)
|
||||||
import Control.Monad.Eff.Now (NOW, now)
|
import Control.Monad.Eff.Now (NOW, now)
|
||||||
import Control.Monad.Eff.Ref (REF)
|
import Control.Monad.Eff.Ref (REF)
|
||||||
import Data.DateTime.Instant (unInstant)
|
import Data.DateTime.Instant (unInstant)
|
||||||
|
import Data.Foreign.Class (class Encode)
|
||||||
|
import Data.Foreign.Generic (defaultOptions, genericEncode)
|
||||||
import Data.Generic.Rep (class Generic)
|
import Data.Generic.Rep (class Generic)
|
||||||
import Data.Generic.Rep.Show (genericShow)
|
import Data.Generic.Rep.Show (genericShow)
|
||||||
import Data.Maybe (Maybe)
|
import Data.Maybe (Maybe)
|
||||||
|
@ -95,10 +97,12 @@ count (Timer { histogram }) = Histogram.count histogram
|
||||||
|
|
||||||
newtype Summary = Summary { duration :: Histogram.Summary, rate :: Meter.Summary }
|
newtype Summary = Summary { duration :: Histogram.Summary, rate :: Meter.Summary }
|
||||||
|
|
||||||
derive instance eqSummary :: Eq Summary
|
derive instance eqTSummary :: Eq Summary
|
||||||
derive instance genericSummary :: Generic Summary _
|
derive instance genericTSummary :: Generic Summary _
|
||||||
instance showSummary :: Show Summary where
|
instance showTSummary :: Show Summary where
|
||||||
show = genericShow
|
show = genericShow
|
||||||
|
instance encodeTSummary :: Encode Summary where
|
||||||
|
encode = genericEncode $ defaultOptions { unwrapSingleConstructors = true }
|
||||||
|
|
||||||
read :: forall eff. Timer -> Eff (ref :: REF | eff) Summary
|
read :: forall eff. Timer -> Eff (ref :: REF | eff) Summary
|
||||||
read (Timer { meter, histogram }) =
|
read (Timer { meter, histogram }) =
|
||||||
|
|
Loading…
Reference in New Issue