{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE MultiWayIf #-} module Main (main) where import Control.Monad import Data.Aeson (encodeFile, Value, toJSON) import System.FilePath import System.Exit import System.IO import Eventlog.Args (args, Args(..)) import Eventlog.Bands (bands) import Eventlog.HtmlTemplate import Eventlog.Data import Eventlog.Vega import Eventlog.VegaTemplate import Eventlog.Types main :: IO () main = do a <- args when (null (files a)) exitSuccess argsToOutput a argsToOutput :: Args -> IO () argsToOutput a@Args{files = files, outputFile = Nothing} = if | json a -> forM_ files $ \file -> doOneJson a file (file <.> "json") | otherwise -> forM_ files $ \file -> doOneHtml a file (file <.> "html") argsToOutput a@Args{files = [fin], outputFile = Just fout} = if | json a -> doOneJson a fin fout | otherwise -> doOneHtml a fin fout argsToOutput _ = die "When the -o option is specified, exactly one eventlog file has to be passed." doOneJson :: Args -> FilePath -> FilePath -> IO () doOneJson a fin fout = do (_, val) <- generateJson fin a encodeFile fout val doOneHtml :: Args -> FilePath -> FilePath -> IO () doOneHtml a fin fout = do (header, data_json) <- generateJsonValidate checkTraces fin a let html = templateString header data_json a writeFile fout html where checkTraces :: ProfData -> IO () checkTraces (ProfData _ _ _ ts) = if length ts > 1000 then hPutStrLn stderr "More than 1000 traces, consider reducing using -i or -x" else return ()