diff --git a/cardano-tracer/CHANGELOG.md b/cardano-tracer/CHANGELOG.md index fc6c3145e3c..d52d2ddbd52 100644 --- a/cardano-tracer/CHANGELOG.md +++ b/cardano-tracer/CHANGELOG.md @@ -1,5 +1,8 @@ # ChangeLog +## NEXT +* RTView: Remove monitoring based on the `NodePeers` datapoint, which has been removed since Node 10.6.2; fixes the RTView-enabled build. + ## 0.3.6 (November 2025) * Implement Prometheus HTTP service discovery (SD) under the URL `/targets` * Add optional config field `"prometheusLabels": { "": "", ... }` for custom labels to be attached with Prometheus SD diff --git a/cardano-tracer/cardano-tracer.cabal b/cardano-tracer/cardano-tracer.cabal index ba476b54209..6c600a57f01 100644 --- a/cardano-tracer/cardano-tracer.cabal +++ b/cardano-tracer/cardano-tracer.cabal @@ -73,13 +73,11 @@ library Cardano.Tracer.Handlers.RTView.State.EraSettings Cardano.Tracer.Handlers.RTView.State.Historical Cardano.Tracer.Handlers.RTView.State.Last - Cardano.Tracer.Handlers.RTView.State.Peers Cardano.Tracer.Handlers.RTView.UI.CSS.Bulma 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.Peers Cardano.Tracer.Handlers.RTView.UI.HTML.About Cardano.Tracer.Handlers.RTView.UI.HTML.Body Cardano.Tracer.Handlers.RTView.UI.HTML.Logs @@ -107,7 +105,6 @@ library Cardano.Tracer.Handlers.RTView.Update.NodeInfo Cardano.Tracer.Handlers.RTView.Update.NodeState Cardano.Tracer.Handlers.RTView.Update.Nodes - Cardano.Tracer.Handlers.RTView.Update.Peers Cardano.Tracer.Handlers.RTView.Update.Reload Cardano.Tracer.Handlers.RTView.Update.Resources Cardano.Tracer.Handlers.RTView.Update.Transactions diff --git a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/State/Peers.hs b/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/State/Peers.hs deleted file mode 100644 index 27bdca0856d..00000000000 --- a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/State/Peers.hs +++ /dev/null @@ -1,73 +0,0 @@ -module Cardano.Tracer.Handlers.RTView.State.Peers - ( PeerAddress - , PeersForNode - , Peers - , addPeer - , doesPeerExist - , getPeersAddresses - , initPeers - , removePeer - ) where - -import Cardano.Tracer.Types (NodeId) - -import Control.Concurrent.STM (atomically) -import Control.Concurrent.STM.TVar -import Data.Map.Strict (Map) -import qualified Data.Map.Strict as M -import Data.Set (Set) -import qualified Data.Set as S -import Data.Text (Text) - -type PeerAddress = Text -type PeersForNode = Set PeerAddress -type Peers = TVar (Map NodeId PeersForNode) - -initPeers :: IO Peers -initPeers = newTVarIO M.empty - -addPeer - :: Peers - -> NodeId - -> PeerAddress - -> IO () -addPeer peers nodeId peerAddr = atomically $ - modifyTVar' peers $ \currentPeers -> - case M.lookup nodeId currentPeers of - Nothing -> - M.insert nodeId (S.singleton peerAddr) currentPeers - Just peersForNode -> - M.adjust (const $ S.insert peerAddr peersForNode) nodeId currentPeers - -removePeer - :: Peers - -> NodeId - -> PeerAddress - -> IO () -removePeer peers nodeId peerAddr = atomically $ - modifyTVar' peers $ \currentPeers -> - case M.lookup nodeId currentPeers of - Nothing -> currentPeers - Just peersForNode -> - M.adjust (const $ S.delete peerAddr peersForNode) nodeId currentPeers - -doesPeerExist - :: Peers - -> NodeId - -> PeerAddress - -> IO Bool -doesPeerExist peers nodeId peerAddr = do - peers' <- readTVarIO peers - case M.lookup nodeId peers' of - Nothing -> return False - Just peersForNode -> return $ S.member peerAddr peersForNode - -getPeersAddresses - :: Peers - -> NodeId - -> IO (Set PeerAddress) -getPeersAddresses peers nodeId = do - peers' <- readTVarIO peers - case M.lookup nodeId peers' of - Nothing -> return S.empty - Just peersForNode -> return peersForNode diff --git a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/UI/HTML/Main.hs b/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/UI/HTML/Main.hs index 2d386a7c37c..33df05a3791 100644 --- a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/UI/HTML/Main.hs +++ b/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/UI/HTML/Main.hs @@ -8,7 +8,6 @@ import Cardano.Tracer.Configuration import Cardano.Tracer.Environment import Cardano.Tracer.Handlers.RTView.State.Displayed import Cardano.Tracer.Handlers.RTView.State.EraSettings -import Cardano.Tracer.Handlers.RTView.State.Peers import Cardano.Tracer.Handlers.RTView.UI.CSS.Bulma import Cardano.Tracer.Handlers.RTView.UI.CSS.Own import Cardano.Tracer.Handlers.RTView.UI.Charts @@ -22,7 +21,6 @@ import Cardano.Tracer.Handlers.RTView.Update.KES import Cardano.Tracer.Handlers.RTView.Update.Logs import Cardano.Tracer.Handlers.RTView.Update.NodeState import Cardano.Tracer.Handlers.RTView.Update.Nodes -import Cardano.Tracer.Handlers.RTView.Update.Peers import Cardano.Tracer.Handlers.RTView.Update.Reload import Cardano.Tracer.Handlers.State.TraceObjects import Cardano.Tracer.Handlers.Utils @@ -67,7 +65,6 @@ mkMainPage tracerEnv tracerEnvRTView displayedElements nodesEraSettings reloadFl colors <- initColors datasetIndices <- initDatasetsIndices - peers <- liftIO initPeers webPageIsOpened tracerEnvRTView @@ -139,7 +136,6 @@ mkMainPage tracerEnv tracerEnvRTView displayedElements nodesEraSettings reloadFl uiPeersTimer <- UI.timer # set UI.interval 4000 on_ UI.tick uiPeersTimer do askNSetNodeState tracerEnv displayedElements - updateNodesPeers tracerEnv peers updateKESInfo tracerEnv nodesEraSettings displayedElements UI.start uiLogsLiveViewTimer diff --git a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/UI/HTML/Node/Column.hs b/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/UI/HTML/Node/Column.hs index 0252afa9521..053a4187fd4 100644 --- a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/UI/HTML/Node/Column.hs +++ b/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/UI/HTML/Node/Column.hs @@ -8,7 +8,6 @@ module Cardano.Tracer.Handlers.RTView.UI.HTML.Node.Column import Cardano.Tracer.Configuration import Cardano.Tracer.Environment import Cardano.Tracer.Handlers.RTView.UI.HTML.Node.EKG -import Cardano.Tracer.Handlers.RTView.UI.HTML.Node.Peers import Cardano.Tracer.Handlers.RTView.UI.Img.Icons import Cardano.Tracer.Handlers.RTView.UI.JS.Utils import Cardano.Tracer.Handlers.RTView.UI.Utils @@ -45,14 +44,6 @@ addNodeColumn tracerEnv loggingConfig nodeId@(NodeId anId) = do kes <- nodeKES id' opCert <- nodeOpCert id' - peersTable <- mkPeersTable id' - peersDetailsButton <- UI.button ## (id' <> "__node-peers-details-button") - #. "button is-info" - # set UI.enabled False - # set text "Details" - on_ UI.click peersDetailsButton do - fadeInModal peersTable - ekgMetricsWindow <- mkEKGMetricsWindow id' ekgMetricsButton <- UI.button ## (id' <> "__node-ekg-metrics-button") #. "button is-info" @@ -86,14 +77,6 @@ addNodeColumn tracerEnv loggingConfig nodeId@(NodeId anId) = do addNodeCell "start-time" st addNodeCell "uptime" ut addNodeCell "logs" ls - addNodeCell "peers" [ UI.div #. "buttons has-addons" #+ - [ UI.button ## (id' <> "__node-peers-num") - #. "button is-static" - # set text "—" - , element peersDetailsButton - ] - , element peersTable - ] addNodeCell "leadership" leadership addNodeCell "kes" kes addNodeCell "op-cert" opCert diff --git a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/UI/HTML/Node/Peers.hs b/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/UI/HTML/Node/Peers.hs deleted file mode 100644 index 76d95ef1d09..00000000000 --- a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/UI/HTML/Node/Peers.hs +++ /dev/null @@ -1,63 +0,0 @@ -{-# LANGUAGE OverloadedStrings #-} -{-# LANGUAGE ScopedTypeVariables #-} - -module Cardano.Tracer.Handlers.RTView.UI.HTML.Node.Peers - ( mkPeersTable - , deletePeerRow - ) where - -import Cardano.Tracer.Handlers.RTView.State.Peers -import Cardano.Tracer.Handlers.RTView.UI.Utils -import Cardano.Tracer.Types - -import qualified Graphics.UI.Threepenny as UI -import Graphics.UI.Threepenny.Core - -mkPeersTable :: String -> UI Element -mkPeersTable anId = do - closeIt <- UI.button #. "delete" - peerTable <- - UI.div #. "modal" #+ - [ UI.div #. "modal-background" #+ [] - , UI.div #. "modal-card rt-view-peer-modal" #+ - [ UI.header #. "modal-card-head rt-view-peer-head" #+ - [ UI.p #. "modal-card-title rt-view-peer-title" #+ - [ string "Peers of " - , UI.span ## (anId <> "__node-name-for-peers") - #. "has-text-weight-bold" - # set text anId - ] - , element closeIt - ] - , UI.mkElement "section" #. "modal-card-body rt-view-peer-body" #+ - [ UI.div ## (anId <> "__peer-table-container") #. "table-container" #+ - [ UI.table ## (anId <> "__peer-table") #. "table is-fullwidth rt-view-peer-table" #+ - [ UI.mkElement "thead" #+ - [ UI.tr #+ - [ UI.th #+ [UI.span # set text "Address"] - , UI.th #+ [UI.mkElement "abbr" # set UI.title__ "Block fetch status" # set text "BF status"] - , UI.th #+ [UI.span # set text "Slot no."] - , UI.th #+ [UI.mkElement "abbr" # set UI.title__ "Requests in flight" # set text "Req"] - , UI.th #+ [UI.mkElement "abbr" # set UI.title__ "Blocks in flight" # set text "Blk"] - , UI.th #+ [UI.mkElement "abbr" # set UI.title__ "Bytes in flight" # set text "Bts"] - ] - ] - , UI.mkElement "tbody" ## (anId <> "__node-peers-tbody") #+ [] - ] - ] - ] - ] - ] - on_ UI.click closeIt do - element peerTable #. "modal" - return peerTable - --- | The peer was disconnected, so its row should be deleted. -deletePeerRow - :: UI.Window - -> NodeId - -> PeerAddress - -> UI () -deletePeerRow window (NodeId anId) peerAddr = do - let peerRowElId = anId <> peerAddr <> "__node-peer-row" - findAndDo window peerRowElId delete' diff --git a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/Update/Peers.hs b/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/Update/Peers.hs deleted file mode 100644 index 24f7b6a2e39..00000000000 --- a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/Update/Peers.hs +++ /dev/null @@ -1,140 +0,0 @@ -{-# LANGUAGE NamedFieldPuns #-} -{-# LANGUAGE OverloadedStrings #-} -{-# LANGUAGE ScopedTypeVariables #-} - -module Cardano.Tracer.Handlers.RTView.Update.Peers - ( updateNodesPeers - ) where - -import Cardano.Logging (showT) -import Cardano.Logging.Types.NodePeers (NodePeers(..)) -import Cardano.Tracer.Environment -import Cardano.Tracer.Handlers.RTView.State.Peers -import Cardano.Tracer.Handlers.RTView.UI.HTML.Node.Peers -import Cardano.Tracer.Handlers.RTView.UI.Utils -import Cardano.Tracer.Handlers.RTView.Utils -import Cardano.Tracer.Handlers.Utils -import Cardano.Tracer.Types - -import Control.Monad (forM_, void) -import Control.Monad.Extra (whenJustM) -import Data.List (find) -import Data.List.Extra (notNull) -import Data.Maybe (mapMaybe) -import Data.Set ((\\)) -import qualified Data.Set as S -import Data.Text (unpack) -import qualified Data.Text as T - -import qualified Graphics.UI.Threepenny as UI -import Graphics.UI.Threepenny.Core - -updateNodesPeers - :: TracerEnv - -> Peers - -> UI () -updateNodesPeers tracerEnv@TracerEnv{teDPRequestors, teCurrentDPLock} displayedPeers = do - window <- askWindow - forConnectedUI_ tracerEnv $ \nodeId -> do - whenJustM (liftIO $ askDataPoint teDPRequestors teCurrentDPLock nodeId "NodePeers") $ - doUpdatePeers window nodeId displayedPeers - -doUpdatePeers - :: UI.Window - -> NodeId - -> Peers - -> NodePeers - -> UI () -doUpdatePeers window nodeId@(NodeId anId) displayedPeers (NodePeers peersParts) = do - -- Update peers number. - setTextValue (anId <> "__node-peers-num") (showT (length peersParts)) - -- If there is at least one connected peer, we enable 'Details' button. - findAndSet (set UI.enabled $ notNull peersParts) - window $ anId <> "__node-peers-details-button" - -- Update particular info about peers. - let connectedPeers = getConnectedPeers - connectedPeersAddresses = getConnectedPeersAddresses - displayedPeersAddresses <- liftIO $ getPeersAddresses displayedPeers nodeId - if displayedPeersAddresses /= connectedPeersAddresses - then do - -- There are some changes with number of peers: some new were connected - -- and/or some displayed ones were disconnected. - let disconnectedPeers = displayedPeersAddresses \\ connectedPeersAddresses -- Not in connected - newlyConnectedPeers = connectedPeersAddresses \\ displayedPeersAddresses -- Not in displayed - deleteRowsForDisconnected disconnectedPeers - addRowsForNewlyConnected newlyConnectedPeers connectedPeers - else - -- No changes with number of peers, only their data was changed. - updateConnectedPeersData connectedPeers - where - getConnectedPeers = S.fromList $ - mapMaybe - (\peerPart -> let peerData = T.words peerPart in - if length peerData == 6 then Just peerData else Nothing - ) peersParts - - getConnectedPeersAddresses = S.map head getConnectedPeers - - deleteRowsForDisconnected disconnected = - forM_ disconnected $ \peerAddr -> do - deletePeerRow window nodeId peerAddr - liftIO $ removePeer displayedPeers nodeId peerAddr - - addRowsForNewlyConnected newlyConnectedPeers connectedPeers = - forM_ newlyConnectedPeers $ \peerAddr -> do - case find (\peerDataList -> head peerDataList == peerAddr) connectedPeers of - Just [_, status, slotNo, reqsInF, blocksInF, bytesInF] -> do - let idPrefix = anId <> peerAddr - addPeerRow idPrefix peerAddr status slotNo reqsInF blocksInF bytesInF - liftIO $ addPeer displayedPeers nodeId peerAddr - _ -> return () - - addPeerRow idPrefix peerAddr status slotNo reqsInF blocksInF bytesInF = do - let idPrefix' = unpack idPrefix - whenJustM (UI.getElementById window (unpack anId <> "__node-peers-tbody")) $ \el -> - void $ element el #+ - [ UI.tr ## (idPrefix' <> "__node-peer-row") #+ - [ UI.td #+ - [ UI.span ## (idPrefix' <> "__address") - #. "is-family-monospace" - # set text (unpack peerAddr) - ] - , UI.td #+ - [ UI.span ## (idPrefix' <> "__status") - # set text (unpack status) - ] - , UI.td #+ - [ UI.span ## (idPrefix' <> "__slotNo") - # set text (unpack $ checkSlot slotNo) - ] - , UI.td #+ - [ UI.span ## (idPrefix' <> "__reqsInF") - # set text (unpack reqsInF) - ] - , UI.td #+ - [ UI.span ## (idPrefix' <> "__blocksInF") - # set text (unpack blocksInF) - ] - , UI.td #+ - [ UI.span ## (idPrefix' <> "__bytesInF") - # set text (unpack bytesInF) - ] - ] - ] - - updateConnectedPeersData connectedPeers = do - let allPeersData = concatMap collectDataToUpdate (S.toList connectedPeers) - -- Update values for all peers by one single FFI-call. - setTextValues allPeersData - - collectDataToUpdate [peerAddr, status, slotNo, reqsInF, blocksInF, bytesInF] = - let idPrefix = anId <> peerAddr - in [ (idPrefix <> "__status", status) - , (idPrefix <> "__slotNo", checkSlot slotNo) - , (idPrefix <> "__reqsInF", reqsInF) - , (idPrefix <> "__blocksInF", blocksInF) - , (idPrefix <> "__bytesInF", bytesInF) - ] - collectDataToUpdate _ = [] - - checkSlot slotNo = if slotNo == "???" then "—" else slotNo diff --git a/nix/workbench/genesis/genesis.sh b/nix/workbench/genesis/genesis.sh index fc84947288f..15f4e09a165 100644 --- a/nix/workbench/genesis/genesis.sh +++ b/nix/workbench/genesis/genesis.sh @@ -1,6 +1,6 @@ # shellcheck shell=bash -global_genesis_format_version=October-13-2026 +global_genesis_format_version=October-13-2025 usage_genesis() { usage "genesis" "Genesis" <