NucelarMonitor/Python/Dispatchers/AgentsDispatcher.py

69 lines
2.9 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:
id:int = int(database.query((
"execute dbo.set_machine_interface_data " +
"{key}, {name}, {is_ipv6}, {ip}, {mask}, {mounted}, @id output"
), {
"key" : iteration.key,
"name" : interface.name,
"is_ipv6" : interface.is_ipv6,
"ip" : interface.ip,
"mask" : interface.mask,
"mounted" : True
}).variables["id"])
_type:str
for _type in ("received", "transmitted"):
database.query((
"execute dbo.set_machine_interface_traffic " +
"{id}, {type}, {candle_start}, {candle_end}, " +
"{candle_interations}, {bytes}, {packets}, {errors}"
), {
"id" : id,
"type" : _type,
"candle_start" : iteration.candle_time.start,
"candle_end" : iteration.candle_time.end,
"candle_interations" : iteration.iterations,
"bytes" : getattr(interface, _type).bytes,
"packets" : getattr(interface, _type).packets,
"errors" : getattr(interface, _type).errors
})