"renum",
"exterr",
"rules",
- "prlayr"
+ "prlayr",
+ "defer"
]
},
"description": "List of groups for which 'debug' logging level is set.",
"graphite": false
}
},
+ "rate-limiting": {
+ "description": "Configuration of rate limiting.",
+ "type": [
+ "object",
+ "null"
+ ],
+ "properties": {
+ "capacity": {
+ "type": "integer",
+ "description": "Expected maximal number of blocked networks/hosts at the same time.",
+ "default": 524288
+ },
+ "rate-limit": {
+ "type": "integer",
+ "description": "Number of allowed queries per second from a single host."
+ },
+ "instant-limit": {
+ "type": "integer",
+ "description": "Number of allowed queries at a single point in time from a single host.",
+ "default": 50
+ },
+ "tc-limit-perc": {
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 100,
+ "description": "Percent of rate/instant limit from which responses are sent as truncated.",
+ "default": 90
+ }
+ },
+ "default": null
+ },
"lua": {
"description": "Custom Lua configuration.",
"type": "object",
import os
import socket
from typing import Any, Dict, List, Literal, Optional, Tuple, Union
-from knot_resolver.datamodel.rate_limiting_schema import RateLimitingSchema
from knot_resolver.constants import API_SOCK_FILE, RUN_DIR, VERSION
from knot_resolver.datamodel.cache_schema import CacheSchema
from knot_resolver.datamodel.monitoring_schema import MonitoringSchema
from knot_resolver.datamodel.network_schema import NetworkSchema
from knot_resolver.datamodel.options_schema import OptionsSchema
+from knot_resolver.datamodel.rate_limiting_schema import RateLimitingSchema
from knot_resolver.datamodel.templates import POLICY_CONFIG_TEMPLATE, WORKER_CONFIG_TEMPLATE
from knot_resolver.datamodel.types import EscapedStr, IntPositive, WritableDir
from knot_resolver.datamodel.view_schema import ViewSchema
logging: Logging and debugging configuration.
monitoring: Metrics exposisition configuration (Prometheus, Graphite)
lua: Custom Lua configuration.
- rate_limiting: ... TODO
+ rate_limiting: Configuration of rate limiting.
"""
version: int = 1
import asyncio
import logging
+import os
import sys
import time
-import os
from secrets import token_hex
from subprocess import SubprocessError
from typing import Any, Callable, List, Optional