bd_ing

PR0205

from influxdb_client.client.write_api import ASYNCHRONOUS
from influxdb_client.client.influxdb_client import InfluxDBClient
from influxdb_client.client.exceptions import InfluxDBError
from influxdb_client.client.write.point import Point
from influxdb_client.client.write_api import WriteOptions
from urllib3.exceptions import NewConnectionError
import psutil
import socket

INFLUX_URL = "http://localhost:8086"
INFLUX_TOKEN = "MyInitialAdminToken0=="

def metricas_sistema():
    cpu_usage = psutil.cpu_percent(interval=1)
    mem = psutil.virtual_memory()
    ram_used_gb = round(mem.used / (1024**3) / 2)
    ram_percent = mem.percent

    disk = psutil.disk_usage("/")
    disk_usage = disk.percent

    return {
            "host": socket.gethostname(),
            "cpu_percent": cpu_usage,
            "ram_used_gb": ram_used_gb,
            "ram_percent": ram_percent,
            "disk_percent": disk_usage,
            }
def insert(pc_data, write_api):
        p = Point("medicion_pc")\
            .tag("metrics", "pc")\
            .field("host", pc_data["host"])\
            .field("cpu_percent", pc_data["cpu_percent"])\
            .field("ram_used_gb", pc_data["ram_used_gb"])\
            .field("ram_percent", pc_data["ram_percent"])\
            .field("disk_percent", pc_data["disk_percent"])\
            .time(None)
        write_api.write(bucket="test_bucket", org="docs", record=p)
print("--Iniciando conexion--")

try:
    client = InfluxDBClient(
                url=INFLUX_URL,
                token=INFLUX_TOKEN,
                org="docs"
            )
    print(f"Verificando estado de salud de InfluxDB en {INFLUX_URL}")
    if client.health().status == "pass":
        print("[INFO] Exito")
        print(f"Version: {client.version}")
        options = WriteOptions(
            batch_size=500,
            flush_interval=1000,
            write_type=ASYNCHRONOUS
            )
        write_api = client.write_api(write_options=options)
        while True:
            insert(metricas_sistema(), write_api)
    else:
        print("Error")
        print(f"    Error: {client.health().status}")
except (InfluxDBError, NewConnectionError) as e:
    print("[ERROR] Error al conectar con INfluxDB: ")
    print(f"    Detalle: {e}")
except  KeyboardInterrupt as key:
    print("Operacion finalizada por usuario")
finally:
    if client: # pyright: ignore
        client.close()
        print("--Conexion cerrada--")