add logout function for hpe redfish

This commit is contained in:
2025-11-13 12:59:26 +01:00
parent 8f52afc174
commit 6c93c15e06

View File

@@ -217,6 +217,28 @@ async def get_power_data(session, host: HostConfig):
REQUEST_LATENCY.labels(host=host.fqdn).observe(time.monotonic() - start) REQUEST_LATENCY.labels(host=host.fqdn).observe(time.monotonic() - start)
async def logout_host(session, host):
"""Clean logout for Redfish with session tokens"""
if not host.session_token:
return
try:
logout_url = f"https://{host.fqdn}/redfish/v1/SessionService/Sessions"
async with session.delete(
logout_url,
headers={"X-Auth-Token": host.session_token},
ssl=False,
timeout=5,
) as resp:
if resp.status in (200, 204):
logging.info("Logged out from %s", host.fqdn)
else:
logging.warning("Logout failed for %s (HTTP %s)", host.fqdn, resp.status)
except Exception as e:
logging.warning("Error during logout for %s: %s", host.fqdn, e)
finally:
host.session_token = None
async def run_exporter(config, stop_event): async def run_exporter(config, stop_event):
"""Main loop""" """Main loop"""
@@ -248,11 +270,15 @@ async def run_exporter(config, stop_event):
# Connection pooling with aiohttp # Connection pooling with aiohttp
connector = aiohttp.TCPConnector(limit_per_host=5, limit=50, ttl_dns_cache=300) connector = aiohttp.TCPConnector(limit_per_host=5, limit=50, ttl_dns_cache=300)
async with aiohttp.ClientSession(connector=connector) as session: async with aiohttp.ClientSession(connector=connector) as session:
hosts = [HostConfig(**h) for h in config["hosts"]]
while not stop_event.is_set(): while not stop_event.is_set():
tasks = [get_power_data(session, hc) for hc in host_objs] tasks = [get_power_data(session, hc) for hc in host_objs]
await asyncio.gather(*tasks) await asyncio.gather(*tasks)
await process_request(interval) await process_request(interval)
# shutdown service
logging.info("Exporter stopping, logging out from Redfish sessions...")
await asyncio.gather(*(logout_host(session, h) for h in hosts if h.session_token))
logging.info("Exporter stopped cleanly.") logging.info("Exporter stopped cleanly.")