hide deprecated message

This commit is contained in:
2026-02-02 13:57:23 +01:00
parent 5c777483fc
commit b68889e869
2 changed files with 28 additions and 19 deletions

View File

@@ -33,6 +33,8 @@ options:
-h, --help show this help message and exit -h, --help show this help message and exit
--config CONFIG Path to config file --config CONFIG Path to config file
--port PORT Override port from config file --port PORT Override port from config file
--interval INTERVAL Override interval from config file
--show-deprecated Enable deprecated warnings in log
``` ```
# Install # Install

View File

@@ -114,7 +114,7 @@ AMPS_GAUGE = Gauge(
) )
# set info metric # set info metric
SYSTEM_INFO = Info( SYSTEM_INFO = Info(
"redfish_system_info", "System information (model, serial, etc.)", ["host", "group"] "redfish_system", "System information (model, serial, etc.)", ["host", "group"]
) )
@@ -275,7 +275,7 @@ async def discover_redfish_resources(
def get_power_resource_info( def get_power_resource_info(
member_data: dict, host_fqdn: str member_data: dict, host_fqdn: str, show_deprecated_warnings
) -> tuple[str | None, str | None]: ) -> tuple[str | None, str | None]:
"""Get the URL and type of Power resource (PowerSubsystem or Power).""" """Get the URL and type of Power resource (PowerSubsystem or Power)."""
# Try PowerSubsystem (new Redfish versions) # Try PowerSubsystem (new Redfish versions)
@@ -286,6 +286,7 @@ def get_power_resource_info(
# Try Power for older Redfish versions # Try Power for older Redfish versions
power_url = member_data.get("Power", {}).get("@odata.id") power_url = member_data.get("Power", {}).get("@odata.id")
if power_url: if power_url:
if show_deprecated_warnings:
logging.warning( logging.warning(
"DEPRECATED: Host %s uses old Redfish API (Power instead of PowerSubsystem). " "DEPRECATED: Host %s uses old Redfish API (Power instead of PowerSubsystem). "
"Consider updating the firmware for full compatibility.", "Consider updating the firmware for full compatibility.",
@@ -390,7 +391,7 @@ def normalize_url(url: str) -> str:
return url return url
async def get_power_data(session, host: HostConfig): async def get_power_data(session, host: HostConfig, show_deprecated_warnings):
"""Query Redfish for power data and update Prometheus metrics""" """Query Redfish for power data and update Prometheus metrics"""
if host.should_skip(): if host.should_skip():
logging.warning( logging.warning(
@@ -441,7 +442,7 @@ async def get_power_data(session, host: HostConfig):
# Get Power ressource (fallback to "Power") # Get Power ressource (fallback to "Power")
power_resource_url, power_resource_type = get_power_resource_info( power_resource_url, power_resource_type = get_power_resource_info(
member_data, host.fqdn member_data, host.fqdn, show_deprecated_warnings
) )
if not power_resource_url: if not power_resource_url:
continue continue
@@ -591,7 +592,7 @@ async def logout_host(session, host):
host.session.logout_url = None host.session.logout_url = None
async def run_exporter(config, stop_event): async def run_exporter(config, stop_event, show_deprecated_warnings):
"""Main loop""" """Main loop"""
port = config.get("port", 8000) port = config.get("port", 8000)
default_username = config.get("username") default_username = config.get("username")
@@ -633,7 +634,7 @@ async def run_exporter(config, stop_event):
while not stop_event.is_set(): while not stop_event.is_set():
tasks = [] tasks = []
for hc in host_objs: for hc in host_objs:
tasks.append(get_power_data(session, hc)) tasks.append(get_power_data(session, hc, show_deprecated_warnings))
tasks.append(get_system_info(session, hc)) tasks.append(get_system_info(session, hc))
await asyncio.gather(*tasks) await asyncio.gather(*tasks)
await process_request(interval) await process_request(interval)
@@ -649,14 +650,19 @@ async def run_exporter(config, stop_event):
async def main(): async def main():
"""Modern asyncio entry point""" """Modern asyncio entry point"""
parser = argparse.ArgumentParser(description="Redfish Prometheus Exporter") parser = argparse.ArgumentParser(description="Redfish Prometheus Exporter.")
parser.add_argument("--config", default="config.yaml", help="Path to config file") parser.add_argument("--config", default="config.yaml", help="Path to config file.")
parser.add_argument("--port", type=int, help="Override port from config file") parser.add_argument("--port", type=int, help="Override port from config file.")
parser.add_argument( parser.add_argument(
"--interval", type=int, help="Override interval from config file" "--interval", type=int, help="Override interval from config file."
) )
parser.add_argument("--show-deprecated", action="store_true", help="Enable deprecated warnings in log.")
args = parser.parse_args() args = parser.parse_args()
show_deprecated_warnings = args.show_deprecated
if show_deprecated_warnings:
logging.warning("Deprecated warnings are enabled.")
# Load YAML config # Load YAML config
with open(args.config, "r", encoding="utf-8") as file: with open(args.config, "r", encoding="utf-8") as file:
config = yaml.safe_load(file) config = yaml.safe_load(file)
@@ -667,13 +673,14 @@ async def main():
if args.interval is not None: if args.interval is not None:
config["interval"] = args.interval config["interval"] = args.interval
stop_event = asyncio.Event() stop_event = asyncio.Event()
loop = asyncio.get_running_loop() loop = asyncio.get_running_loop()
# Handle SIGINT (Ctrl+C) and SIGTERM # Handle SIGINT (Ctrl+C) and SIGTERM
for sig in (signal.SIGINT, signal.SIGTERM): for sig in (signal.SIGINT, signal.SIGTERM):
loop.add_signal_handler(sig, stop_event.set) loop.add_signal_handler(sig, stop_event.set)
await run_exporter(config, stop_event) await run_exporter(config, stop_event, show_deprecated_warnings)
if __name__ == "__main__": if __name__ == "__main__":