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.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)

View File

@ -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

View File

@ -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: _

View File

@ -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 }) =