#!/usr/bin/env python3 # -*- coding: utf-8 -*- from typing import Self from Abstracts.ControllerAbstract import ControllerAbstract from Models.ResponseModel import ResponseModel from Models.RequestModel import RequestModel from Models.IterationModel import ( CPUModel, MemoryModel, NetUseModel, InterfaceModel, DiskModel, CandleTimeModel, IterationModel ) from Dispatchers.AgentsDispatcher import AgentsDispatcher from Abstracts.DatabaseAbstract import DatabaseAbstract from Utils.Utils import Utils class AgentsController(ControllerAbstract): def debian(self:Self, request:RequestModel, response:ResponseModel) -> None: key:str = request.get("key") hostnames:list[str] domain:str|None interfaces_data:list[list[int, str, bool, str, int]] disks:list[list[str, int, int, str|None]] iterations:int candle_times:list[int, int] cpu:list[float, float, float, float, float] memory:list[int, int, int, int, int, float] net_use:list[list[list[str, int, int, int, int, int, int]]] received:dict[str, NetUseModel] = {} transmitted:dict[str, NetUseModel] = {} i:int net:list[str, int, int, int, int, int, int] ( hostnames, domain, interfaces_data, disks, iterations, candle_times, cpu, memory, net_use ) = Utils.json_decode(request.body) print(Utils.json_decode(request.body)) # 'enp3s0', 12489583046, 9909705, 0, 774527051, 4221200, 0 # 'enp3s0', 12486039059, 9906802, 0, 774272948, 4220106, 0 # 3543987 2903, 0 for i, net in enumerate(net_use[0]): print([net[0], net_use[1][i][0]]) received[net[0]] = NetUseModel(net_use[1][i][1] - net[1], net_use[1][i][2] - net[2], net_use[1][i][3] - net[3]) transmitted[net[0]] = NetUseModel(net_use[1][i][4] - net[4], net_use[1][i][5] - net[5], net_use[1][i][6] - net[6]) for key, net in received.items(): if net.bytes < 0 or net.packets < 0 or net.errors < 0: print(["received", key, net.bytes, net.packets, net.errors]) for key, net in transmitted.items(): if net.bytes < 0 or net.packets < 0 or net.errors < 0: print(["transmitted", key, net.bytes, net.packets, net.errors]) self.nucelar_monitor.dispatchers.get(AgentsDispatcher, "sql_server_agents").save(IterationModel( key, hostnames, domain, [InterfaceModel( i, name, is_ipv6, ip, mask, received[name], transmitted[name] ) for i, name, is_ipv6, ip, mask in interfaces_data], [DiskModel(*disk) for disk in disks], iterations, CandleTimeModel(*candle_times), CPUModel(*cpu), MemoryModel(*memory) )) response.set_data({ "message": "Data saved successfully", "key" : key }, "application/json") def windows(self:Self, request:RequestModel, response:ResponseModel) -> None: key:str = request.get("key") hostnames:list[str] domain:str|None interfaces:list[str] disks:list[list[str, int, int]] iterations:int candle_times:list[int, int] cpu:list[float, float, float, float, float] memory:list[int, int, int, int, int, float] net_use:list[list[list[str, int, int, int, int, int, int]]] = [] print(Utils.json_decode(request.body)) hostnames, domain, interfaces, disks, candle_times, iterations, cpu, memory = Utils.json_decode(request.body) print([hostnames, domain, interfaces, disks, iterations, candle_times, cpu, memory, net_use]) def test(self:Self, request:RequestModel, response:ResponseModel) -> None: database:DatabaseAbstract = self.nucelar_monitor.databases.get("sql_server") response.set_data({ "message": "Test successful", "key" : request.get("key"), "data" : database.query("select top 10 * from information_schema.tables", {}).tables }, "application/json")