module Bamboo.Model.Counter where
import Bamboo.Model.Env
import qualified System.IO as IO
hit :: String -> IO ()
hit x = create_stat_if_none x >> inc_stat
where
inc_stat = do
let i = x.count_path
c <- i.safe_read_line
let count = c.read :: Int
count.(+1).show.write_file i
count_name :: String -> String
count_name = (/ static_config.count_meta)
count_path :: String -> String
count_path = (static_config.stat_uri / ) > count_name
safe_read_line :: String -> IO String
safe_read_line x = with_file x IO.ReadMode IO.hGetLine
create_stat_if_none :: String -> IO ()
create_stat_if_none x = do
let i = x.count_path
whenM (i.file_exist ^ not) $
i.create_stat
where
create_stat x' = mkdir_p (x'.take_directory)
>> default_count.show.write_file x'
default_count = 1 :: Int
read_stat :: String -> IO Int
read_stat x = do
create_stat_if_none x
safe_read_line (x.count_path) ^ read