NucelarMonitor/Python/Dispatchers/AgentsDispatcher.py

57 lines
2.5 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from typing import Self
from Models.IterationModel import InterfaceModel, IterationModel
from Abstracts.DispatcherAbstract import DispatcherAbstract
from Abstracts.DatabaseAbstract import DatabaseAbstract
class AgentsDispatcher(DispatcherAbstract):
def save(self:Self, iteration:IterationModel) -> None:
database:DatabaseAbstract = self.nucelar_monitor.databases.get("sql_server")
interface:InterfaceModel
database.query((
"execute dbo.set_machine_data " +
"{key}, {candle_start}, {candle_end}, {candle_interations}, " +
"{ram_total}, {ram_in}, {ram_out}, {ram_minimum}, {ram_maximum}, " +
"{ram_average}, {cpu_in}, {cpu_out}, {cpu_minimum}, {cpu_maximum}, " +
"{cpu_average}"
), {
"key" : iteration.key,
"candle_start" : iteration.candle_time.start,
"candle_end" : iteration.candle_time.end,
"candle_interations" : iteration.iterations,
"ram_total" : iteration.memory.total,
"ram_in" : iteration.memory._in,
"ram_out" : iteration.memory.out,
"ram_minimum" : iteration.memory.minimum,
"ram_maximum" : iteration.memory.maximum,
"ram_average" : iteration.memory.average,
"cpu_in" : iteration.cpu._in,
"cpu_out" : iteration.cpu.out,
"cpu_minimum" : iteration.cpu.minimum,
"cpu_maximum" : iteration.cpu.maximum,
"cpu_average" : iteration.cpu.average
})
for interface in iteration.interfaces:
database.query((
"execute dbo.set_machine_interface_data " +
"{key}, {candle_start}, {candle_end}, {candle_interations}, " +
"{name}, {bytes}, {packages}, {errors}, {is_ipv6}, {ip}, {mask}"
), {
"key" : iteration.key,
"candle_start" : iteration.candle_time.start,
"candle_end" : iteration.candle_time.end,
"candle_interations" : iteration.iterations,
"name" : interface.name,
"bytes" : interface.received.bytes + interface.transmitted.bytes,
"packages" : interface.received.packets + interface.transmitted.packets,
"errors" : interface.received.errors + interface.transmitted.errors,
"is_ipv6" : interface.is_ipv6,
"ip" : interface.ip,
"mask" : interface.mask
})