distributed-process-ekg-0.1.0.0: src/System/Metrics/DistributedProcess.hs
module System.Metrics.DistributedProcess
( registerLocalNodeMetrics
) where
import Control.Concurrent.MVar (newEmptyMVar, putMVar, takeMVar)
import Control.Distributed.Process (NodeStats (..), getLocalNodeStats,
liftIO)
import Control.Distributed.Process.Node (LocalNode, runProcess)
import System.Metrics (Store, Value (..), registerGroup)
import qualified Data.HashMap.Strict as HM
import qualified Data.Text as T
registerLocalNodeMetrics :: LocalNode -> Store -> IO ()
registerLocalNodeMetrics node = registerGroup stats sample
where
sample :: IO NodeStats
sample = do
s <- newEmptyMVar
runProcess node
(getLocalNodeStats >>= liftIO . putMVar s)
takeMVar s
stats :: HM.HashMap T.Text (NodeStats -> Value)
stats = HM.fromList
[ ( T.pack "dp.node.reg_names"
, Gauge . fromIntegral . nodeStatsRegisteredNames
)
, ( T.pack "dp.node.monitors"
, Gauge . fromIntegral . nodeStatsMonitors
)
, ( T.pack "dp.node.links"
, Gauge . fromIntegral . nodeStatsLinks
)
, ( T.pack "dp.node.processes"
, Gauge . fromIntegral . nodeStatsProcesses
)
]