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     ]