module Monitor where import Job.Types data Monitor = StatusCodeMonitor { mJobId :: String , mSecondsInState :: Double , mJobName :: String , mJobStatus :: Status , mOutput :: String } | StdoutMonitor { mJobId :: String , mSecondsInState :: Double , mJobName :: String , mOutput :: String } deriving (Show, Eq) updateMonitors :: Double -> Jobs -> [Monitor] -> [Monitor] updateMonitors secondsSinceLastUpdate jobs = map updateMonitor where updateMonitor monitor@(StatusCodeMonitor {}) = let newStatus = status $ jobWithId jobs (mJobId monitor) newOutput = output $ jobWithId jobs (mJobId monitor) newSeconds = if mJobStatus monitor == newStatus then secondsSinceLastUpdate + mSecondsInState monitor else 0 in monitor { mSecondsInState = newSeconds , mJobStatus = newStatus , mOutput = newOutput } updateMonitor monitor@(StdoutMonitor {}) = let newOutput = output $ jobWithId jobs (mJobId monitor) newSeconds = secondsSinceLastUpdate + mSecondsInState monitor in monitor { mSecondsInState = newSeconds , mOutput = newOutput }