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