gipeda-0.1.1: src/GraphSummaries.hs
{-# LANGUAGE OverloadedStrings #-}
module GraphSummaries where
import qualified Data.ByteString.Lazy as BS
import Data.Aeson
import Data.Aeson.Types
import Control.Monad
import qualified Data.Text as T
import qualified Data.Map as M
import Paths
import JsonUtils
import ReportTypes
import ReadResult
graphSummaries :: [BenchName] -> IO ()
graphSummaries benchNames = do
g <- forM benchNames $ \bName -> do
json <- BS.readFile (graphFile bName)
graph <- case eitherDecode json of
Left e -> fail e
Right rep -> return rep
let gps = either (error.show) id . flip parseEither graph $ \obj -> do
revs <- obj .: "revisions"
forM (M.elems (revs :: M.Map T.Text Object)) $ \rev -> do
results <- rev .: "benchResults"
result <- results .: T.pack bName
parseJSON result
return $ T.pack bName .= object
[ T.pack "improvements" .= length [ () | gp <- gps, gpChangeType gp == Improvement ]
, T.pack "regressions" .= length [ () | gp <- gps, gpChangeType gp == Regression]
]
let o = object [ "graphSummaries" .= object g ]
BS.putStr $ encode o