packages feed

codemonitor-0.1: src/Monitor.hs

module Monitor where

import Job

data Monitor = JobMonitor { mJobId          :: String
                          , mSecondsInState :: Double
                          , mJobName        :: String
                          , mJobStatus      :: Status
                          }

updateMonitors :: Double -> Jobs -> [Monitor] -> [Monitor]
updateMonitors secondsSinceLastUpdate jobs = map updateMonitor
    where
        updateMonitor monitor@(JobMonitor {}) =
            let newStatus  = status $ jobWithId jobs (mJobId monitor)
                newSeconds = if mJobStatus monitor == newStatus
                                then secondsSinceLastUpdate + mSecondsInState monitor
                                else 0
            in monitor { mJobStatus      = newStatus
                       , mSecondsInState = newSeconds
                       }