instana-haskell-trace-sdk-0.2.0.0: src/Instana/SDK/Internal/AgentConnection/SchedFile.hs
{-# LANGUAGE ScopedTypeVariables #-}
{-|
Module : Instana.SDK.Internal.AgentConnection.SchedFile
Description : Parses the content of the sched file.
-}
module Instana.SDK.Internal.AgentConnection.SchedFile
( parsePidFromSchedFile
) where
import qualified Text.Regex.Base.RegexLike as RegexBase
import qualified Text.Regex.TDFA as Regex
import Text.Regex.TDFA.String (Regex)
import qualified Text.Regex.TDFA.String as RegexString
-- |Parses a /proc/{pid}/sched file to get the PID in the parent namespace.
parsePidFromSchedFile :: String -> Maybe String
parsePidFromSchedFile schedFileContent =
let
allMatches :: [[String]]
allMatches = RegexBase.match schedFilePidPattern schedFileContent
in
if null allMatches then
Nothing
else do
let
(firstMatchWithCaptures :: [String]) = head allMatches
if (length firstMatchWithCaptures) < 2 then
Nothing
else
Just $ head $ tail $ firstMatchWithCaptures
schedFilePidPattern :: Regex
schedFilePidPattern =
let
compiledPattern =
RegexString.compile
(Regex.defaultCompOpt
{ Regex.caseSensitive = False
, Regex.multiline = True
}
)
Regex.defaultExecOpt
"^[^(]+\\(([0-9]+),"
Right pattern = compiledPattern
in
pattern