hnormalise-0.3.2.0: src/HNormalise/Snoopy/Parser.hs
{-# 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
})