#wip: Python fixed and VBS in doing.

This commit is contained in:
mbruzon 2026-03-23 14:56:59 +01:00
parent 2f4a5d4609
commit e245bbdfab
10 changed files with 125 additions and 24 deletions

View File

@ -48,7 +48,11 @@
}, },
"default_routes" : [ "default_routes" : [
"post:/agents/debian/{key} debian@agents", "post:/agents/debian/{key} debian@agents",
"post:/agents/windows/{key} windows@agents",
"get:/agents/test/{key} test@agents", "get:/agents/test/{key} test@agents",
"get:/ /Public" "get:/ /Public"
] ],
"dispatchers" : {
"agents" : "agents_dispatcher"
}
} }

View File

@ -29,7 +29,23 @@ class AgentsController(ControllerAbstract):
print([hostnames, domain, interfaces, disks, iterations, candle_times, cpu, memory, net_use]) print([hostnames, domain, interfaces, disks, iterations, candle_times, cpu, memory, net_use])
def windows(self:Self, request:RequestModel, response:ResponseModel) -> None: def windows(self:Self, request:RequestModel, response:ResponseModel) -> None:
pass
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: def test(self:Self, request:RequestModel, response:ResponseModel) -> None:
response.set_data({ response.set_data({

View File

@ -0,0 +1,13 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from typing import Self
from Interfaces.Application.NucelarMonitorInterface import NucelarMonitorInterface
class AgentsDispatcher:
def __init__(self:Self, nucelar_monitor:NucelarMonitorInterface) -> None:
super().__init__(nucelar_monitor)
def save(self:Self) -> None:
pass

View File

@ -4,7 +4,6 @@
from typing import Any, Self, Optional, Sequence from typing import Any, Self, Optional, Sequence
from threading import Thread from threading import Thread
from socket import socket as Socket, AF_INET, SOCK_STREAM, SOL_SOCKET, SO_REUSEADDR, SHUT_RDWR from socket import socket as Socket, AF_INET, SOCK_STREAM, SOL_SOCKET, SO_REUSEADDR, SHUT_RDWR
from requests import get as get
from Interfaces.Application.NucelarMonitorInterface import NucelarMonitorInterface from Interfaces.Application.NucelarMonitorInterface import NucelarMonitorInterface
from Abstracts.WebServerAbstract import WebServerAbstract from Abstracts.WebServerAbstract import WebServerAbstract
from Models.ResponseModel import ResponseModel from Models.ResponseModel import ResponseModel

View File

@ -30,12 +30,12 @@ class DispatchersManager:
for subinputs in self.nucelar_monitor.files.load_json(inputs): for subinputs in self.nucelar_monitor.files.load_json(inputs):
key:str key:str
controller:DispatcherAbstract|str dispatcher:DispatcherAbstract|str
for key, controller in subinputs.items(): for key, dispatcher in subinputs.items():
if isinstance(controller, str): if isinstance(dispatcher, str):
controller = self.nucelar_monitor.models.get(DispatcherAbstract, controller)(self.nucelar_monitor) dispatcher = self.nucelar_monitor.models.get(DispatcherAbstract, dispatcher)(self.nucelar_monitor)
if controller is not None and isinstance(controller, DispatcherAbstract) and ( if dispatcher is not None and isinstance(dispatcher, DispatcherAbstract) and (
overwrite or key not in self.__dispatcher overwrite or key not in self.__dispatcher
): ):
self.__dispatcher[key] = controller self.__dispatcher[key] = dispatcher

View File

@ -6,12 +6,14 @@ from Application.NucelarMonitor import NucelarMonitor
from Controllers.AgentsController import AgentsController from Controllers.AgentsController import AgentsController
from Drivers.SQLServerDriver import SQLServerDriver from Drivers.SQLServerDriver import SQLServerDriver
from Drivers.WebServerDriver import WebServerDriver from Drivers.WebServerDriver import WebServerDriver
from Dispatchers.AgentsDispatcher import AgentsDispatcher
inputs:dict[str, dict[str, Any|None]] = { inputs:dict[str, dict[str, Any|None]] = {
"default_models" : { "default_models" : {
"agents" : AgentsController, "agents" : AgentsController,
"sql_server" : SQLServerDriver, "sql_server" : SQLServerDriver,
"web_server" : WebServerDriver "web_server" : WebServerDriver,
"agents_dispatcher" : AgentsDispatcher,
} }
} }

View File

@ -1,6 +1,3 @@
@echo off @rem @echo off
cd %~dp0..\Python
:bucle python3 run.py
cscript //nologo ..\VisualBasicScripts\NucelarMonitor.vbs
@ping 127.255.255.255 -n 1 -w 5000 >nul
goto bucle

View File

@ -0,0 +1,6 @@
@echo off
:bucle
cscript //nologo .\NucelarMonitor.vbs
@ping 127.255.255.255 -n 1 -w 5000 >nul
goto bucle

View File

@ -10,7 +10,7 @@ Dim memory_maximum, memory_minimum, memory_average, memory_in, memory_out, memor
key = "pc_miguel" key = "pc_miguel"
print_json = True print_json = True
send_data = False send_data = False
url_target = "" url_target = "http://127.0.0.1:13000/agents/windows/" & key
ips = "" ips = ""
disks_info = "" disks_info = ""
start_date = DateDiff("s", #1/1/1970#, Now) start_date = DateDiff("s", #1/1/1970#, Now)
@ -34,12 +34,13 @@ For Each item In wmi_service.ExecQuery("SELECT Name, Domain FROM Win32_ComputerS
hostnames = hostnames & """" & item.Name & """" hostnames = hostnames & """" & item.Name & """"
Next Next
For Each item In wmi_service.ExecQuery("SELECT IPAddress FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True") For Each item In wmi_service.ExecQuery("SELECT NetConnectionID, IPAddress FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
If Not IsNull(item.IPAddress) Then If Not IsNull(item.IPAddress) Then
If ips <> "" Then ips = ips & "," End If If ips <> "" Then ips = ips & "," End If
ips = ips & """" & item.IPAddress(0) & """" ips = ips & "[""" & item.NetConnectionID(0) & """, """ & item.IPAddress(0) & """]"
End If End If
Next Next
ips = "[" & ips & "]"
For Each item In wmi_service.ExecQuery("SELECT DeviceID, Size, FreeSpace FROM Win32_LogicalDisk where DriveType = 3") For Each item In wmi_service.ExecQuery("SELECT DeviceID, Size, FreeSpace FROM Win32_LogicalDisk where DriveType = 3")
@ -99,12 +100,12 @@ if cpu_summatory <> 0 and iterations <> 0 Then cpu_average = Replace(CStr(cpu_su
If memory_summatory <> 0 and iterations <> 0 Then memory_average = Round(memory_summatory / iterations) End If If memory_summatory <> 0 and iterations <> 0 Then memory_average = Round(memory_summatory / iterations) End If
json = "[" json = "["
json = json & """" & key & """," ' json = json & """" & key & ""","
json = json & "[" & hostnames & "],""" & domain & """,[" & ips & "],[" & disks_info & "]," json = json & "[" & hostnames & "],""" & domain & """,[" & ips & "],[" & disks_info & "],"
json = json & "[" & start_date & "," & DateDiff("s", #1/1/1970#, Now) & "]," 'json = json & "[" & start_date & "," & DateDiff("s", #1/1/1970#, Now) & "],"
json = json & iterations & "," 'json = json & iterations & ","
json = json & "[" & cpu_in & "," & cpu_out & "," & cpu_minimum & "," & cpu_maximum & "," & cpu_average & "]" 'json = json & "[" & cpu_in & "," & cpu_out & "," & cpu_minimum & "," & cpu_maximum & "," & cpu_average & "]"
json = json & "[" & total_memory & "," & memory_in & "," & memory_out & "," & memory_minimum & "," & memory_maximum & "," & memory_average & "]" 'json = json & "[" & total_memory & "," & memory_in & "," & memory_out & "," & memory_minimum & "," & memory_maximum & "," & memory_average & "]"
json = json & "]" json = json & "]"
if print_json Then if print_json Then

View File

@ -0,0 +1,63 @@
Option Explicit
On Error Resume Next
Dim strComputer, objWMIService, colConfigs, objConfig, colAdapters, objAdapter, strNombre, strIP, strSubnet, strTipo, strMascaraBits, i
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
' Consultamos las configuraciones que tienen IP habilitada
Set colConfigs = objWMIService.ExecQuery("Select * from Win32_NetworkAdapterConfiguration Where IPEnabled = True")
For Each objConfig In colConfigs
' 1. Obtener el Nombre de la Interfaz (NetConnectionID)
Set colAdapters = objWMIService.ExecQuery("Select * from Win32_NetworkAdapter Where DeviceID = " & objConfig.Index)
strNombre = "N/A"
For Each objAdapter In colAdapters
strNombre = objAdapter.NetConnectionID
Next
' 2. Procesar cada dirección IP del adaptador
If Not IsNull(objConfig.IPAddress) Then
For i = 0 To UBound(objConfig.IPAddress)
strIP = objConfig.IPAddress(i)
strSubnet = objConfig.IPSubnet(i)
' 3. Verificar si es IPv6 (buscando el símbolo ":")
If InStr(strIP, ":") > 0 Then
strTipo = "IPv6"
strMascaraBits = strSubnet ' En IPv6, WMI ya devuelve el prefijo (ej: 64)
Else
strTipo = "IPv4"
strMascaraBits = MascaraABits(strSubnet)
End If
' Salida de datos
WScript.Echo "Interfaz: " & strNombre
WScript.Echo "Tipo: " & strTipo
WScript.Echo "IP: " & strIP
WScript.Echo "Máscara: /" & strMascaraBits
WScript.Echo "------------------------------------------"
Next
End If
Next
' Función para convertir máscara decimal (255.255.255.0) a bits (24)
Function MascaraABits(strMask)
Dim arrOctetos, intBits, octeto
intBits = 0
arrOctetos = Split(strMask, ".")
For Each octeto In arrOctetos
Select Case Int(octeto)
Case 255: intBits = intBits + 8
Case 254: intBits = intBits + 7
Case 252: intBits = intBits + 6
Case 248: intBits = intBits + 5
Case 240: intBits = intBits + 4
Case 224: intBits = intBits + 3
Case 192: intBits = intBits + 2
Case 128: intBits = intBits + 1
End Select
Next
MascaraABits = intBits
End Function