{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE DerivingVia #-}
{-# LANGUAGE UndecidableInstances #-}
module Monitor.DataModel (
    module Monitor.DataModel
  , module Control.Monad.Reader
  , Assertion(..)
  , Settings(..)
  , Mutexes(..)
  , readAssertion
  , logMessage
  ) where

import Control.Monad.Base
import Control.Monad.Reader
import Control.Monad.Trans.Control

import Data.ByteString (ByteString)

import Monitor.Configuration.Config

newtype Monitor a = Monitor {Monitor a -> ReaderT Settings IO a
getMonitor :: ReaderT Settings IO a} deriving
  (a -> Monitor b -> Monitor a
(a -> b) -> Monitor a -> Monitor b
(forall a b. (a -> b) -> Monitor a -> Monitor b)
-> (forall a b. a -> Monitor b -> Monitor a) -> Functor Monitor
forall a b. a -> Monitor b -> Monitor a
forall a b. (a -> b) -> Monitor a -> Monitor b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
<$ :: a -> Monitor b -> Monitor a
$c<$ :: forall a b. a -> Monitor b -> Monitor a
fmap :: (a -> b) -> Monitor a -> Monitor b
$cfmap :: forall a b. (a -> b) -> Monitor a -> Monitor b
Functor, Functor Monitor
a -> Monitor a
Functor Monitor
-> (forall a. a -> Monitor a)
-> (forall a b. Monitor (a -> b) -> Monitor a -> Monitor b)
-> (forall a b c.
    (a -> b -> c) -> Monitor a -> Monitor b -> Monitor c)
-> (forall a b. Monitor a -> Monitor b -> Monitor b)
-> (forall a b. Monitor a -> Monitor b -> Monitor a)
-> Applicative Monitor
Monitor a -> Monitor b -> Monitor b
Monitor a -> Monitor b -> Monitor a
Monitor (a -> b) -> Monitor a -> Monitor b
(a -> b -> c) -> Monitor a -> Monitor b -> Monitor c
forall a. a -> Monitor a
forall a b. Monitor a -> Monitor b -> Monitor a
forall a b. Monitor a -> Monitor b -> Monitor b
forall a b. Monitor (a -> b) -> Monitor a -> Monitor b
forall a b c. (a -> b -> c) -> Monitor a -> Monitor b -> Monitor c
forall (f :: * -> *).
Functor f
-> (forall a. a -> f a)
-> (forall a b. f (a -> b) -> f a -> f b)
-> (forall a b c. (a -> b -> c) -> f a -> f b -> f c)
-> (forall a b. f a -> f b -> f b)
-> (forall a b. f a -> f b -> f a)
-> Applicative f
<* :: Monitor a -> Monitor b -> Monitor a
$c<* :: forall a b. Monitor a -> Monitor b -> Monitor a
*> :: Monitor a -> Monitor b -> Monitor b
$c*> :: forall a b. Monitor a -> Monitor b -> Monitor b
liftA2 :: (a -> b -> c) -> Monitor a -> Monitor b -> Monitor c
$cliftA2 :: forall a b c. (a -> b -> c) -> Monitor a -> Monitor b -> Monitor c
<*> :: Monitor (a -> b) -> Monitor a -> Monitor b
$c<*> :: forall a b. Monitor (a -> b) -> Monitor a -> Monitor b
pure :: a -> Monitor a
$cpure :: forall a. a -> Monitor a
$cp1Applicative :: Functor Monitor
Applicative, Applicative Monitor
a -> Monitor a
Applicative Monitor
-> (forall a b. Monitor a -> (a -> Monitor b) -> Monitor b)
-> (forall a b. Monitor a -> Monitor b -> Monitor b)
-> (forall a. a -> Monitor a)
-> Monad Monitor
Monitor a -> (a -> Monitor b) -> Monitor b
Monitor a -> Monitor b -> Monitor b
forall a. a -> Monitor a
forall a b. Monitor a -> Monitor b -> Monitor b
forall a b. Monitor a -> (a -> Monitor b) -> Monitor b
forall (m :: * -> *).
Applicative m
-> (forall a b. m a -> (a -> m b) -> m b)
-> (forall a b. m a -> m b -> m b)
-> (forall a. a -> m a)
-> Monad m
return :: a -> Monitor a
$creturn :: forall a. a -> Monitor a
>> :: Monitor a -> Monitor b -> Monitor b
$c>> :: forall a b. Monitor a -> Monitor b -> Monitor b
>>= :: Monitor a -> (a -> Monitor b) -> Monitor b
$c>>= :: forall a b. Monitor a -> (a -> Monitor b) -> Monitor b
$cp1Monad :: Applicative Monitor
Monad, Monad Monitor
Monad Monitor -> (forall a. IO a -> Monitor a) -> MonadIO Monitor
IO a -> Monitor a
forall a. IO a -> Monitor a
forall (m :: * -> *).
Monad m -> (forall a. IO a -> m a) -> MonadIO m
liftIO :: IO a -> Monitor a
$cliftIO :: forall a. IO a -> Monitor a
$cp1MonadIO :: Monad Monitor
MonadIO, MonadReader Settings, MonadBase IO, MonadBaseControl IO)
  via ReaderT Settings IO

configName :: FilePath
configName :: FilePath
configName = FilePath
"conf.dhall"

representsConfigName :: FilePath -> Bool
representsConfigName :: FilePath -> Bool
representsConfigName FilePath
path = FilePath
path FilePath -> FilePath -> Bool
forall a. Eq a => a -> a -> Bool
== FilePath
configName

data JobFeedback = ConnectionError String
                 | QueryError String
                 | AssertionResult Bool
  deriving (JobFeedback -> JobFeedback -> Bool
(JobFeedback -> JobFeedback -> Bool)
-> (JobFeedback -> JobFeedback -> Bool) -> Eq JobFeedback
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: JobFeedback -> JobFeedback -> Bool
$c/= :: JobFeedback -> JobFeedback -> Bool
== :: JobFeedback -> JobFeedback -> Bool
$c== :: JobFeedback -> JobFeedback -> Bool
Eq, Int -> JobFeedback -> ShowS
[JobFeedback] -> ShowS
JobFeedback -> FilePath
(Int -> JobFeedback -> ShowS)
-> (JobFeedback -> FilePath)
-> ([JobFeedback] -> ShowS)
-> Show JobFeedback
forall a.
(Int -> a -> ShowS) -> (a -> FilePath) -> ([a] -> ShowS) -> Show a
showList :: [JobFeedback] -> ShowS
$cshowList :: [JobFeedback] -> ShowS
show :: JobFeedback -> FilePath
$cshow :: JobFeedback -> FilePath
showsPrec :: Int -> JobFeedback -> ShowS
$cshowsPrec :: Int -> JobFeedback -> ShowS
Show)

data Job = Job
  { Job -> Maybe FilePath
jobDescription :: Maybe String
  , Job -> Maybe Int
jobFrequency :: Maybe Int
  , Job -> Maybe Assertion
jobAssertion :: Maybe Assertion
  , Job -> ByteString
jobSQL :: ByteString
  } deriving (Job -> Job -> Bool
(Job -> Job -> Bool) -> (Job -> Job -> Bool) -> Eq Job
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Job -> Job -> Bool
$c/= :: Job -> Job -> Bool
== :: Job -> Job -> Bool
$c== :: Job -> Job -> Bool
Eq, Int -> Job -> ShowS
[Job] -> ShowS
Job -> FilePath
(Int -> Job -> ShowS)
-> (Job -> FilePath) -> ([Job] -> ShowS) -> Show Job
forall a.
(Int -> a -> ShowS) -> (a -> FilePath) -> ([a] -> ShowS) -> Show a
showList :: [Job] -> ShowS
$cshowList :: [Job] -> ShowS
show :: Job -> FilePath
$cshow :: Job -> FilePath
showsPrec :: Int -> Job -> ShowS
$cshowsPrec :: Int -> Job -> ShowS
Show)

data PureJob = PureJob
  { PureJob -> FilePath
pureJobDescription :: String
  , PureJob -> Assertion
pureJobAssertion :: Assertion
  , PureJob -> ByteString
pureJobSQL :: ByteString
  } deriving (PureJob -> PureJob -> Bool
(PureJob -> PureJob -> Bool)
-> (PureJob -> PureJob -> Bool) -> Eq PureJob
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PureJob -> PureJob -> Bool
$c/= :: PureJob -> PureJob -> Bool
== :: PureJob -> PureJob -> Bool
$c== :: PureJob -> PureJob -> Bool
Eq, Int -> PureJob -> ShowS
[PureJob] -> ShowS
PureJob -> FilePath
(Int -> PureJob -> ShowS)
-> (PureJob -> FilePath) -> ([PureJob] -> ShowS) -> Show PureJob
forall a.
(Int -> a -> ShowS) -> (a -> FilePath) -> ([a] -> ShowS) -> Show a
showList :: [PureJob] -> ShowS
$cshowList :: [PureJob] -> ShowS
show :: PureJob -> FilePath
$cshow :: PureJob -> FilePath
showsPrec :: Int -> PureJob -> ShowS
$cshowsPrec :: Int -> PureJob -> ShowS
Show)