-------------------------------------------------------------------- -- | -- Module : Generate sparkline graphs of hackage uploads -- Copyright : (c) Don Stewart 2008 -- License : BSD3 -- -- Maintainer: Don Stewart -- Stability : provisional -- Portability: -- -------------------------------------------------------------------- import Data.List import Data.Maybe import Graphics.Rendering.HSparklines import System.Locale import System.Time import System.Time.Parse import System.Directory import System.FilePath import Text.HTML.Download url = "http://hackage.haskell.org/packages/archive/log" png1 = "hackage-monthly.png" png2 = "hackage-daily.png" main :: IO () main = do pwd <- getCurrentDirectory src <- openURL url let dates = catMaybes . sort . map parse . lines $ src -- uploads per year let permonth = groupBy month dates graph <- make ((barSpark {bgColor = rgb 0xee 0xee 0xee}) ) (map genericLength permonth) savePngFile png1 graph putStrLn $ "Wrote: " ++ pwd png1 -- print uploads this month let today = last dates thismonth = groupBy day . filter (month today) $ dates graph <- make ((barSpark {bgColor = rgb 0xee 0xee 0xee , limits = (0,20)} )) (map genericLength thismonth) savePngFile png2 graph putStrLn $ "Wrote: " ++ pwd png2 where parse = parseCalendarTime defaultTimeLocale "%c" month a b = ctYear a == ctYear b && ctMonth a == ctMonth b day a b = month a b && ctDay a == ctDay b