from typing_extensions import Literal
-from knot_resolver_manager.datamodel.types import TimeUnit
+from knot_resolver_manager.datamodel.types import DomainName, IPAddress, PortNumber, TimeUnit
from knot_resolver_manager.utils.modelling import SchemaNode
class GraphiteSchema(SchemaNode):
- host: str
- port: int = 2003
+ host: Union[IPAddress, DomainName]
+ port: PortNumber = PortNumber(2003)
prefix: str = ""
- interval_sec: TimeUnit = TimeUnit("5s")
+ interval: TimeUnit = TimeUnit("5s")
tcp: bool = False
- def _validate(self):
- if not 0 < self.port < 65_536:
- raise ValueError("port must be between 0 and 65536 (both exclusive)")
-
class MonitoringSchema(SchemaNode):
"""
async def _deny_turning_off_graphite_bridge(old_config: KresConfig, new_config: KresConfig) -> Result[None, str]:
- if old_config.monitoring.graphite is not None and new_config.monitoring.graphite is None:
+ if old_config.monitoring.graphite and not new_config.monitoring.graphite:
return Result.err(
"You can't turn off graphite monitoring dynamically. If you really want this feature, please let the developers know."
)
if config.monitoring.graphite is not False and _graphite_bridge is None:
logger.info(
"Starting Graphite metrics exporter for [%s]:%d",
- config.monitoring.graphite.host,
- config.monitoring.graphite.port,
+ str(config.monitoring.graphite.host),
+ int(config.monitoring.graphite.port),
)
- _graphite_bridge = GraphiteBridge((config.monitoring.graphite.host, config.monitoring.graphite.port))
+ _graphite_bridge = GraphiteBridge((str(config.monitoring.graphite.host), int(config.monitoring.graphite.port)))
_graphite_bridge.start( # type: ignore
- interval=config.monitoring.graphite.interval_sec.seconds(), prefix=config.monitoring.graphite.prefix
+ interval=config.monitoring.graphite.interval.seconds(), prefix=config.monitoring.graphite.prefix
)