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