Skip to content

Commit 0c83a16

Browse files
author
Denis Shevchenko
committed
cardano-tracer: RTView logs live view
1 parent ab8d8d2 commit 0c83a16

File tree

21 files changed

+741
-708
lines changed

21 files changed

+741
-708
lines changed

cardano-tracer/cardano-tracer.cabal

Lines changed: 4 additions & 4 deletions
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
@@ -85,6 +84,7 @@ library
8584
Cardano.Tracer.Handlers.RTView.UI.JS.Utils
8685
Cardano.Tracer.Handlers.RTView.UI.Img.Icons
8786
Cardano.Tracer.Handlers.RTView.UI.Charts
87+
Cardano.Tracer.Handlers.RTView.UI.Logs
8888
Cardano.Tracer.Handlers.RTView.UI.Notifications
8989
Cardano.Tracer.Handlers.RTView.UI.Theme
9090
Cardano.Tracer.Handlers.RTView.UI.Types
@@ -93,10 +93,10 @@ library
9393
Cardano.Tracer.Handlers.RTView.Update.Chain
9494
Cardano.Tracer.Handlers.RTView.Update.EKG
9595
Cardano.Tracer.Handlers.RTView.Update.EraSettings
96-
Cardano.Tracer.Handlers.RTView.Update.Errors
9796
Cardano.Tracer.Handlers.RTView.Update.Historical
9897
Cardano.Tracer.Handlers.RTView.Update.KES
9998
Cardano.Tracer.Handlers.RTView.Update.Leadership
99+
Cardano.Tracer.Handlers.RTView.Update.Logs
100100
Cardano.Tracer.Handlers.RTView.Update.NodeInfo
101101
Cardano.Tracer.Handlers.RTView.Update.NodeState
102102
Cardano.Tracer.Handlers.RTView.Update.Nodes
@@ -118,7 +118,7 @@ library
118118
other-modules: Paths_cardano_tracer
119119

120120
build-depends: aeson
121-
, aeson-pretty
121+
-- , aeson-pretty
122122
, async
123123
, async-extras
124124
, bimap

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

Lines changed: 0 additions & 5 deletions
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

Lines changed: 0 additions & 153 deletions
This file was deleted.

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

Lines changed: 60 additions & 20 deletions
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/System.hs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ module Cardano.Tracer.Handlers.RTView.System
55
( getPathToBackupDir
66
, getPathToChartColorsDir
77
, getPathToChartsConfig
8+
, getPathToLogsLiveViewFontConfig
89
, getPathToThemeConfig
910
, getPathsToNotificationsSettings
1011
, getPathsToSSLCerts
@@ -34,9 +35,12 @@ getProcessId =
3435
return $ fromIntegral pid
3536
#endif
3637

37-
getPathToChartsConfig, getPathToThemeConfig :: TracerEnv -> IO FilePath
38+
getPathToChartsConfig
39+
, getPathToThemeConfig
40+
, getPathToLogsLiveViewFontConfig :: TracerEnv -> IO FilePath
3841
getPathToChartsConfig = getPathToConfig "charts"
3942
getPathToThemeConfig = getPathToConfig "theme"
43+
getPathToLogsLiveViewFontConfig = getPathToConfig "llvFontSize"
4044

4145
getPathToConfig :: FilePath -> TracerEnv -> IO FilePath
4246
getPathToConfig configName TracerEnv{teRTViewStateDir} = do

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

Lines changed: 8 additions & 2 deletions
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)