Message Router retirement and migration to IEBUS/ISBUS

Change-Id: Ic64468b887f715ffe6aafa39441ea7b8c3366621
This commit is contained in:
az7961 2024-08-16 10:39:19 -05:00
parent 0cc81cbaaf
commit 7815fe9d08

View File

@ -1,200 +0,0 @@
#!/usr/bin/env python3
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# Examples:
# /usr/lib/nagios/plugins/send_http_post_event.py
# --type 'host'
# --failure_host 'hostwithevent.y.x.com'
# --failed_unit_info 'Failed unit info'
# --monitoring-hostname 'nagioshost.x.y.com'
# --primary_url 'http://primary.url/api'
# --severity 'critical'
# sends HTTP POST with following payload:
# {
# "AlertGroup": "AON",
# "AlertKey": "hostwithevent.y.x.com:Redfish_HW_Report",
# "FirstOccurrence": "<current UTC time>",
# "Identifier": "hostwithevent.y.x.com:<failed unit info>:Redfish_HW_Report",
# "LastOccurrence": "<current UTC time>",
# "Location": "Azure",
# "Manager": "Redfish_HW_Report",
# "Node": "hostwithevent.y.x.com",
# "Severity": 5,
# "Summary": "Hardware Fault -- SerialNumber Manufacturer Model",
# "Type": 1
# }
#
# /usr/lib/nagios/plugins/send_http_post_event.py
# --type 'host'
# --failure_host 'hostwithevent.y.x.com'
# --failed_unit_info 'Failed unit info'
# --servicedesc 'Service_nova-compute'
# --monitoring-hostname 'nagioshost.x.y.com'
# --primary_url 'http://primary.url/api'
# --severity 'major'
# sends HTTP POST with following payload:
# {
# "AlertGroup": "AON",
# "AlertKey": "hostwithevent.y.x.com:Redfish_HW_Report",
# "FirstOccurrence": "<current UTC time>",
# "Identifier": "hostwithevent.y.x.com:Redfish_HW_Report",
# "LastOccurrence": "<current UTC time>",
# "Location": "Azure",
# "Manager": "Redfish_HW_Report",
# "Node": "hostwithevent.y.x.com",
# "Severity": 4,
# "Summary": "Hardware Fault -- <failed unit info>",
# "Type": 1
# }
import sys
import requests
import argparse
import json
from datetime import datetime
SEVERITY = {
'clear': 0,
'OK': 0,
'degraded': 1,
'warning': 2,
'WARN': 2,
'error': 2,
'minor': 3,
'major': 4,
'critical': 5,
'CRIT': 5,
'unknown': 6,
'UNKWN': 6
}
TYPEOFEVENT = {
'host': 1,
'service': 2
}
def utc_now():
return datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%SZ')
parser = argparse.ArgumentParser(
description='HTTP POST event handler for nagios.')
parser.add_argument(
'--type',
type=str,
choices=list(TYPEOFEVENT.keys()),
required=True,
help='type of event')
parser.add_argument(
'--failure_host',
type=str,
required=True,
help='Source host of the event')
parser.add_argument('--failed_unit_info', type=str, required=True,
help='Output associated with the event')
parser.add_argument(
'--servicedesc',
type=str,
required=False,
help='Monitor name with event')
parser.add_argument(
'--monitoring_hostname',
type=str,
required=False,
help='Name of the nagios host monitoring')
parser.add_argument(
'--primary_url',
type=str,
required=True,
help='primary REST API with scheme, host, port, api path to POST event to')
parser.add_argument(
'--secondary_url',
type=str,
required=False,
help='secondary REST API with scheme, host, port, api path to POST event to')
parser.add_argument(
'--timeout',
type=int,
default=20,
required=False,
help='timeout in seconds, default 20s')
parser.add_argument(
'--severity',
type=str,
choices=list(SEVERITY.keys()),
required=True,
help='Severity of the event')
args = parser.parse_args()
# Create the payload
payload = {
"AlertGroup": "AON",
"AlertKey": f"{args.failure_host}:Redfish_HW_Report",
"FirstOccurrence": utc_now(),
"Identifier": f"{args.failure_host}:Redfish_HW_Report",
"LastOccurrence": utc_now(),
"Location": "Azure",
"Manager": "Redfish_HW_Report",
"Node": args.failure_host,
"Severity": SEVERITY[args.severity],
"Summary": f"Hardware Fault -- {args.failed_unit_info}",
"Type": TYPEOFEVENT[args.type],
}
max_retry = 5
retry = 0
# Send to primary URL
while retry < max_retry:
retry += 1
try:
response = requests.post(
args.primary_url,
data=json.dumps(payload),
headers={'Content-Type': 'application/json'},
timeout=args.timeout,
verify=False
)
response.raise_for_status()
print('Event successfully sent to primary URL')
break
except Exception as e:
print(f'Primary request failed: {e}')
if retry < max_retry:
print('Retrying - {}'.format(retry))
continue
pass
# Send to secondary URL if provided
if args.secondary_url:
retry = 0
while retry < max_retry:
retry += 1
try:
response = requests.post(
args.secondary_url,
data=json.dumps(payload),
headers={'Content-Type': 'application/json'},
timeout=args.timeout,
verify=False
)
response.raise_for_status()
print('Event successfully sent to secondary URL')
break
except Exception as e:
print(f'Secondary request failed: {e}')
if retry < max_retry:
print('Retrying - {}'.format(retry))
continue
pass
sys.exit(0)