102 lines
4.1 KiB
Python
102 lines
4.1 KiB
Python
#!/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") |