hide deprecated message
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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__":
|
||||||
|
|||||||
Reference in New Issue
Block a user