summaryrefslogtreecommitdiffstats
path: root/python/knot_resolver/datamodel/rate_limiting_schema.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/knot_resolver/datamodel/rate_limiting_schema.py')
-rw-r--r--python/knot_resolver/datamodel/rate_limiting_schema.py29
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")