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