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() + "."
Esempio n. 2
0
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()