{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DuplicateRecordFields #-} {-# LANGUAGE OverloadedStrings #-} module HNormalise.Snoopy.Parser where -------------------------------------------------------------------------------- import Control.Applicative ((<|>)) import Data.Attoparsec.Combinator (lookAhead, manyTill) import Data.Attoparsec.Text import Data.Char (isSpace) import Data.Text (Text) -------------------------------------------------------------------------------- import HNormalise.Common.Parser import HNormalise.Snoopy.Internal -------------------------------------------------------------------------------- -- snoopy[27316]:: [uid:110 sid:9379 tty:(none) cwd:/ filename:/usr/lib64/nagios/plugins/hpc/check_ifutil.pl]: /usr/lib64/nagios/plugins/hpc/check_ifutil.pl -i em1.295 -w 90 -c 95 -p -b 10000m parseSnoopy :: Parser (Text, Snoopy) parseSnoopy = do string "snoopy[" pid <- decimal takeTill ( == '[') *> char '[' uid <- string "uid:" *> decimal username <- maybeOption $ skipSpace *> string "username:" *> takeTill isSpace sid <- skipSpace *> string "sid:" *> decimal tty <- skipSpace *> string "tty:" *> takeTill isSpace cwd <- skipSpace *> string "cwd:" *> takeTill isSpace executable <- skipSpace *> "filename:" *> takeTill ( == ']') string "]:" command <- skipSpace *> takeText return $ ("snoopy", Snoopy { pid = pid , uid = uid , username = username , sid = sid , tty = tty , cwd = cwd , executable = executable , command = command })