Skip to content

Commit

Permalink
cardano-tracer: RTView logs live view
Browse files Browse the repository at this point in the history
  • Loading branch information
Denis Shevchenko committed Oct 17, 2022
1 parent ab8d8d2 commit 347b65f
Show file tree
Hide file tree
Showing 19 changed files with 679 additions and 707 deletions.
7 changes: 3 additions & 4 deletions cardano-tracer/cardano-tracer.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,6 @@ library

Cardano.Tracer.Handlers.RTView.State.Displayed
Cardano.Tracer.Handlers.RTView.State.EraSettings
Cardano.Tracer.Handlers.RTView.State.Errors
Cardano.Tracer.Handlers.RTView.State.Historical
Cardano.Tracer.Handlers.RTView.State.Last
Cardano.Tracer.Handlers.RTView.State.Peers
Expand All @@ -73,10 +72,10 @@ library
Cardano.Tracer.Handlers.RTView.UI.CSS.Own
Cardano.Tracer.Handlers.RTView.UI.HTML.Node.Column
Cardano.Tracer.Handlers.RTView.UI.HTML.Node.EKG
Cardano.Tracer.Handlers.RTView.UI.HTML.Node.Errors
Cardano.Tracer.Handlers.RTView.UI.HTML.Node.Peers
Cardano.Tracer.Handlers.RTView.UI.HTML.About
Cardano.Tracer.Handlers.RTView.UI.HTML.Body
Cardano.Tracer.Handlers.RTView.UI.HTML.Logs
Cardano.Tracer.Handlers.RTView.UI.HTML.Main
Cardano.Tracer.Handlers.RTView.UI.HTML.NoNodes
Cardano.Tracer.Handlers.RTView.UI.HTML.Notifications
Expand All @@ -93,10 +92,10 @@ library
Cardano.Tracer.Handlers.RTView.Update.Chain
Cardano.Tracer.Handlers.RTView.Update.EKG
Cardano.Tracer.Handlers.RTView.Update.EraSettings
Cardano.Tracer.Handlers.RTView.Update.Errors
Cardano.Tracer.Handlers.RTView.Update.Historical
Cardano.Tracer.Handlers.RTView.Update.KES
Cardano.Tracer.Handlers.RTView.Update.Leadership
Cardano.Tracer.Handlers.RTView.Update.Logs
Cardano.Tracer.Handlers.RTView.Update.NodeInfo
Cardano.Tracer.Handlers.RTView.Update.NodeState
Cardano.Tracer.Handlers.RTView.Update.Nodes
Expand All @@ -118,7 +117,7 @@ library
other-modules: Paths_cardano_tracer

build-depends: aeson
, aeson-pretty
-- , aeson-pretty
, async
, async-extras
, bimap
Expand Down
5 changes: 0 additions & 5 deletions cardano-tracer/src/Cardano/Tracer/Handlers/RTView/Run.hs
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,10 @@ import Cardano.Tracer.Handlers.RTView.Notifications.Utils
import Cardano.Tracer.Handlers.RTView.SSL.Certs
import Cardano.Tracer.Handlers.RTView.State.Displayed
import Cardano.Tracer.Handlers.RTView.State.EraSettings
import Cardano.Tracer.Handlers.RTView.State.Errors
import Cardano.Tracer.Handlers.RTView.State.Last
import Cardano.Tracer.Handlers.RTView.State.TraceObjects
import Cardano.Tracer.Handlers.RTView.UI.HTML.Main
import Cardano.Tracer.Handlers.RTView.Update.EraSettings
import Cardano.Tracer.Handlers.RTView.Update.Errors
import Cardano.Tracer.Handlers.RTView.Update.Historical

-- | RTView is a part of 'cardano-tracer' that provides an ability
Expand Down Expand Up @@ -54,7 +52,6 @@ runRTView tracerEnv =
-- period when RTView web-page wasn't opened.
lastResources <- initLastResources
eraSettings <- initErasSettings
errors <- initErrors

void . sequenceConcurrently $
[ UI.startGUI (config host port certFile keyFile) $
Expand All @@ -65,11 +62,9 @@ runRTView tracerEnv =
reloadFlag
logging
network
errors
, runHistoricalUpdater tracerEnv lastResources
, runHistoricalBackup tracerEnv
, runEraSettingsUpdater tracerEnv eraSettings
, runErrorsUpdater tracerEnv errors
]
where
TracerConfig{network, logging, hasRTView} = teConfig tracerEnv
Expand Down
153 changes: 0 additions & 153 deletions cardano-tracer/src/Cardano/Tracer/Handlers/RTView/State/Errors.hs

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,22 @@
{-# LANGUAGE OverloadedStrings #-}

module Cardano.Tracer.Handlers.RTView.State.TraceObjects
( Namespace
( LogsLiveViewCounters
, Namespace
, SavedTraceObjects
, TraceObjectInfo
, getLogsLiveViewCounter
, getTraceObjects
, incLogsLiveViewCounter
, initLogsLiveViewCounters
, initSavedTraceObjects
, saveTraceObjects
) where

import Control.Concurrent.STM (atomically)
import Control.Concurrent.STM.TVar (TVar, modifyTVar', newTVarIO)
import Control.Monad (unless)
import Control.Concurrent.STM.TQueue
import Control.Concurrent.STM.TVar (TVar, modifyTVar', newTVarIO, readTVar, readTVarIO)
import Control.Monad (forM_, unless)
import Data.Map.Strict (Map)
import qualified Data.Map.Strict as M
import Data.Maybe (mapMaybe)
Expand All @@ -25,24 +31,32 @@ import Cardano.Tracer.Types (NodeId)
type Namespace = Text
type TraceObjectInfo = (Text, SeverityS, UTCTime)

-- | We have to store 'TraceObject's received from the node,
-- to be able to update corresponding elements (on the web page)
-- using the values extracted from these 'TraceObject's.
type SavedForNode = Map Namespace TraceObjectInfo
type SavedForNode = TQueue (Namespace, TraceObjectInfo)
type SavedTraceObjects = TVar (Map NodeId SavedForNode)

initSavedTraceObjects :: IO SavedTraceObjects
initSavedTraceObjects = newTVarIO M.empty

saveTraceObjects :: SavedTraceObjects -> NodeId -> [TraceObject] -> IO ()
saveTraceObjects
:: SavedTraceObjects
-> NodeId
-> [TraceObject]
-> IO ()
saveTraceObjects savedTraceObjects nodeId traceObjects =
unless (null itemsToSave) $
atomically $ modifyTVar' savedTraceObjects $ \savedTO ->
case M.lookup nodeId savedTO of
Nothing ->
M.insert nodeId (M.fromList itemsToSave) savedTO
Just savedTOForThisNode ->
M.adjust (const $! savedTOForThisNode `updateSavedBy` itemsToSave) nodeId savedTO
unless (null itemsToSave) $ atomically $ do
savedTO' <- readTVar savedTraceObjects
case M.lookup nodeId savedTO' of
Nothing -> do
-- There is no queue for this node yet, so create it, fill it and save it.
newQ <- newTQueue
pushItemsToQueue newQ
modifyTVar' savedTraceObjects $ \savedTO ->
case M.lookup nodeId savedTO of
Nothing -> M.insert nodeId newQ savedTO
Just _ -> savedTO
Just qForThisNode ->
-- There is a queue for this node already, so fill it.
pushItemsToQueue qForThisNode
where
itemsToSave = mapMaybe getTOValue traceObjects

Expand All @@ -56,8 +70,34 @@ saveTraceObjects savedTraceObjects nodeId traceObjects =

mkName = intercalate "."

-- Update saved 'TraceObject's by new ones: existing value will be replaced.
updateSavedBy = go
where
go saved [] = saved
go saved ((ns, toI):others) = M.insert ns toI saved `go` others
pushItemsToQueue = forM_ itemsToSave . writeTQueue

getTraceObjects
:: SavedTraceObjects
-> NodeId
-> IO [(Namespace, TraceObjectInfo)]
getTraceObjects savedTraceObjects nodeId = atomically $ do
qForThisNode <- M.lookup nodeId <$> readTVar savedTraceObjects
maybe (return []) flushTQueue qForThisNode

-- | Counters for displayed logs item in "live view window".
type LogsLiveViewCounters = TVar (Map NodeId Int)

initLogsLiveViewCounters :: IO LogsLiveViewCounters
initLogsLiveViewCounters = newTVarIO M.empty

incLogsLiveViewCounter
:: LogsLiveViewCounters
-> NodeId
-> IO ()
incLogsLiveViewCounter llvCounters nodeId = atomically $
modifyTVar' llvCounters $ \currentCounters ->
case M.lookup nodeId currentCounters of
Nothing -> M.insert nodeId 1 currentCounters
Just counterForNode -> M.adjust (const $! counterForNode + 1) nodeId currentCounters

getLogsLiveViewCounter
:: LogsLiveViewCounters
-> NodeId
-> IO (Maybe Int)
getLogsLiveViewCounter llvCounters nodeId = M.lookup nodeId <$> readTVarIO llvCounters

Large diffs are not rendered by default.

Loading

0 comments on commit 347b65f

Please sign in to comment.