module Ecluse.Core.Registry.Maintenance.Budget.Internal (
QuotaDimension (..),
quotaDimensions,
quotaDimensionName,
RequestKind (..),
requestKinds,
requestKindName,
CyclePace (..),
freePace,
paceOf,
paceSeconds,
) where
import Data.Map.Strict qualified as Map
import Data.Time (NominalDiffTime)
data QuotaDimension
=
NameListing
|
VersionListing
|
AccountReads
|
AccountWrites
|
TokenReads
|
StoreRequests
deriving stock (QuotaDimension -> QuotaDimension -> Bool
(QuotaDimension -> QuotaDimension -> Bool)
-> (QuotaDimension -> QuotaDimension -> Bool) -> Eq QuotaDimension
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: QuotaDimension -> QuotaDimension -> Bool
== :: QuotaDimension -> QuotaDimension -> Bool
$c/= :: QuotaDimension -> QuotaDimension -> Bool
/= :: QuotaDimension -> QuotaDimension -> Bool
Eq, Eq QuotaDimension
Eq QuotaDimension =>
(QuotaDimension -> QuotaDimension -> Ordering)
-> (QuotaDimension -> QuotaDimension -> Bool)
-> (QuotaDimension -> QuotaDimension -> Bool)
-> (QuotaDimension -> QuotaDimension -> Bool)
-> (QuotaDimension -> QuotaDimension -> Bool)
-> (QuotaDimension -> QuotaDimension -> QuotaDimension)
-> (QuotaDimension -> QuotaDimension -> QuotaDimension)
-> Ord QuotaDimension
QuotaDimension -> QuotaDimension -> Bool
QuotaDimension -> QuotaDimension -> Ordering
QuotaDimension -> QuotaDimension -> QuotaDimension
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: QuotaDimension -> QuotaDimension -> Ordering
compare :: QuotaDimension -> QuotaDimension -> Ordering
$c< :: QuotaDimension -> QuotaDimension -> Bool
< :: QuotaDimension -> QuotaDimension -> Bool
$c<= :: QuotaDimension -> QuotaDimension -> Bool
<= :: QuotaDimension -> QuotaDimension -> Bool
$c> :: QuotaDimension -> QuotaDimension -> Bool
> :: QuotaDimension -> QuotaDimension -> Bool
$c>= :: QuotaDimension -> QuotaDimension -> Bool
>= :: QuotaDimension -> QuotaDimension -> Bool
$cmax :: QuotaDimension -> QuotaDimension -> QuotaDimension
max :: QuotaDimension -> QuotaDimension -> QuotaDimension
$cmin :: QuotaDimension -> QuotaDimension -> QuotaDimension
min :: QuotaDimension -> QuotaDimension -> QuotaDimension
Ord, Int -> QuotaDimension -> ShowS
[QuotaDimension] -> ShowS
QuotaDimension -> String
(Int -> QuotaDimension -> ShowS)
-> (QuotaDimension -> String)
-> ([QuotaDimension] -> ShowS)
-> Show QuotaDimension
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> QuotaDimension -> ShowS
showsPrec :: Int -> QuotaDimension -> ShowS
$cshow :: QuotaDimension -> String
show :: QuotaDimension -> String
$cshowList :: [QuotaDimension] -> ShowS
showList :: [QuotaDimension] -> ShowS
Show)
quotaDimensions :: [QuotaDimension]
quotaDimensions :: [QuotaDimension]
quotaDimensions = [QuotaDimension
NameListing, QuotaDimension
VersionListing, QuotaDimension
AccountReads, QuotaDimension
AccountWrites, QuotaDimension
TokenReads, QuotaDimension
StoreRequests]
quotaDimensionName :: QuotaDimension -> Text
quotaDimensionName :: QuotaDimension -> Text
quotaDimensionName = \case
QuotaDimension
NameListing -> Text
"nameListing"
QuotaDimension
VersionListing -> Text
"versionListing"
QuotaDimension
AccountReads -> Text
"accountReads"
QuotaDimension
AccountWrites -> Text
"accountWrites"
QuotaDimension
TokenReads -> Text
"tokenReads"
QuotaDimension
StoreRequests -> Text
"storeRequests"
data RequestKind
=
ListingPage
|
VersionPage
|
ManifestRead
|
DeleteBatch
|
PermissionRead
|
CursorRead
|
CursorWrite
deriving stock (RequestKind -> RequestKind -> Bool
(RequestKind -> RequestKind -> Bool)
-> (RequestKind -> RequestKind -> Bool) -> Eq RequestKind
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: RequestKind -> RequestKind -> Bool
== :: RequestKind -> RequestKind -> Bool
$c/= :: RequestKind -> RequestKind -> Bool
/= :: RequestKind -> RequestKind -> Bool
Eq, Eq RequestKind
Eq RequestKind =>
(RequestKind -> RequestKind -> Ordering)
-> (RequestKind -> RequestKind -> Bool)
-> (RequestKind -> RequestKind -> Bool)
-> (RequestKind -> RequestKind -> Bool)
-> (RequestKind -> RequestKind -> Bool)
-> (RequestKind -> RequestKind -> RequestKind)
-> (RequestKind -> RequestKind -> RequestKind)
-> Ord RequestKind
RequestKind -> RequestKind -> Bool
RequestKind -> RequestKind -> Ordering
RequestKind -> RequestKind -> RequestKind
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: RequestKind -> RequestKind -> Ordering
compare :: RequestKind -> RequestKind -> Ordering
$c< :: RequestKind -> RequestKind -> Bool
< :: RequestKind -> RequestKind -> Bool
$c<= :: RequestKind -> RequestKind -> Bool
<= :: RequestKind -> RequestKind -> Bool
$c> :: RequestKind -> RequestKind -> Bool
> :: RequestKind -> RequestKind -> Bool
$c>= :: RequestKind -> RequestKind -> Bool
>= :: RequestKind -> RequestKind -> Bool
$cmax :: RequestKind -> RequestKind -> RequestKind
max :: RequestKind -> RequestKind -> RequestKind
$cmin :: RequestKind -> RequestKind -> RequestKind
min :: RequestKind -> RequestKind -> RequestKind
Ord, Int -> RequestKind -> ShowS
[RequestKind] -> ShowS
RequestKind -> String
(Int -> RequestKind -> ShowS)
-> (RequestKind -> String)
-> ([RequestKind] -> ShowS)
-> Show RequestKind
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> RequestKind -> ShowS
showsPrec :: Int -> RequestKind -> ShowS
$cshow :: RequestKind -> String
show :: RequestKind -> String
$cshowList :: [RequestKind] -> ShowS
showList :: [RequestKind] -> ShowS
Show)
requestKinds :: [RequestKind]
requestKinds :: [RequestKind]
requestKinds = [RequestKind
ListingPage, RequestKind
VersionPage, RequestKind
ManifestRead, RequestKind
DeleteBatch, RequestKind
PermissionRead, RequestKind
CursorRead, RequestKind
CursorWrite]
requestKindName :: RequestKind -> Text
requestKindName :: RequestKind -> Text
requestKindName = \case
RequestKind
ListingPage -> Text
"listingPage"
RequestKind
VersionPage -> Text
"versionPage"
RequestKind
ManifestRead -> Text
"manifestRead"
RequestKind
DeleteBatch -> Text
"deleteBatch"
RequestKind
PermissionRead -> Text
"permissionRead"
RequestKind
CursorRead -> Text
"cursorRead"
RequestKind
CursorWrite -> Text
"cursorWrite"
newtype CyclePace = CyclePace (Map RequestKind Rational)
deriving stock (CyclePace -> CyclePace -> Bool
(CyclePace -> CyclePace -> Bool)
-> (CyclePace -> CyclePace -> Bool) -> Eq CyclePace
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: CyclePace -> CyclePace -> Bool
== :: CyclePace -> CyclePace -> Bool
$c/= :: CyclePace -> CyclePace -> Bool
/= :: CyclePace -> CyclePace -> Bool
Eq, Int -> CyclePace -> ShowS
[CyclePace] -> ShowS
CyclePace -> String
(Int -> CyclePace -> ShowS)
-> (CyclePace -> String)
-> ([CyclePace] -> ShowS)
-> Show CyclePace
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> CyclePace -> ShowS
showsPrec :: Int -> CyclePace -> ShowS
$cshow :: CyclePace -> String
show :: CyclePace -> String
$cshowList :: [CyclePace] -> ShowS
showList :: [CyclePace] -> ShowS
Show)
freePace :: CyclePace
freePace :: CyclePace
freePace = Map RequestKind Rational -> CyclePace
CyclePace Map RequestKind Rational
forall k a. Map k a
Map.empty
paceOf :: Map RequestKind Rational -> CyclePace
paceOf :: Map RequestKind Rational -> CyclePace
paceOf = Map RequestKind Rational -> CyclePace
CyclePace
paceSeconds :: CyclePace -> RequestKind -> NominalDiffTime
paceSeconds :: CyclePace -> RequestKind -> NominalDiffTime
paceSeconds (CyclePace Map RequestKind Rational
costs) RequestKind
kind = NominalDiffTime
-> (Rational -> NominalDiffTime)
-> Maybe Rational
-> NominalDiffTime
forall b a. b -> (a -> b) -> Maybe a -> b
maybe NominalDiffTime
0 Rational -> NominalDiffTime
forall a. Fractional a => Rational -> a
fromRational (RequestKind -> Map RequestKind Rational -> Maybe Rational
forall k a. Ord k => k -> Map k a -> Maybe a
Map.lookup RequestKind
kind Map RequestKind Rational
costs)