Skip to content

cardano-tracer: RTView logs live view #4531

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Oct 17, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 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 @@ -85,6 +84,7 @@ library
Cardano.Tracer.Handlers.RTView.UI.JS.Utils
Cardano.Tracer.Handlers.RTView.UI.Img.Icons
Cardano.Tracer.Handlers.RTView.UI.Charts
Cardano.Tracer.Handlers.RTView.UI.Logs
Cardano.Tracer.Handlers.RTView.UI.Notifications
Cardano.Tracer.Handlers.RTView.UI.Theme
Cardano.Tracer.Handlers.RTView.UI.Types
Expand All @@ -93,10 +93,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 +118,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
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ module Cardano.Tracer.Handlers.RTView.System
( getPathToBackupDir
, getPathToChartColorsDir
, getPathToChartsConfig
, getPathToLogsLiveViewFontConfig
, getPathToThemeConfig
, getPathsToNotificationsSettings
, getPathsToSSLCerts
Expand Down Expand Up @@ -34,9 +35,12 @@ getProcessId =
return $ fromIntegral pid
#endif

getPathToChartsConfig, getPathToThemeConfig :: TracerEnv -> IO FilePath
getPathToChartsConfig
, getPathToThemeConfig
, getPathToLogsLiveViewFontConfig :: TracerEnv -> IO FilePath
getPathToChartsConfig = getPathToConfig "charts"
getPathToThemeConfig = getPathToConfig "theme"
getPathToLogsLiveViewFontConfig = getPathToConfig "llvFontSize"

getPathToConfig :: FilePath -> TracerEnv -> IO FilePath
getPathToConfig configName TracerEnv{teRTViewStateDir} = do
Expand Down

Large diffs are not rendered by default.

Loading