packages feed

codemonitor-0.2: src/Config.hs

module Config where

import Job.Types
import Monitor

create :: FilePath -> IO (String, Jobs, [Monitor])
create configPath = readFile configPath >>= createFromConfig

createFromConfig :: String -> IO (String, Jobs, [Monitor])
createFromConfig content = do
    let (watchDir:rest) = lines content
    let jobs = map jobDefToJob rest
    let monitors = map jobToMonitor jobs
    return (watchDir, createJobs jobs, monitors)

jobDefToJob :: String -> Job
jobDefToJob def =
    let (id:pattern:command:args) = words def
    in createJob id command args pattern

jobToMonitor job =
    case jobId job of
        'o':'m':_ -> StdoutMonitor (jobId job) 0 (fullName job) ""
        _         -> StatusCodeMonitor (jobId job) 0 (fullName job) (status job) ""