Files
SNMP-Influx-collector/cont/main.py
2026-02-28 17:48:01 +01:00

108 lines
2.8 KiB
Python

import ipaddress, os, re, time, funct, classes, asyncio
# SNMP
from pysnmp.hlapi.v3arch.asyncio import *
# QoL
from typing import Annotated, Final
# functions
from funct import *
# additional classes
from classes import *
# Program ENV---------------------------------------
IDRAC_HOST_LIST: Final[list] = os.getenv("IDRAC_HOST_LIST").split(";")
CISCO_HOST_LIST: Final[list] = os.getenv("CISCO_HOST_LIST").split(";")
# Flightchecks-------------------------------------------
# if HOST_LIST empty, raise Exception No hosts passed
if not IDRAC_HOST_LIST and not CISCO_HOST_LIST:
raise Exception("No hosts passed\nExiting...")
# for host in HOST_LIST check if valid IP and create a list with strings
for idracHost in IDRAC_HOST_LIST:
try:
ip = str(ipaddress.IPv4Address(idracHost))
except ValueError:
raise Exception(f" IP {ip} for IDRAC devices is invalid.\nExiting...")
for ciscoHost in CISCO_HOST_LIST:
try:
ip = str(ipaddress.IPv4Address(ciscoHost))
except ValueError:
raise Exception(f" IP {ip} for Cisco devices is invalid.\nExiting...")
# Done under "Program ENV" on line ~18
# Code-------------------------------------------
async def main():
# Queues for storing states that a database needs to insert
# idracQueue = asyncio.Queue()
# ciscoQueue = asyncio.Queue()
# fanQueue = asyncio.Queue()
mainQueue(maxsize=225)
while True:
tasks = []
# IDRAC part
async with asyncio.TaskGroup() as tg:
for IdracIP in IDRAC_HOST_LIST:
tasks.append(tg.create_task(idracPoolRemote_v3(IdracIP, mainQueue)))
# tasks.append(tg.create_task(idracPoolRemoteFAN_v3(IdracIP, mainQueue)))
# for CiscoIP in CISCO_HOST_LIST:
# tasks.append(tg.create_task(ciscoPoolRemote(CiscoIP, mainQueue)))
sleep(20)
# yes = asyncio.run(idracPoolRemote_v3("192.168.20.7"))
# fan = asyncio.run(idracPoolRemoteFAN_v3("192.168.20.7"))
# print("fanThingy")
# # print(fan)
# for thing in fan:
# print(fan[thing]["name"], fan[thing]["rpm"])
# for thing in fan:
# print(thing)
# print("for loop")
# print(yes)
# print("End of code")
if __name__ == "__main__":
loop = asyncio.get_event_loop()
task = loop.create_task(main())
# poolRemote(HOST_LIST[0])
# while True:
# tasks = [poolRemote(ip) for ip in HOST_LIST]
# results = await asyncio.gather(*tasks)
# print(results)
# await asyncio.sleep(20)
# Create connections for MySQL and InfluxDB
# functions for inserting data into two DBs
# DNS lookup if the user passed a hostname
# if not given a specific IP for DNS server, fallback to 1.1.1.1
# maybe a class?
# store last value and check if it wasn't sent already to the database