Skip to content

Commit

Permalink
Merge pull request #104 from input-output-hk/cad-2315-update-elems-vi…
Browse files Browse the repository at this point in the history
…ew-mode

CAD-2315: update DOM-elems during changing view mode
  • Loading branch information
Denis Shevchenko committed Nov 24, 2020
2 parents e5c2c30 + c5fc50a commit 0031c6b
Show file tree
Hide file tree
Showing 2 changed files with 86 additions and 3 deletions.
76 changes: 74 additions & 2 deletions src/Cardano/RTView/GUI/Markup/PageBody.hs
Expand Up @@ -4,13 +4,15 @@ module Cardano.RTView.GUI.Markup.PageBody
( mkPageBody
) where

import Control.Concurrent.STM.TVar (TVar)
import Control.Concurrent.STM.TVar (TVar, modifyTVar')
import Control.Monad (forM, forM_, void, when)
import Control.Monad.Extra (whenJustM)
import Control.Monad.STM (atomically)
import qualified Data.HashMap.Strict as HM
import Data.Text (Text)
import qualified Data.Text as T
import qualified Graphics.UI.Threepenny as UI
import Graphics.UI.Threepenny.Core (Element, UI, element, set, string, (#), (#+))
import Graphics.UI.Threepenny.Core (Element, UI, element, liftIO, set, string, (#), (#+))

import Cardano.BM.Data.Configuration (RemoteAddrNamed (..))
import qualified Cardano.RTView.GUI.JS.Charts as Chart
Expand Down Expand Up @@ -104,9 +106,11 @@ mkPageBody nsTVar window acceptors = do

void $ UI.onEvent (UI.click paneViewButton) $ \_ -> do
toggleViewMode window "paneMode" bodyRootElem [element paneNodesRootElem] [element gridNodesRootElem]
forceChangingAllElements nsTVar
forElementWithId window (show SelectMetricButton) hideIt
void $ UI.onEvent (UI.click gridViewButton) $ \_ -> do
toggleViewMode window "gridMode" bodyRootElem [element gridNodesRootElem] [element paneNodesRootElem]
forceChangingAllElements nsTVar
forElementWithId window (show SelectMetricButton) showIt
forM_ acceptors $ \(RemoteAddrNamed nameOfNode _) -> do
UI.runFunction $ UI.ffi Chart.gridMemoryUsageChartJS (showt GridMemoryUsageChartId <> nameOfNode)
Expand All @@ -126,6 +130,74 @@ mkPageBody nsTVar window acceptors = do
showt :: Show a => a -> Text
showt = T.pack . show

forceChangingAllElements :: TVar NodesState -> UI ()
forceChangingAllElements nsTVar =
liftIO . atomically $ modifyTVar' nsTVar $
HM.fromList . map (\(nm, ns) -> (nm, setAllChangedFlags ns)) . HM.toList
where
setAllChangedFlags ns =
ns { peersMetrics =
(peersMetrics ns)
{ peersInfoChanged = True
}
, nodeMetrics =
(nodeMetrics ns)
{ nodeProtocolChanged = True
, nodeVersionChanged = True
, nodeCommitChanged = True
, nodePlatformChanged = True
, nodeStartTimeChanged = True
, nodeEndpointChanged = True
}
, mempoolMetrics =
(mempoolMetrics ns)
{ mempoolTxsNumberChanged = True
, mempoolTxsPercentChanged = True
, mempoolBytesChanged = True
, mempoolBytesPercentChanged = True
, mempoolMaxTxsChanged = True
, mempoolMaxBytesChanged = True
, txsProcessedChanged = True
}
, forgeMetrics =
(forgeMetrics ns)
{ nodeIsLeaderNumChanged = True
, slotsMissedNumberChanged = True
, nodeCannotForgeChanged = True
, blocksForgedNumberChanged = True
}
, rtsMetrics =
(rtsMetrics ns)
{ rtsMemoryAllocatedChanged = True
, rtsMemoryUsedChanged = True
, rtsMemoryUsedPercentChanged = True
, rtsGcCpuChanged = True
, rtsGcElapsedChanged = True
, rtsGcNumChanged = True
, rtsGcMajorNumChanged = True
}
, blockchainMetrics =
(blockchainMetrics ns)
{ systemStartTimeChanged = True
, epochChanged = True
, slotChanged = True
, blocksNumberChanged = True
, chainDensityChanged = True
}
, kesMetrics =
(kesMetrics ns)
{ remKESPeriodsChanged = True
, remKESPeriodsInDaysChanged = True
, opCertStartKESPeriodChanged = True
, opCertExpiryKESPeriodChanged = True
, currentKESPeriodChanged = True
}
, nodeErrors =
(nodeErrors ns)
{ errorsChanged = True
}
}

topNavigation
:: [UI Element]
-> [UI Element]
Expand Down
13 changes: 12 additions & 1 deletion src/Cardano/RTView/GUI/Updater.hs
Expand Up @@ -16,6 +16,7 @@ import Data.Maybe (fromJust, isJust)
import Data.HashMap.Strict ((!), (!?))
import qualified Data.HashMap.Strict as HM
import Data.Text (Text, pack, strip, unpack)
import qualified Data.Text as T
import Data.Time.Calendar (diffDays)
import Data.Time.Clock (NominalDiffTime, UTCTime (..), addUTCTime, getCurrentTime,
diffUTCTime)
Expand Down Expand Up @@ -273,7 +274,17 @@ evSetter
evSetter _ _ _ _ False _ _ = return ()
evSetter flagSetter tv nameOfNode ev True els elName =
whenJust (els !? elName) $ \el -> do
void $ setElement ev el
-- If the value is still default one, don't display it (it's meaningless).
let nothing = StringV none
ev' =
case ev of
IntV _ -> ev
IntegerV i -> if i < 0 then nothing else ev
Word64V w -> if w == 0 then nothing else ev
DoubleV d -> if d < 0 then nothing else ev
StringV s -> if null s then nothing else ev
TextV t -> if T.null t then nothing else ev
void $ setElement ev' el
setChangedFlag tv nameOfNode flagSetter

setElement
Expand Down

0 comments on commit 0031c6b

Please sign in to comment.