packages feed

tkyprof-0.0.1: bin/prof2json.hs

module Main where
import Blaze.ByteString.Builder (toByteStringIO)
import Control.Applicative
import Control.Exception (bracket)
import Control.Monad.Trans (liftIO)
import Data.Aeson (toJSON)
import Data.Aeson.Encode (fromValue)
import Data.Enumerator (Iteratee, ($$), run_)
import ProfilingReport (ProfilingReport(..), profilingReportI)
import System.Environment (getArgs)
import System.FilePath (dropExtension)
import System.IO (IOMode(WriteMode), openFile, hClose)
import qualified Data.ByteString as S
import qualified Data.Enumerator.Binary as E

main :: IO ()
main = getArgs >>= mapM_ (run_ . job)

job :: FilePath -> Iteratee S.ByteString IO ()
job f = E.enumFile f $$ iterJob json
  where
    json = dropExtension f ++ ".json"

iterJob :: FilePath -> Iteratee S.ByteString IO ()
iterJob fpath = do
  builder <- fromValue . toJSON . reportCostCentres <$> profilingReportI
  liftIO $ bracket (openFile fpath WriteMode)
                   hClose
                   (\h -> toByteStringIO (S.hPut h) builder)