cdp-0.0.1.0: src/CDP/Domains/Performance.hs
{-# LANGUAGE OverloadedStrings, RecordWildCards, TupleSections #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE TypeFamilies #-}
{- |
= Performance
-}
module CDP.Domains.Performance (module CDP.Domains.Performance) where
import Control.Applicative ((<$>))
import Control.Monad
import Control.Monad.Loops
import Control.Monad.Trans (liftIO)
import qualified Data.Map as M
import Data.Maybe
import Data.Functor.Identity
import Data.String
import qualified Data.Text as T
import qualified Data.List as List
import qualified Data.Text.IO as TI
import qualified Data.Vector as V
import Data.Aeson.Types (Parser(..))
import Data.Aeson (FromJSON (..), ToJSON (..), (.:), (.:?), (.=), (.!=), (.:!))
import qualified Data.Aeson as A
import qualified Network.HTTP.Simple as Http
import qualified Network.URI as Uri
import qualified Network.WebSockets as WS
import Control.Concurrent
import qualified Data.ByteString.Lazy as BS
import qualified Data.Map as Map
import Data.Proxy
import System.Random
import GHC.Generics
import Data.Char
import Data.Default
import CDP.Internal.Utils
-- | Type 'Performance.Metric'.
-- Run-time execution metric.
data PerformanceMetric = PerformanceMetric
{
-- | Metric name.
performanceMetricName :: T.Text,
-- | Metric value.
performanceMetricValue :: Double
}
deriving (Eq, Show)
instance FromJSON PerformanceMetric where
parseJSON = A.withObject "PerformanceMetric" $ \o -> PerformanceMetric
<$> o A..: "name"
<*> o A..: "value"
instance ToJSON PerformanceMetric where
toJSON p = A.object $ catMaybes [
("name" A..=) <$> Just (performanceMetricName p),
("value" A..=) <$> Just (performanceMetricValue p)
]
-- | Type of the 'Performance.metrics' event.
data PerformanceMetrics = PerformanceMetrics
{
-- | Current values of the metrics.
performanceMetricsMetrics :: [PerformanceMetric],
-- | Timestamp title.
performanceMetricsTitle :: T.Text
}
deriving (Eq, Show)
instance FromJSON PerformanceMetrics where
parseJSON = A.withObject "PerformanceMetrics" $ \o -> PerformanceMetrics
<$> o A..: "metrics"
<*> o A..: "title"
instance Event PerformanceMetrics where
eventName _ = "Performance.metrics"
-- | Disable collecting and reporting metrics.
-- | Parameters of the 'Performance.disable' command.
data PPerformanceDisable = PPerformanceDisable
deriving (Eq, Show)
pPerformanceDisable
:: PPerformanceDisable
pPerformanceDisable
= PPerformanceDisable
instance ToJSON PPerformanceDisable where
toJSON _ = A.Null
instance Command PPerformanceDisable where
type CommandResponse PPerformanceDisable = ()
commandName _ = "Performance.disable"
fromJSON = const . A.Success . const ()
-- | Enable collecting and reporting metrics.
-- | Parameters of the 'Performance.enable' command.
data PPerformanceEnableTimeDomain = PPerformanceEnableTimeDomainTimeTicks | PPerformanceEnableTimeDomainThreadTicks
deriving (Ord, Eq, Show, Read)
instance FromJSON PPerformanceEnableTimeDomain where
parseJSON = A.withText "PPerformanceEnableTimeDomain" $ \v -> case v of
"timeTicks" -> pure PPerformanceEnableTimeDomainTimeTicks
"threadTicks" -> pure PPerformanceEnableTimeDomainThreadTicks
"_" -> fail "failed to parse PPerformanceEnableTimeDomain"
instance ToJSON PPerformanceEnableTimeDomain where
toJSON v = A.String $ case v of
PPerformanceEnableTimeDomainTimeTicks -> "timeTicks"
PPerformanceEnableTimeDomainThreadTicks -> "threadTicks"
data PPerformanceEnable = PPerformanceEnable
{
-- | Time domain to use for collecting and reporting duration metrics.
pPerformanceEnableTimeDomain :: Maybe PPerformanceEnableTimeDomain
}
deriving (Eq, Show)
pPerformanceEnable
:: PPerformanceEnable
pPerformanceEnable
= PPerformanceEnable
Nothing
instance ToJSON PPerformanceEnable where
toJSON p = A.object $ catMaybes [
("timeDomain" A..=) <$> (pPerformanceEnableTimeDomain p)
]
instance Command PPerformanceEnable where
type CommandResponse PPerformanceEnable = ()
commandName _ = "Performance.enable"
fromJSON = const . A.Success . const ()
-- | Retrieve current values of run-time metrics.
-- | Parameters of the 'Performance.getMetrics' command.
data PPerformanceGetMetrics = PPerformanceGetMetrics
deriving (Eq, Show)
pPerformanceGetMetrics
:: PPerformanceGetMetrics
pPerformanceGetMetrics
= PPerformanceGetMetrics
instance ToJSON PPerformanceGetMetrics where
toJSON _ = A.Null
data PerformanceGetMetrics = PerformanceGetMetrics
{
-- | Current values for run-time metrics.
performanceGetMetricsMetrics :: [PerformanceMetric]
}
deriving (Eq, Show)
instance FromJSON PerformanceGetMetrics where
parseJSON = A.withObject "PerformanceGetMetrics" $ \o -> PerformanceGetMetrics
<$> o A..: "metrics"
instance Command PPerformanceGetMetrics where
type CommandResponse PPerformanceGetMetrics = PerformanceGetMetrics
commandName _ = "Performance.getMetrics"