diff options
Diffstat (limited to 'python/knot_resolver/datamodel/rate_limiting_schema.py')
-rw-r--r-- | python/knot_resolver/datamodel/rate_limiting_schema.py | 29 |
1 files changed, 14 insertions, 15 deletions
diff --git a/python/knot_resolver/datamodel/rate_limiting_schema.py b/python/knot_resolver/datamodel/rate_limiting_schema.py index d93272da..60994c20 100644 --- a/python/knot_resolver/datamodel/rate_limiting_schema.py +++ b/python/knot_resolver/datamodel/rate_limiting_schema.py @@ -1,3 +1,8 @@ +from knot_resolver.datamodel.types import ( + Int0_32, + IntPositive, + TimeUnit, +) from knot_resolver.utils.modeling import ConfigSchema @@ -10,26 +15,20 @@ class RateLimitingSchema(ConfigSchema): rate_limit: Maximal number of allowed queries per second from a single host. instant_limit: Maximal number of allowed queries at a single point in time from a single host. slip: Number of restricted responses out of which one is sent as truncated, the others are dropped. - log_period: Minimal time in msec between two log messages, or zero to disable. + log_period: Minimal time between two log messages, or '0s' to disable. dry_run: Perform only classification and logging but no restrictions. """ - capacity: int = 524288 - rate_limit: int - instant_limit: int = 50 - slip: int = 2 - log_period: int = 0 + capacity: IntPositive = IntPositive(524288) + rate_limit: IntPositive + instant_limit: IntPositive = IntPositive(50) + slip: Int0_32 = Int0_32(2) + log_period: TimeUnit = TimeUnit("0s") dry_run: bool = False def _validate(self) -> None: - max_instant_limit = int(2**32 / 768 - 1) - if not 1 <= self.instant_limit <= max_instant_limit: + max_instant_limit = int(2 ** 32 // 768 - 1) + if not int(self.instant_limit) <= max_instant_limit: raise ValueError(f"'instant-limit' has to be in range 1..{max_instant_limit}") - if not 1 <= self.rate_limit <= 1000 * self.instant_limit: + if not int(self.rate_limit) <= 1000 * int(self.instant_limit): raise ValueError("'rate-limit' has to be in range 1..(1000 * instant-limit)") - if not 0 < self.capacity: - raise ValueError("'capacity' has to be positive") - if not 0 <= self.slip <= 100: - raise ValueError("'slip' has to be in range 0..100") - if not 0 <= self.log_period: - raise ValueError("'log-period' has to be non-negative") |