Adds Encode instance for sample value

master
Abhinav Sarkar 2017-11-15 19:37:09 +05:30
parent f5036f0d58
commit 7208342f77
4 changed files with 63 additions and 11 deletions

View File

@ -28,6 +28,8 @@ import Control.Monad.Eff (Eff)
import Control.Monad.Eff.Class (liftEff)
import Control.Monad.Eff.Exception (EXCEPTION, throw)
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.Show (genericShow)
import Data.Map as Map
@ -185,6 +187,8 @@ derive instance eqVal :: Eq Value
derive instance genVal :: Generic Value _
instance showVal :: Show Value where
show = genericShow
instance encodeVal :: Encode Value where
encode = genericEncode $ defaultOptions { unwrapSingleConstructors = true }
sampleOne :: forall eff. MetricSampler -> Aff (ref :: REF | eff) Value
sampleOne (CounterS c) = CounterV <$> liftEff (Counter.read c)

View File

@ -16,15 +16,19 @@ module System.Metrics.Histogram
, read
) where
import Prelude
import Control.Monad.Eff (Eff)
import Control.Monad.Eff.Ref (REF)
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.Generic.Rep (class Generic)
import Data.Generic.Rep.Show (genericShow)
import Data.Maybe (Maybe)
import Data.Nullable (Nullable, toMaybe)
import Prelude
foreign import data Histogram :: Type
foreign import _newWithExponentialDecaySampling ::
@ -85,10 +89,46 @@ newtype Summary = Summary {
, p999 :: Maybe Number
}
derive instance eqSummary :: Eq Summary
derive instance genericSummary :: Generic Summary _
instance showSummary :: Show Summary where
derive instance eqHSummary :: Eq Summary
derive instance genericHSummary :: Generic Summary _
instance showHSummary :: Show Summary where
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 h = do

View File

@ -14,10 +14,12 @@ module System.Metrics.Meter
import Control.Monad.Eff (Eff)
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.Generic.Rep (class Generic)
import Data.Generic.Rep.Show (genericShow)
import Prelude (class Eq, class Show, Unit, (<$>), (<*>))
import Prelude
foreign import data Meter :: Type
foreign import _new :: forall eff. Eff (ref :: REF | eff) Meter
@ -45,10 +47,12 @@ newtype Summary = Summary {
, mean :: Number
}
derive instance eqSummary :: Eq Summary
derive instance genericSummary :: Generic Summary _
instance showSummary :: Show Summary where
derive instance eqMSummary :: Eq Summary
derive instance genericMSummary :: Generic Summary _
instance showMSummary :: Show Summary where
show = genericShow
instance encodeMSummary :: Encode Summary where
encode = genericEncode $ defaultOptions { unwrapSingleConstructors = true }
read :: forall eff. Meter -> Eff (ref :: REF | eff) Summary
read m = Summary <$> ({ count: _

View File

@ -27,6 +27,8 @@ import Control.Monad.Eff.Class (liftEff)
import Control.Monad.Eff.Now (NOW, now)
import Control.Monad.Eff.Ref (REF)
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.Show (genericShow)
import Data.Maybe (Maybe)
@ -95,10 +97,12 @@ count (Timer { histogram }) = Histogram.count histogram
newtype Summary = Summary { duration :: Histogram.Summary, rate :: Meter.Summary }
derive instance eqSummary :: Eq Summary
derive instance genericSummary :: Generic Summary _
instance showSummary :: Show Summary where
derive instance eqTSummary :: Eq Summary
derive instance genericTSummary :: Generic Summary _
instance showTSummary :: Show Summary where
show = genericShow
instance encodeTSummary :: Encode Summary where
encode = genericEncode $ defaultOptions { unwrapSingleConstructors = true }
read :: forall eff. Timer -> Eff (ref :: REF | eff) Summary
read (Timer { meter, histogram }) =