allow saving the bench report to an arbitrary location

This commit is contained in:
fanghr 2022-05-27 01:01:30 +08:00
parent 4a3882d90f
commit d192379d3c
3 changed files with 40 additions and 2 deletions

View file

@ -4,6 +4,7 @@ import Bench (specificationTreeToBenchmarks)
import Data.Csv (encodeDefaultOrderedByName) import Data.Csv (encodeDefaultOrderedByName)
import Data.Text.Lazy.Encoding (decodeUtf8) import Data.Text.Lazy.Encoding (decodeUtf8)
import Data.Text.Lazy.IO as I (writeFile) import Data.Text.Lazy.IO as I (writeFile)
import Options (Options (..), parseOptions)
import Prettyprinter (defaultLayoutOptions, layoutPretty, pretty) import Prettyprinter (defaultLayoutOptions, layoutPretty, pretty)
import Prettyprinter.Render.String (renderString) import Prettyprinter.Render.String (renderString)
import Spec.AuthorityToken qualified as AuthorityToken import Spec.AuthorityToken qualified as AuthorityToken
@ -20,7 +21,9 @@ import Prelude
main :: IO () main :: IO ()
main = do main = do
I.writeFile "bench.csv" $ options <- parseOptions
I.writeFile options.output $
(decodeUtf8 . encodeDefaultOrderedByName) res (decodeUtf8 . encodeDefaultOrderedByName) res
mapM_ (putStrLn . renderString . layoutPretty defaultLayoutOptions . pretty) res mapM_ (putStrLn . renderString . layoutPretty defaultLayoutOptions . pretty) res

31
agora-bench/Options.hs Normal file
View file

@ -0,0 +1,31 @@
module Options (Options (..), parseOptions) where
import Options.Applicative ((<**>))
import Options.Applicative qualified as Opt
newtype Options = Options
{ output :: FilePath
}
outputOpt :: Opt.Parser FilePath
outputOpt =
Opt.strOption
( Opt.long "output-path"
<> Opt.short 'o'
<> Opt.metavar "OUTPUT_PATH"
<> Opt.value "./bench.csv"
<> Opt.help "The path of the bench report file."
)
benchOpt :: Opt.Parser Options
benchOpt = Options <$> outputOpt
parseOptions :: IO Options
parseOptions = Opt.execParser p
where
p =
Opt.info
(benchOpt <**> Opt.helper)
( Opt.fullDesc
<> Opt.progDesc "Generate benchmark report of agora scripts"
)

View file

@ -212,13 +212,17 @@ benchmark agora-bench
import: lang, deps import: lang, deps
hs-source-dirs: agora-bench hs-source-dirs: agora-bench
main-is: Main.hs main-is: Main.hs
other-modules: Bench other-modules:
Bench
Options
type: exitcode-stdio-1.0 type: exitcode-stdio-1.0
build-depends: build-depends:
, agora , agora
, agora-sample , agora-sample
, agora-spec , agora-spec
, cassava , cassava
, optparse-applicative
executable agora-scripts executable agora-scripts
import: lang, deps, exe-opts import: lang, deps, exe-opts