faf006e696a77d1de847627b4b6991ca060b6a87
[gipeda.git] / src / GraphSummaries.hs
1 {-# LANGUAGE OverloadedStrings #-}
2 module GraphSummaries where
3
4 import qualified Data.ByteString.Lazy as BS
5 import Data.Aeson
6 import Data.Aeson.Types
7 import Control.Monad
8 import qualified Data.Text as T
9 import qualified Data.Map as M
10
11 import Paths
12 import JsonUtils
13 import ReportTypes
14 import ReadResult
15
16 graphSummaries :: [BenchName] -> IO ()
17 graphSummaries benchNames = do
18     g <- forM benchNames $ \bName -> do
19         json <- BS.readFile (graphFile bName)
20         graph <- case eitherDecode json of
21             Left e -> fail e
22             Right rep -> return rep
23         let gps = either (error.show) id . flip parseEither graph $ \obj -> do
24                 revs <- obj .: "revisions"
25                 forM (M.elems (revs :: M.Map T.Text Object)) $ \rev -> do
26                     results <- rev .: "benchResults"
27                     result <- results .: T.pack bName
28                     parseJSON result
29         return $ object [
30             T.pack bName .= object
31                 [ T.pack "improvements" .= length [ () | gp <- gps, gpChangeType gp == Improvement ]
32                 , T.pack "regressions"  .= length [ () | gp <- gps, gpChangeType gp == Regression]
33                 ]
34             ]
35     let o = object [ "graphSummaries" .= merges g ]
36     BS.putStr $ encode o