runtime: increment trigger/service counters on the bus
This commit is contained in:
@@ -82,12 +82,13 @@ runController rootDir bus (Controller name machine _enabled) = do
|
||||
defaultMain :: IO ()
|
||||
defaultMain = withSocketsDo $ do
|
||||
severity <- maybe InfoS (const DebugS) <$> lookupEnv "HA_DEBUG"
|
||||
withBus severity $ \bus -> do
|
||||
store <- System.Metrics.newStore
|
||||
System.Metrics.registerGcMetrics store
|
||||
appMetrics <- HomeAssistant.Runtime.Metrics.registerAppMetrics store
|
||||
withBus severity appMetrics $ \bus -> do
|
||||
token <- getEnv "HA_TOKEN"
|
||||
host <- getEnv "HA_HOST"
|
||||
rootPath <- fromMaybe "/tmp/" <$> lookupEnv "HA_LIB_DIR"
|
||||
store <- System.Metrics.newStore
|
||||
System.Metrics.registerGcMetrics store
|
||||
rrdPath <- fromMaybe "hass-controller.rrd" <$> lookupEnv "HA_RRD_PATH"
|
||||
rrdtool <- fromMaybe "rrdtool" <$> lookupEnv "HA_RRDTOOL"
|
||||
let active = [c | c@(Controller _ _ True) <- controllers]
|
||||
|
||||
@@ -6,6 +6,8 @@ module HomeAssistant.Runtime.Bus
|
||||
, CallIdGen(..)
|
||||
, mkCallIdGen
|
||||
, withBus
|
||||
, recordInbound
|
||||
, recordOutbound
|
||||
, channelHassEval
|
||||
) where
|
||||
|
||||
@@ -21,10 +23,12 @@ import Control.Concurrent.STM
|
||||
import Data.Aeson (Value)
|
||||
import Data.IORef (atomicModifyIORef', newIORef)
|
||||
import HomeAssistant.Controller (HASSEff (..), Service)
|
||||
import HomeAssistant.Runtime.Metrics (AppMetrics (..))
|
||||
import Network.WebSockets (Connection)
|
||||
import Katip (LogEnv, closeScribes, mkHandleScribe, ColorStrategy (..), permitItem, Severity (..), Verbosity (V2), registerScribe, defaultScribeSettings, initLogEnv, ls, sl, logFM, katipAddContext, KatipContext)
|
||||
import Control.Exception (bracket)
|
||||
import System.IO (stdout)
|
||||
import System.Metrics.Counter (inc)
|
||||
import Data.UUID (toText)
|
||||
import AFRP (Request(..), Event(..))
|
||||
import Control.Monad.IO.Class (MonadIO, liftIO)
|
||||
@@ -38,10 +42,11 @@ data Bus = Bus
|
||||
, busConn :: TVar (Maybe Connection)
|
||||
, busGen :: CallIdGen
|
||||
, busLogEnv :: LogEnv
|
||||
, busMetrics :: AppMetrics
|
||||
}
|
||||
|
||||
withBus :: Severity -> (Bus -> IO a) -> IO a
|
||||
withBus severity callback = do
|
||||
withBus :: Severity -> AppMetrics -> (Bus -> IO a) -> IO a
|
||||
withBus severity metrics callback = do
|
||||
handleScribe <- mkHandleScribe ColorIfTerminal stdout (permitItem severity) V2
|
||||
let makeLogEnv = registerScribe "stdout" handleScribe defaultScribeSettings =<< initLogEnv "hass-controller" "production"
|
||||
-- closeScribes will stop accepting new logs, flush existing ones and clean up resources
|
||||
@@ -52,8 +57,15 @@ withBus severity callback = do
|
||||
<*> newTVarIO Nothing
|
||||
<*> mkCallIdGen 0
|
||||
<*> pure le
|
||||
<*> pure metrics
|
||||
callback bus
|
||||
|
||||
recordInbound :: Bus -> IO ()
|
||||
recordInbound bus = inc (amTriggersIn (busMetrics bus))
|
||||
|
||||
recordOutbound :: Bus -> IO ()
|
||||
recordOutbound bus = inc (amServicesOut (busMetrics bus))
|
||||
|
||||
channelHassEval :: (MonadIO m, KatipContext m) => Bus -> HASSEff a -> m a
|
||||
channelHassEval bus = \case
|
||||
CallService req svc -> katipAddContext (sl "traceId" (toText (requestTraceId req))) $ do
|
||||
|
||||
@@ -96,7 +96,9 @@ receiveLoop bus conn = forever $ do
|
||||
Left () -> atomically $ writeTChan (busInbound bus) Tick
|
||||
Right msg -> case eitherDecode msg of
|
||||
Left err -> putStrLn $ "[reader] skipping undecodable message: " <> err
|
||||
Right v -> atomically $ writeTChan (busInbound bus) (Event v)
|
||||
Right v -> do
|
||||
recordInbound bus
|
||||
atomically $ writeTChan (busInbound bus) (Event v)
|
||||
|
||||
receiveJSON :: WS.Connection -> IO Value
|
||||
receiveJSON conn = do
|
||||
@@ -128,6 +130,7 @@ sendWithId bus conn request svc = do
|
||||
let textData = encode $ encodeService callId svc
|
||||
runKatipContextT (busLogEnv bus) (sl "traceId" (toText (requestTraceId request))) "connection" $
|
||||
logFM DebugS (ls textData)
|
||||
recordOutbound bus
|
||||
WS.sendTextData conn textData
|
||||
|
||||
writerAction :: Bus -> IO Void
|
||||
|
||||
Reference in New Issue
Block a user