Message Router retirement and migration to IEBUS/ISBUS
Change-Id: Ic64468b887f715ffe6aafa39441ea7b8c3366621
This commit is contained in:
@@ -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)
|
|
Reference in New Issue
Block a user