Skip to content

Commit

Permalink
Updated alarm_notify script to reflect changes in sandesh alarm
Browse files Browse the repository at this point in the history
structure

Change-Id: I755f53c67a9e3b0a679a5fabdb3440cc899bdea2
Closes-Bug: #1604903
(cherry picked from commit 77398ee)

contrail-alarm-notify script should use analytics-api admin port with basic
http authentication

Change-Id: I9c6e5ff423023df3dc7a2cbab4260b3666a5591d
Closes-Bug: #1610480
(cherry picked from commit 69b05ce)
  • Loading branch information
Sundaresan Rajangam committed Aug 6, 2016
1 parent e0d11d1 commit 94d6d57
Showing 1 changed file with 23 additions and 39 deletions.
62 changes: 23 additions & 39 deletions src/opserver/alarm_notify.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
from sseclient import SSEClient
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
from requests.auth import HTTPBasicAuth

from sandesh.viz.constants import UVE_MAP

Expand Down Expand Up @@ -61,7 +62,6 @@ def __init__(self):
self._args = None
self._email_server = None
self._sender_email_pwd = None
self._alarm_types = None
self._analytics_api_name_to_table_name = UVE_MAP
self._table_name_to_analytics_api_name = \
{v: k for k, v in UVE_MAP.iteritems()}
Expand All @@ -71,9 +71,6 @@ def run(self):
try:
if self._parse_args() != 0:
return
self._alarm_types = self._get_alarm_types()
if not self._alarm_types:
return
if not self._connect_to_smtp_server():
return
init_alarm_sub = 'Contrail Alarms Notification!'
Expand All @@ -97,7 +94,9 @@ def run(self):
def _parse_args(self):
defaults = {
'analytics_api_server': '127.0.0.1',
'analytics_api_server_port': '8081',
'analytics_api_server_port': '8181',
'admin_user': 'admin',
'admin_password': 'contrail123',
'smtp_server': None,
'smtp_server_port': None,
'sender_email': None,
Expand All @@ -113,6 +112,10 @@ def _parse_args(self):
parser.add_argument('--analytics-api-server-port',
type=int,
help='Port of Analytics API Server')
parser.add_argument("--admin-user",
help="Name of admin user")
parser.add_argument("--admin-password",
help="Password of admin user")
parser.add_argument('--smtp-server',
required=True,
help='Name (or) IP Address of SMTP Server')
Expand Down Expand Up @@ -166,34 +169,15 @@ def _login_to_smtp_server():
return False
# end _login_to_smtp_server

def _get_alarm_types(self):
alarm_types_url = 'http://{0}:{1}/analytics/alarm-types'.format(
self._args.analytics_api_server,
self._args.analytics_api_server_port)
alarm_types = None
try:
resp = requests.get(alarm_types_url)
except requests.ConnectionError:
print 'Could not connect to analytics-api {0}:{1}'.format(
self._args.analytics_api_server,
self._args.analytics_api_server_port)
else:
if resp.status_code == 200:
try:
alarm_types = json.loads(resp.text)
except ValueError:
pass
return alarm_types
# end _get_alarm_types

def _listen_and_notify_alarms(self):
while True:
try:
alarm_stream_url = \
'http://{0}:{1}/analytics/alarm-stream'.format(
self._args.analytics_api_server,
self._args.analytics_api_server_port)
alarm_stream = SSEClient(alarm_stream_url)
alarm_stream = SSEClient(alarm_stream_url, auth=HTTPBasicAuth(
self._args.admin_user, self._args.admin_password))
for alarm in alarm_stream:
if alarm.event != 'update':
continue
Expand Down Expand Up @@ -247,29 +231,29 @@ def _parse_alarm(self, alarm):
alarm_info = ContrailAlarmInfo()
try:
alarm_info.type = alarm_elt['type']
alarm_description = alarm_elt.get('description')
if alarm_description:
desc = alarm_description.split('.', 1)
alarm_info.summary = desc[0]
if len(desc) == 2:
alarm_info.description = desc[1]
else:
alarm_info.description = desc[0]
else:
alarm_info.summary = alarm_info.type
alarm_info.description = ''
alarm_info.severity = alarm_elt['severity']
alarm_info.timestamp = datetime.datetime.fromtimestamp(
alarm_elt['timestamp']/1000000.0).strftime(
'%Y-%m-%d %H:%M:%S')
alarm_info.ack = 'Acknowledged' if alarm_elt['ack'] \
else 'Unacknowledged'
alarm_info.details = json.dumps(alarm_elt['any_of'],
indent=4)
alarm_info.details = json.dumps(
alarm_elt['alarm_rules'], indent=4)
except KeyError:
print 'Error parsing alarm'
self._log_alarm(alarm_elt)
else:
try:
alarm_tbl_info = \
self._alarm_types[alarm_data.table]
alarm_info.summary, alarm_info.description = tuple(
alarm_tbl_info[alarm_info.type].split('.', 1))
except KeyError:
alarm_info.summary = alarm_type
alarm_info.description = ''
alarm_info.summary = alarm_info.summary.lstrip()
alarm_info.description = \
alarm_info.description.lstrip()
alarm_data.alarms.append(alarm_info)
return alarm_data
return None
Expand Down

0 comments on commit 94d6d57

Please sign in to comment.