Sysmon-0.1: Database/Sybase/Sysmon/LogTypes.hs
-- |
-- Module : LogTypes
-- Copyright : (c) Vitaliy Rukavishnikov 2011
-- License : BSD-style (see the file LICENSE)
--
-- Maintainer : virukav@gmail.com
-- Stability : experimental
-- Portability : non-portable
--
-- Generic log objects and types.
module Database.Sybase.Sysmon.LogTypes where
import Data.IntervalMap.FingerTree
import Data.ConfigFile (ConfigParser)
import Data.DateTime
import Text.Printf
-- | Hint is defined as the triple of the rule name,
-- rule action (text message) and rule conditions
type Hint = (RuleId, Action, Facts)
type Facts = [String]
type Result = (Bool, Facts)
type RuleId = String
type Action = String
-- | LogTree implemented as IntervalMap.FingerTree
type LogTree a = IntervalMap DateTime a
-- | The key to look for the data in the LogTree
type LogInterval = Interval DateTime
-- | The nodes of the LogTree
data LogNode a = LogNode (LogInterval, a)
-- | Operations to parse log data, make LogTree and generate hints
class LogEntry a where
mkNode :: a -> LogNode a
mkParse :: String -> a
mkHints :: ConfigParser -> a -> [Hint]
mkLogTree :: [LogNode a] -> LogTree a
mkLogTree = foldr ins empty where
ins (LogNode (i, e)) = insert i e
-- | Format facts data
class (Show a) => LogShow a where
lshow :: a -> String
lshow = show
instance LogShow Int
instance LogShow Integer
instance LogShow Bool
instance LogShow Double where
lshow = printf "%.2f"