Skip to content

Commit

Permalink
bench | locli: report version information better: always, in-line and…
Browse files Browse the repository at this point in the history
… as normal output

# Conflicts:
#	nix/workbench/lib-cabal.sh
  • Loading branch information
deepfire committed Jan 17, 2022
1 parent 024e332 commit 2a7c7b2
Show file tree
Hide file tree
Showing 10 changed files with 77 additions and 45 deletions.
1 change: 1 addition & 0 deletions bench/locli/locli.cabal
Expand Up @@ -25,6 +25,7 @@ library
Cardano.Analysis.ChainFilter
Cardano.Analysis.Driver
Cardano.Analysis.MachTimeline
Cardano.Analysis.Version

Cardano.Unlog.Commands
Cardano.Unlog.LogObject
Expand Down
7 changes: 5 additions & 2 deletions bench/locli/src/Cardano/Analysis/API.hs
Expand Up @@ -23,6 +23,7 @@ import Ouroboros.Network.Block (BlockNo(..))

import Cardano.Analysis.ChainFilter
import Cardano.Analysis.Profile
import Cardano.Analysis.Version
import Cardano.Logging.Resources.Types
import Cardano.Unlog.LogObject hiding (Text)
import Cardano.Unlog.Render
Expand All @@ -36,7 +37,8 @@ import Data.Distribution
-- | Results of block propagation analysis.
data BlockPropagation
= BlockPropagation
{ bpSlotRange :: !(SlotNo, SlotNo) -- ^ Analysis range, inclusive.
{ bpVersion :: !Version
, bpSlotRange :: !(SlotNo, SlotNo) -- ^ Analysis range, inclusive.
, bpForgerForges :: !(Distribution Float NominalDiffTime)
, bpForgerAdoptions :: !(Distribution Float NominalDiffTime)
, bpForgerAnnouncements :: !(Distribution Float NominalDiffTime)
Expand Down Expand Up @@ -143,7 +145,8 @@ data DataDomain
-- | The top-level representation of the machine timeline analysis results.
data MachTimeline
= MachTimeline
{ sSlotRange :: (SlotNo, SlotNo) -- ^ Analysis range, inclusive.
{ sVersion :: !Version
, sSlotRange :: (SlotNo, SlotNo) -- ^ Analysis range, inclusive.
, sMaxChecks :: !Word64
, sSlotMisses :: ![Word64]
, sSpanLensCPU85 :: ![Int]
Expand Down
2 changes: 2 additions & 0 deletions bench/locli/src/Cardano/Analysis/BlockProp.hs
Expand Up @@ -52,6 +52,7 @@ import Data.Distribution
import Cardano.Analysis.API
import Cardano.Analysis.ChainFilter
import Cardano.Analysis.Profile
import Cardano.Analysis.Version
import Cardano.Unlog.LogObject hiding (Text)
import Cardano.Unlog.Render
import Cardano.Unlog.Resources
Expand Down Expand Up @@ -281,6 +282,7 @@ doBlockProp p cFilters eventMaps = do
| p@(Perc p') <- adoptionPcts <> [Perc 1.0] ]
, bpSizes = forgerEventsCDF (Just . bfBlockSize . beForge)
, bpChainBlockEvents = chain
, bpVersion = getVersion
}
where
chain, chainV :: [BlockEvents]
Expand Down
28 changes: 23 additions & 5 deletions bench/locli/src/Cardano/Analysis/Driver.hs
Expand Up @@ -12,7 +12,8 @@ module Cardano.Analysis.Driver
, runAnalysisCommand
) where

import Prelude (String, error)
import Prelude (String)
import Prelude qualified as P (error, head)
import Cardano.Prelude

import Control.Arrow ((&&&))
Expand All @@ -36,6 +37,7 @@ import Cardano.Analysis.BlockProp
import Cardano.Analysis.ChainFilter
import Cardano.Analysis.MachTimeline
import Cardano.Analysis.Profile
import Cardano.Analysis.Version
import Cardano.Unlog.Commands
import Cardano.Unlog.LogObject hiding (Text)
import Cardano.Unlog.Render
Expand Down Expand Up @@ -72,11 +74,27 @@ renderAnalysisCmdError cmd err =
, mconcat (renderer cmdErr)
]

-- | This estimates the run identifier, given the expected path structure.
logfileRunIdentifier :: Text -> Text
logfileRunIdentifier fp =
case drop (length xs - 3) xs of
rundir:_ -> rundir
_ -> fp
where
xs = T.split (== '/') fp

textId :: FilePath -> Text
textId inputfp = mconcat
[ "input: ", logfileRunIdentifier (T.pack inputfp), " "
, "locli: ", gitRev getVersion
]

--
-- Analysis command dispatch
--
runAnalysisCommand :: AnalysisCommand -> ExceptT AnalysisCmdError IO ()
runAnalysisCommand (MachineTimelineCmd genesisFile metaFile mChFiltersFile logfiles oFiles) = do
progress "run" (Q . T.unpack . logfileRunIdentifier . T.pack . unJsonLogfile $ P.head logfiles)
progress "genesis" (Q $ unJsonGenesisFile genesisFile)
progress "meta" (Q $ unJsonRunMetafile metaFile)
chainInfo <-
Expand All @@ -99,6 +117,7 @@ runAnalysisCommand (MachineTimelineCmd genesisFile metaFile mChFiltersFile logfi
firstExceptT AnalysisCmdError $
runMachineTimeline chainInfo logfiles chFilters oFiles
runAnalysisCommand (BlockPropagationCmd genesisFile metaFile mChFiltersFile logfiles oFiles) = do
progress "run" (Q . T.unpack . logfileRunIdentifier . T.pack . unJsonLogfile $ P.head logfiles)
progress "genesis" (Q $ unJsonGenesisFile genesisFile)
progress "meta" (Q $ unJsonRunMetafile metaFile)
chainInfo <-
Expand Down Expand Up @@ -156,7 +175,7 @@ runBlockPropagation cInfo chConds logfiles BlockPropagationOutputFiles{..} = do
\(TextOutputFile f) ->
withFile f WriteMode $ \hnd -> do
progress "pretty-timeline" (Q f)
hPutStrLn hnd . T.pack $ printf "--- input: %s" f
hPutStrLn hnd $ textId f
mapM_ (T.hPutStrLn hnd)
(renderDistributions (cProfile cInfo) RenderPretty blockPropagation)
mapM_ (T.hPutStrLn hnd)
Expand Down Expand Up @@ -271,8 +290,7 @@ runMachineTimeline chainInfo logfiles chFilters MachineTimelineOutputFiles{..} =
renderPrettyMachTimeline xs s (TextOutputFile f) =
withFile f WriteMode $ \hnd -> do
progress "pretty-timeline" (Q f)
hPutStrLn hnd . T.pack $
printf "--- input: %s" f
hPutStrLn hnd $ textId f
mapM_ (T.hPutStrLn hnd)
(renderDistributions p RenderPretty s)
mapM_ (T.hPutStrLn hnd)
Expand All @@ -290,7 +308,7 @@ runMachineTimeline chainInfo logfiles chFilters MachineTimelineOutputFiles{..} =
renderRunScalars rs
renderExportTimeline :: [SlotStats] -> CsvOutputFile -> IO ()
renderExportTimeline _xs (CsvOutputFile _o) =
error "Timeline export is not supported."
P.error "Timeline export is not supported."
-- withFile o WriteMode $
-- mapM_ (T.hPutStrLn hnd) (renderTimeline xs)

Expand Down
2 changes: 2 additions & 0 deletions bench/locli/src/Cardano/Analysis/MachTimeline.hs
Expand Up @@ -27,6 +27,7 @@ import Data.Distribution

import Cardano.Analysis.API
import Cardano.Analysis.Profile
import Cardano.Analysis.Version
import Cardano.Unlog.LogObject hiding (Text)
import Cardano.Unlog.Render
import Cardano.Unlog.Resources
Expand Down Expand Up @@ -85,6 +86,7 @@ slotStatsMachTimeline CInfo{} slots =
computeResDistrib stdPercentiles resDistProjs slots
, sSpanLensCPU85EBndDistrib = computeDistribution stdPercentiles sSpanLensCPU85EBnd
, sSpanLensCPU85RwdDistrib = computeDistribution stdPercentiles sSpanLensCPU85Rwd
, sVersion = getVersion
}
where
sSpanLensCPU85EBnd = Vec.length <$>
Expand Down
28 changes: 28 additions & 0 deletions bench/locli/src/Cardano/Analysis/Version.hs
@@ -0,0 +1,28 @@
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE ImportQualifiedPost #-}
module Cardano.Analysis.Version
(Version (..), getVersion)
where

import Data.Aeson (ToJSON(..), FromJSON(..))
import Data.Text (Text, pack)
import Data.Version (showVersion)
import GHC.Generics (Generic)
import Paths_locli (version)
import Prelude (Show)
import Cardano.Config.Git.Rev qualified (gitRev)


data Version =
Version
{ gitRev :: Text
, version :: Text
}
deriving (Generic, FromJSON, Show, ToJSON)

getVersion :: Version
getVersion =
Version
Cardano.Config.Git.Rev.gitRev
(pack (showVersion Paths_locli.version))
19 changes: 0 additions & 19 deletions bench/locli/src/Cardano/Unlog/Parsers.hs
Expand Up @@ -33,7 +33,6 @@ parseCommand :: Parser Command
parseCommand =
asum
[ parseAnalysis
, parseDisplayVersion
]

parseAnalysis :: Parser Command
Expand All @@ -47,21 +46,3 @@ parseAnalysis =
"Log analysis"
parseAnalysisCommands
]

parseDisplayVersion :: Parser Command
parseDisplayVersion =
subparser
(mconcat
[ commandGroup "Miscellaneous commands"
, metavar "Miscellaneous commands"
, command'
"version"
"Show the locli version"
(pure DisplayVersion)
]
)
<|> flag' DisplayVersion
( long "version"
<> help "Show the locli version"
<> hidden
)
26 changes: 9 additions & 17 deletions bench/locli/src/Cardano/Unlog/Run.hs
Expand Up @@ -5,47 +5,39 @@ module Cardano.Unlog.Run
, CommandErrors
, renderCommandError
, runCommand
-- * Re-exports
, gitRev
,
) where

import Cardano.Prelude

import Control.Monad.Trans.Except.Extra (firstExceptT)
import Data.Text qualified as Text
import Data.Aeson qualified as AE
import Data.ByteString.Lazy.Char8 qualified as LBS

import Cardano.Analysis.Driver (AnalysisCmdError, renderAnalysisCmdError,
runAnalysisCommand)
import Cardano.Unlog.Commands (AnalysisCommand)

import Cardano.Config.Git.Rev (gitRev)
import Data.Version (showVersion)
import Paths_locli (version)
import Cardano.Analysis.Version

-- | Sub-commands of 'locli'.
data Command =

-- | Analysis commands
AnalysisCommand AnalysisCommand

| DisplayVersion
deriving Show

data CommandErrors
= AnalysisError AnalysisCommand AnalysisCmdError
deriving Show

runCommand :: Command -> ExceptT CommandErrors IO ()
runCommand (AnalysisCommand c) = firstExceptT (AnalysisError c) $ runAnalysisCommand c
runCommand DisplayVersion = runDisplayVersion
runCommand (AnalysisCommand c) = do
liftIO $ LBS.putStrLn $ AE.encode getVersion
firstExceptT (AnalysisError c) $ runAnalysisCommand c

renderCommandError :: CommandErrors -> Text
renderCommandError (AnalysisError cmd err) =
renderAnalysisCmdError cmd err

runDisplayVersion :: ExceptT CommandErrors IO ()
runDisplayVersion = do
liftIO . putTextLn $ mconcat
[ "locli ", renderVersion version
, ", git rev ", gitRev
]
where
renderVersion = Text.pack . showVersion
8 changes: 6 additions & 2 deletions nix/workbench/lib-cabal.sh
Expand Up @@ -31,11 +31,15 @@ function cardano-topology() {
}

function locli() {
cabal -v0 run exe:locli -- "$@"
cabal -v0 build exe:locli
set-git-rev \
$(git rev-parse HEAD) \
$(find ./dist-newstyle/build/ -type f -name locli)
cabal -v0 exec locli -- "$@"
}

function tx-generator() {
cabal -v0 run exe:tx-generator -- "$@"
cabal -v0 run exe:tx-generator -- "$@"
}

export WORKBENCH_CABAL_MODE=t
Expand Down
1 change: 1 addition & 0 deletions shell.nix
Expand Up @@ -73,6 +73,7 @@ let
cardano-ping
cabalWrapped
ghcid
haskellBuildUtils
pkgs.graphviz
weeder
nixWrapped
Expand Down

0 comments on commit 2a7c7b2

Please sign in to comment.