{-# LANGUAGE OverloadedStrings #-} module Main where import OpenTelemetry.ChromeExporter import OpenTelemetry.EventlogStreaming_Internal import OpenTelemetry.Exporter import Options.Applicative import System.Clock import System.IO import Text.Printf data ConsoleOptions = ConsoleOptions Command deriving (Show) data Command = EventlogToChromeCmd FilePath deriving (Show) main :: IO () main = do (ConsoleOptions cmd) <- parseConsoleOptions case cmd of EventlogToChromeCmd path -> do let target_path = (path <> ".trace.json") printf "Converting %s to %s...\n" path target_path exporter <- createChromeSpanExporter target_path origin_timestamp <- fromIntegral . toNanoSecs <$> getTime Realtime work origin_timestamp exporter $ EventLogFilename path shutdown exporter putStrLn "\nAll done." readEventlogFileCmdParser :: Parser Command readEventlogFileCmdParser = EventlogToChromeCmd <$> argument str (metavar "FILE") consoleOptionParser :: Parser ConsoleOptions consoleOptionParser = ConsoleOptions <$> hsubparser (command "read" (info readEventlogFileCmdParser (progDesc "converts eventlog into chrome trace"))) parseConsoleOptions :: IO ConsoleOptions parseConsoleOptions = execParser $ info (consoleOptionParser <**> helper) fullDesc