| Safe Haskell | Safe-Inferred | 
|---|---|
| Language | Haskell2010 | 
Instrument.Worker
Synopsis
- initWorkerCSV :: ConnectInfo -> FilePath -> Int -> AggProcessConfig -> IO ()
 - initWorkerCSV' :: FilePath -> AggProcessConfig -> IO AggProcess
 - initWorkerGraphite :: ConnectInfo -> Int -> HostName -> Int -> AggProcessConfig -> IO ()
 - initWorkerGraphite' :: HostName -> Int -> AggProcessConfig -> IO AggProcess
 - work :: Connection -> Int -> AggProcess -> IO ()
 - initWorker :: String -> ConnectInfo -> Int -> AggProcess -> IO ()
 - data AggProcess = AggProcess {
- apConfig :: AggProcessConfig
 - apProc :: Aggregated -> Redis ()
 
 - data AggProcessConfig = AggProcessConfig {
- metricQuantiles :: MetricName -> Set Quantile
 
 - standardQuantiles :: MetricName -> Set Quantile
 - noQuantiles :: MetricName -> Set Quantile
 - quantileMap :: Map MetricName (Set Quantile) -> Set Quantile -> MetricName -> Set Quantile
 - defAggProcessConfig :: AggProcessConfig
 - expandDims :: forall packets. (Monoid packets, Eq packets) => Map Dimensions packets -> Map Dimensions packets
 
Documentation
Arguments
| :: ConnectInfo | |
| -> FilePath | Target file name  | 
| -> Int | Aggregation period / flush interval in seconds  | 
| -> AggProcessConfig | |
| -> IO () | 
A CSV backend to store aggregation results in a CSV
Arguments
| :: FilePath | Target file name  | 
| -> AggProcessConfig | |
| -> IO AggProcess | 
Create an AggProcess that dumps to CSV. Use this to compose with other AggProcesses
Arguments
| :: ConnectInfo | Redis connection  | 
| -> Int | Aggregation period / flush interval in seconds  | 
| -> HostName | Graphite host  | 
| -> Int | Graphite port  | 
| -> AggProcessConfig | |
| -> IO () | 
Initialize a Graphite backend
Arguments
| :: HostName | Graphite host  | 
| -> Int | Graphite port  | 
| -> AggProcessConfig | |
| -> IO AggProcess | 
Crete an AggProcess that dumps to graphite. Use this to compose with other AggProcesses
work :: Connection -> Int -> AggProcess -> IO () Source #
Go over all pending stats buffers in redis.
initWorker :: String -> ConnectInfo -> Int -> AggProcess -> IO () Source #
Generic utility for making worker backends. Will retry indefinitely with exponential backoff.
data AggProcess Source #
A function that does something with the aggregation results. Can implement multiple backends simply using this. Note that Semigroup and Monoid instances are provided for defaulting and combining agg processes.
Constructors
| AggProcess | |
Fields 
  | |
Instances
| Monoid AggProcess Source # | |
Defined in Instrument.Worker Methods mempty :: AggProcess # mappend :: AggProcess -> AggProcess -> AggProcess # mconcat :: [AggProcess] -> AggProcess #  | |
| Semigroup AggProcess Source # | |
Defined in Instrument.Worker Methods (<>) :: AggProcess -> AggProcess -> AggProcess # sconcat :: NonEmpty AggProcess -> AggProcess # stimes :: Integral b => b -> AggProcess -> AggProcess #  | |
Configuring agg processes
data AggProcessConfig Source #
General configuration for agg processes. Defaulted with def,
 defAggProcessConfig, and mempty. Configurations can be combined
 with (<>) from Monoid or Semigroup.
Constructors
| AggProcessConfig | |
Fields 
  | |
Instances
| Monoid AggProcessConfig Source # | |
Defined in Instrument.Worker Methods mappend :: AggProcessConfig -> AggProcessConfig -> AggProcessConfig # mconcat :: [AggProcessConfig] -> AggProcessConfig #  | |
| Semigroup AggProcessConfig Source # | |
Defined in Instrument.Worker Methods (<>) :: AggProcessConfig -> AggProcessConfig -> AggProcessConfig # sconcat :: NonEmpty AggProcessConfig -> AggProcessConfig # stimes :: Integral b => b -> AggProcessConfig -> AggProcessConfig #  | |
| Default AggProcessConfig Source # | |
Defined in Instrument.Worker Methods def :: AggProcessConfig #  | |
standardQuantiles :: MetricName -> Set Quantile Source #
This is usually a good, comprehensive default. Produces quantiles 10,20,30,40,50,60,70,80,90,99. *Note:* for some backends like cloudwatch, each quantile produces an additional metric, so you should probably consider using something more limited than this.
noQuantiles :: MetricName -> Set Quantile Source #
Regardless of metric, produce no quantiles.
Arguments
| :: Map MetricName (Set Quantile) | |
| -> Set Quantile | What to return on miss  | 
| -> MetricName -> Set Quantile | 
If you have a fixed set of metric names, this is often a convenient way to express quantiles-per-metric.
Exported for testing
expandDims :: forall packets. (Monoid packets, Eq packets) => Map Dimensions packets -> Map Dimensions packets Source #
Take a map of packets by dimensions and *add* aggregations of the existing dims that isolate each distinct dimension/dimensionvalue pair + one more entry with an empty dimension set that aggregates the whole thing. worked example:
Given: { {d1=>d1v1,d2=>d2v1} => p1 , {d1=>d1v1,d2=>d2v2} => p2 } Produces: { {d1=>d1v1,d2=>d2v1} => p1 , {d1=>d1v1,d2=>d2v2} => p2 , {d1=>d1v1} => p1 + p2 , {d2=>d2v1} => p1 , {d2=>d2v2} => p2 , {} => p1 + p2 }