import asyncio import socket import psutil from metricq import IntervalSource, Timedelta, Timestamp, logging, rpc_handler from .version import version as client_version logger = logging.get_logger("SysinfoSource") class SysinfoSource(IntervalSource): def __init__(self, *args, **kwargs): super().__init__(*args, client_version=client_version, **kwargs) self.prev_timestamp = None self.prev_net_io = None self.prev_disk_io = None @rpc_handler("config") async def _on_config(self, **config): logger.info("config: {}", config) rate = config["rate"] self.period = Timedelta.from_s(1 / rate) try: self.prefix = config["prefix"] if self.prefix != "" and not self.prefix.endswith("."): self.prefix = self.prefix + "." except KeyError: logger.info("No explicit prefix given, using hostname") self.prefix = socket.gethostname() + "."
import logging import click import click_completion import click_log from metricq.logging import get_logger from .sysinfo_source import SysinfoSource logger = get_logger() click_log.basic_config(logger) logger.setLevel("INFO") logger.handlers[0].formatter = logging.Formatter( fmt="%(asctime)s [%(levelname)-8s] [%(name)-20s] %(message)s") click_completion.init() @click.command() @click.argument("management-url", default="amqp://localhost/") @click.option("--token", default="source-sysinfo") @click_log.simple_verbosity_option(logger) def run(management_url, token): src = SysinfoSource(management_url=management_url, token=token) src.run()