Skip to content

Commit 500c598

Browse files
author
Denis Shevchenko
committed
cardano-tracer: RTView logs live view
1 parent 3586f5b commit 500c598

File tree

19 files changed

+679
-707
lines changed

19 files changed

+679
-707
lines changed

cardano-tracer/cardano-tracer.cabal

+3-4
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,6 @@ library
6161

6262
Cardano.Tracer.Handlers.RTView.State.Displayed
6363
Cardano.Tracer.Handlers.RTView.State.EraSettings
64-
Cardano.Tracer.Handlers.RTView.State.Errors
6564
Cardano.Tracer.Handlers.RTView.State.Historical
6665
Cardano.Tracer.Handlers.RTView.State.Last
6766
Cardano.Tracer.Handlers.RTView.State.Peers
@@ -73,10 +72,10 @@ library
7372
Cardano.Tracer.Handlers.RTView.UI.CSS.Own
7473
Cardano.Tracer.Handlers.RTView.UI.HTML.Node.Column
7574
Cardano.Tracer.Handlers.RTView.UI.HTML.Node.EKG
76-
Cardano.Tracer.Handlers.RTView.UI.HTML.Node.Errors
7775
Cardano.Tracer.Handlers.RTView.UI.HTML.Node.Peers
7876
Cardano.Tracer.Handlers.RTView.UI.HTML.About
7977
Cardano.Tracer.Handlers.RTView.UI.HTML.Body
78+
Cardano.Tracer.Handlers.RTView.UI.HTML.Logs
8079
Cardano.Tracer.Handlers.RTView.UI.HTML.Main
8180
Cardano.Tracer.Handlers.RTView.UI.HTML.NoNodes
8281
Cardano.Tracer.Handlers.RTView.UI.HTML.Notifications
@@ -93,10 +92,10 @@ library
9392
Cardano.Tracer.Handlers.RTView.Update.Chain
9493
Cardano.Tracer.Handlers.RTView.Update.EKG
9594
Cardano.Tracer.Handlers.RTView.Update.EraSettings
96-
Cardano.Tracer.Handlers.RTView.Update.Errors
9795
Cardano.Tracer.Handlers.RTView.Update.Historical
9896
Cardano.Tracer.Handlers.RTView.Update.KES
9997
Cardano.Tracer.Handlers.RTView.Update.Leadership
98+
Cardano.Tracer.Handlers.RTView.Update.Logs
10099
Cardano.Tracer.Handlers.RTView.Update.NodeInfo
101100
Cardano.Tracer.Handlers.RTView.Update.NodeState
102101
Cardano.Tracer.Handlers.RTView.Update.Nodes
@@ -118,7 +117,7 @@ library
118117
other-modules: Paths_cardano_tracer
119118

120119
build-depends: aeson
121-
, aeson-pretty
120+
-- , aeson-pretty
122121
, async
123122
, async-extras
124123
, bimap

cardano-tracer/src/Cardano/Tracer/Handlers/RTView/Run.hs

-5
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,10 @@ import Cardano.Tracer.Handlers.RTView.Notifications.Utils
2121
import Cardano.Tracer.Handlers.RTView.SSL.Certs
2222
import Cardano.Tracer.Handlers.RTView.State.Displayed
2323
import Cardano.Tracer.Handlers.RTView.State.EraSettings
24-
import Cardano.Tracer.Handlers.RTView.State.Errors
2524
import Cardano.Tracer.Handlers.RTView.State.Last
2625
import Cardano.Tracer.Handlers.RTView.State.TraceObjects
2726
import Cardano.Tracer.Handlers.RTView.UI.HTML.Main
2827
import Cardano.Tracer.Handlers.RTView.Update.EraSettings
29-
import Cardano.Tracer.Handlers.RTView.Update.Errors
3028
import Cardano.Tracer.Handlers.RTView.Update.Historical
3129

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

5956
void . sequenceConcurrently $
6057
[ UI.startGUI (config host port certFile keyFile) $
@@ -65,11 +62,9 @@ runRTView tracerEnv =
6562
reloadFlag
6663
logging
6764
network
68-
errors
6965
, runHistoricalUpdater tracerEnv lastResources
7066
, runHistoricalBackup tracerEnv
7167
, runEraSettingsUpdater tracerEnv eraSettings
72-
, runErrorsUpdater tracerEnv errors
7368
]
7469
where
7570
TracerConfig{network, logging, hasRTView} = teConfig tracerEnv

cardano-tracer/src/Cardano/Tracer/Handlers/RTView/State/Errors.hs

-153
This file was deleted.

cardano-tracer/src/Cardano/Tracer/Handlers/RTView/State/TraceObjects.hs

+60-20
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,22 @@
22
{-# LANGUAGE OverloadedStrings #-}
33

44
module Cardano.Tracer.Handlers.RTView.State.TraceObjects
5-
( Namespace
5+
( LogsLiveViewCounters
6+
, Namespace
67
, SavedTraceObjects
78
, TraceObjectInfo
9+
, getLogsLiveViewCounter
10+
, getTraceObjects
11+
, incLogsLiveViewCounter
12+
, initLogsLiveViewCounters
813
, initSavedTraceObjects
914
, saveTraceObjects
1015
) where
1116

1217
import Control.Concurrent.STM (atomically)
13-
import Control.Concurrent.STM.TVar (TVar, modifyTVar', newTVarIO)
14-
import Control.Monad (unless)
18+
import Control.Concurrent.STM.TQueue
19+
import Control.Concurrent.STM.TVar (TVar, modifyTVar', newTVarIO, readTVar, readTVarIO)
20+
import Control.Monad (forM_, unless)
1521
import Data.Map.Strict (Map)
1622
import qualified Data.Map.Strict as M
1723
import Data.Maybe (mapMaybe)
@@ -25,24 +31,32 @@ import Cardano.Tracer.Types (NodeId)
2531
type Namespace = Text
2632
type TraceObjectInfo = (Text, SeverityS, UTCTime)
2733

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

3437
initSavedTraceObjects :: IO SavedTraceObjects
3538
initSavedTraceObjects = newTVarIO M.empty
3639

37-
saveTraceObjects :: SavedTraceObjects -> NodeId -> [TraceObject] -> IO ()
40+
saveTraceObjects
41+
:: SavedTraceObjects
42+
-> NodeId
43+
-> [TraceObject]
44+
-> IO ()
3845
saveTraceObjects savedTraceObjects nodeId traceObjects =
39-
unless (null itemsToSave) $
40-
atomically $ modifyTVar' savedTraceObjects $ \savedTO ->
41-
case M.lookup nodeId savedTO of
42-
Nothing ->
43-
M.insert nodeId (M.fromList itemsToSave) savedTO
44-
Just savedTOForThisNode ->
45-
M.adjust (const $! savedTOForThisNode `updateSavedBy` itemsToSave) nodeId savedTO
46+
unless (null itemsToSave) $ atomically $ do
47+
savedTO' <- readTVar savedTraceObjects
48+
case M.lookup nodeId savedTO' of
49+
Nothing -> do
50+
-- There is no queue for this node yet, so create it, fill it and save it.
51+
newQ <- newTQueue
52+
pushItemsToQueue newQ
53+
modifyTVar' savedTraceObjects $ \savedTO ->
54+
case M.lookup nodeId savedTO of
55+
Nothing -> M.insert nodeId newQ savedTO
56+
Just _ -> savedTO
57+
Just qForThisNode ->
58+
-- There is a queue for this node already, so fill it.
59+
pushItemsToQueue qForThisNode
4660
where
4761
itemsToSave = mapMaybe getTOValue traceObjects
4862

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

5771
mkName = intercalate "."
5872

59-
-- Update saved 'TraceObject's by new ones: existing value will be replaced.
60-
updateSavedBy = go
61-
where
62-
go saved [] = saved
63-
go saved ((ns, toI):others) = M.insert ns toI saved `go` others
73+
pushItemsToQueue = forM_ itemsToSave . writeTQueue
74+
75+
getTraceObjects
76+
:: SavedTraceObjects
77+
-> NodeId
78+
-> IO [(Namespace, TraceObjectInfo)]
79+
getTraceObjects savedTraceObjects nodeId = atomically $ do
80+
qForThisNode <- M.lookup nodeId <$> readTVar savedTraceObjects
81+
maybe (return []) flushTQueue qForThisNode
82+
83+
-- | Counters for displayed logs item in "live view window".
84+
type LogsLiveViewCounters = TVar (Map NodeId Int)
85+
86+
initLogsLiveViewCounters :: IO LogsLiveViewCounters
87+
initLogsLiveViewCounters = newTVarIO M.empty
88+
89+
incLogsLiveViewCounter
90+
:: LogsLiveViewCounters
91+
-> NodeId
92+
-> IO ()
93+
incLogsLiveViewCounter llvCounters nodeId = atomically $
94+
modifyTVar' llvCounters $ \currentCounters ->
95+
case M.lookup nodeId currentCounters of
96+
Nothing -> M.insert nodeId 1 currentCounters
97+
Just counterForNode -> M.adjust (const $! counterForNode + 1) nodeId currentCounters
98+
99+
getLogsLiveViewCounter
100+
:: LogsLiveViewCounters
101+
-> NodeId
102+
-> IO (Maybe Int)
103+
getLogsLiveViewCounter llvCounters nodeId = M.lookup nodeId <$> readTVarIO llvCounters

cardano-tracer/src/Cardano/Tracer/Handlers/RTView/UI/CSS/Bulma.hs

+8-2
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)