1 {-# LANGUAGE OverloadedStrings, RecordWildCards #-} 2 module Databrary.Model.Stats.Types 3 ( SiteStats(..) 4 ) where 5 6 import qualified Data.Aeson as JSON 7 import qualified Data.Array.Unboxed as A 8 import Data.Int (Int64) 9 import qualified Data.Map.Strict as M 10 11 import Databrary.Model.Permission.Types 12 import Databrary.Model.Offset 13 import Databrary.Model.Id.Types 14 import Databrary.Model.Category.Types 15 16 data SiteStats = SiteStats 17 { statsAuthorizedSite :: !(A.Array Permission Int64) 18 , statsVolumes, statsVolumesShared :: !Int64 19 , statsAssets :: !Int64 20 , statsAssetDuration :: !Offset 21 , statsAssetBytes :: !Int64 22 , statsRecords :: !(M.Map (Id Category) Int64) 23 } 24 25 instance JSON.ToJSON SiteStats where 26 toJSON SiteStats{..} = JSON.object 27 [ "authorized" JSON..= A.elems statsAuthorizedSite 28 , "volumes" JSON..= statsVolumes 29 , "shared" JSON..= statsVolumesShared 30 , "assets" JSON..= statsAssets 31 , "duration" JSON..= statsAssetDuration 32 , "bytes" JSON..= statsAssetBytes 33 , "records" JSON..= M.mapKeys show statsRecords 34 ]