Changeset View
Changeset View
Standalone View
Standalone View
swh/icinga_plugins/save_code_now.py
Show All 15 Lines | |||||
class SaveCodeNowCheck(BaseCheck): | class SaveCodeNowCheck(BaseCheck): | ||||
TYPE = "SAVECODENOW" | TYPE = "SAVECODENOW" | ||||
DEFAULT_WARNING_THRESHOLD = 60 | DEFAULT_WARNING_THRESHOLD = 60 | ||||
DEFAULT_CRITICAL_THRESHOLD = 120 | DEFAULT_CRITICAL_THRESHOLD = 120 | ||||
def __init__(self, obj: Dict, origin: str, visit_type: str) -> None: | def __init__(self, obj: Dict, origin: str, visit_type: str) -> None: | ||||
super().__init__(obj) | super().__init__(obj, application="scn") | ||||
self.api_url = obj["swh_web_url"].rstrip("/") | self.api_url = obj["swh_web_url"].rstrip("/") | ||||
self.poll_interval = obj["poll_interval"] | self.poll_interval = obj["poll_interval"] | ||||
self.origin = origin | self.origin = origin | ||||
self.visit_type = visit_type | self.visit_type = visit_type | ||||
self.register_prometheus_gauge("duration", "seconds", ["status"]) | |||||
self.register_prometheus_gauge("status", "") | |||||
@staticmethod | @staticmethod | ||||
def api_url_scn(root_api_url: str, origin: str, visit_type: str) -> str: | def api_url_scn(root_api_url: str, origin: str, visit_type: str) -> str: | ||||
"""Compute the save code now api url for a given origin""" | """Compute the save code now api url for a given origin""" | ||||
return f"{root_api_url}/api/1/origin/save/{visit_type}/url/{origin}/" | return f"{root_api_url}/api/1/origin/save/{visit_type}/url/{origin}/" | ||||
def main(self) -> int: | def main(self) -> int: | ||||
"""Scenario description: | """Scenario description: | ||||
▲ Show 20 Lines • Show All 42 Lines • ▼ Show 20 Lines | def main(self) -> int: | ||||
if total_time > self.critical_threshold: | if total_time > self.critical_threshold: | ||||
self.print_result( | self.print_result( | ||||
"CRITICAL", | "CRITICAL", | ||||
f"{REPORT_MSG} {origin_info} took more than {total_time:.2f}s " | f"{REPORT_MSG} {origin_info} took more than {total_time:.2f}s " | ||||
f'and has status: {result["save_task_status"]}.', | f'and has status: {result["save_task_status"]}.', | ||||
total_time=total_time, | total_time=total_time, | ||||
) | ) | ||||
self.collect_prometheus_metric("duration", total_time, ["timeout"]) | |||||
self.collect_prometheus_metric("status", 2) | |||||
return 2 | return 2 | ||||
if result[status_key] == "succeeded": | if result[status_key] == "succeeded": | ||||
(status_code, status) = self.get_status(total_time) | (status_code, status) = self.get_status(total_time) | ||||
self.print_result( | self.print_result( | ||||
status, | status, | ||||
f"{REPORT_MSG} {origin_info} took {total_time:.2f}s and succeeded.", | f"{REPORT_MSG} {origin_info} took {total_time:.2f}s and succeeded.", | ||||
total_time=total_time, | total_time=total_time, | ||||
) | ) | ||||
self.collect_prometheus_metric("duration", total_time, ["succeeded"]) | |||||
self.collect_prometheus_metric("status", status_code) | |||||
return status_code | return status_code | ||||
elif result[status_key] == "failed": | elif result[status_key] == "failed": | ||||
self.print_result( | self.print_result( | ||||
"CRITICAL", | "CRITICAL", | ||||
f"{REPORT_MSG} {origin_info} took {total_time:.2f}s and failed.", | f"{REPORT_MSG} {origin_info} took {total_time:.2f}s and failed.", | ||||
total_time=total_time, | total_time=total_time, | ||||
) | ) | ||||
self.collect_prometheus_metric("duration", total_time, ["failed"]) | |||||
self.collect_prometheus_metric("status", 2) | |||||
return 2 | return 2 | ||||
else: | else: | ||||
self.print_result( | self.print_result( | ||||
"CRITICAL", | "CRITICAL", | ||||
f"{REPORT_MSG} {origin_info} took {total_time:.2f}s " | f"{REPORT_MSG} {origin_info} took {total_time:.2f}s " | ||||
"and resulted in unsupported status: " | "and resulted in unsupported status: " | ||||
f"{result['save_request_status']} ; {result[status_key]}.", | f"{result['save_request_status']} ; {result[status_key]}.", | ||||
total_time=total_time, | total_time=total_time, | ||||
) | ) | ||||
self.collect_prometheus_metric("duration", total_time, ["failed"]) | |||||
self.collect_prometheus_metric("status", 2) | |||||
return 2 | return 2 |