packages feed

vigilance-0.1.0.0: src/Utils/Vigilance/Sweeper.hs

module Utils.Vigilance.Sweeper ( expired
                               , sweepWatch ) where

import Control.Lens

import Data.Time.Clock.POSIX (POSIXTime)

import Utils.Vigilance.Types


expired :: POSIXTime -> Watch i -> Bool
expired now w@Watch { _watchWState = Active lst } = now > cutoff
  where cutoff       = lst + interval
        interval     = fromInteger $ secondsInterval (w ^. watchInterval)
expired _ _                                        = False

expireWatch :: Watch i -> Watch i
expireWatch w = w & watchWState %~ bumpState
  where bumpState Triggered = Triggered
        bumpState _         = Notifying

sweepWatch :: Show i => POSIXTime -> Watch i -> Watch i
sweepWatch t w
  | expired t w = expireWatch w
  | otherwise   = w

secondsInterval :: WatchInterval -> Integer
secondsInterval (Every n Seconds) = n
secondsInterval (Every n Minutes) = n * 60
secondsInterval (Every n Hours)   = n * 3600
secondsInterval (Every n Days)    = n * 86400
secondsInterval (Every n Weeks)   = n * 604800
secondsInterval (Every n Years)   = n * 31536000