1 
    2 module Service.Types
    3   ( Secret(..)
    4   , Service(..)
    5   ) where
    6 
    7 import Control.Concurrent (ThreadId)
    8 import qualified Data.ByteString as BS
    9 import Data.IORef (IORef)
   10 import qualified Data.Text as T
   11 
   12 import Has (Has(..))
   13 import Service.DB (DBPool)
   14 import Service.Entropy (Entropy)
   15 import HTTP.Client (HTTPClient)
   16 import Store.Types (Storage)
   17 import Store.AV (AV)
   18 import Service.Passwd (Passwd)
   19 import Service.Log (Logs)
   20 import Service.Mail (Mailer)
   21 import Service.Messages (Messages)
   22 import Web.Types (Web)
   23 import Static.Service (Static)
   24 import Solr.Service (Solr)
   25 import Ingest.Service (Ingest)
   26 import EZID.Service (EZID)
   27 import Service.Notification (Notifications)
   28 import Model.Time
   29 import Model.Stats.Types
   30 
   31 newtype Secret = Secret BS.ByteString
   32 
   33 data Service = Service
   34   { serviceStartTime :: !Timestamp
   35   , serviceSecret :: !Secret
   36   , serviceEntropy :: !Entropy
   37   , servicePasswd :: !Passwd
   38   , serviceLogs :: !Logs
   39   , serviceMailer :: !Mailer
   40   , serviceMessages :: !Messages
   41   , serviceDB :: !DBPool
   42   , serviceStorage :: Storage -- may be down
   43   , serviceAV :: !AV
   44   , serviceWeb :: !Web
   45   , serviceHTTPClient :: !HTTPClient
   46   , serviceStatic :: !Static
   47   , serviceStats :: !(IORef SiteStats)
   48   , serviceIngest :: !Ingest
   49   , serviceSolr :: !Solr
   50   , serviceEZID :: !(Maybe EZID)
   51   , servicePeriodic :: !(Maybe ThreadId)
   52   , serviceNotification :: !Notifications
   53   , serviceDown :: !(Maybe T.Text)
   54   }
   55 
   56 -- makeHasRec ''Service ['serviceSecret, 'serviceEntropy, 'servicePasswd, 'serviceLogs, 'serviceMessages, 'serviceDB, 'serviceStorage, 'serviceAV, 'serviceWeb, 'serviceHTTPClient, 'serviceStatic, 'serviceIngest, 'serviceSolr, 'serviceNotification]
   57 instance Has Secret Service where
   58   view = serviceSecret
   59 instance Has Entropy Service where
   60   view = serviceEntropy
   61 instance Has Passwd Service where
   62   view = servicePasswd
   63 instance Has Logs Service where
   64   view = serviceLogs
   65 instance Has Mailer Service where
   66   view = serviceMailer
   67 instance Has Messages Service where
   68   view = serviceMessages
   69 -- instance Has DBPool Service where
   70 --    view = serviceDB
   71 instance Has Storage Service where
   72   view = serviceStorage
   73 instance Has AV Service where
   74   view = serviceAV
   75 instance Has Web Service where
   76   view = serviceWeb
   77 instance Has HTTPClient Service where
   78   view = serviceHTTPClient
   79 instance Has Static Service where
   80   view = serviceStatic
   81 instance Has Ingest Service where
   82   view = serviceIngest
   83 instance Has Solr Service where
   84   view = serviceSolr
   85 instance Has Notifications Service where
   86   view = serviceNotification