# contact with: wajeeha.hamid@xflowresearch.com
##
-'''
+"""
AWS-Plugin implements all the methods of MON to interact with AWS using the BOTO client
-'''
+"""
__author__ = "Wajeeha Hamid"
-__date__ = "18-Sept-2017"
+__date__ = "18-Sept-2017"
import datetime
import logging
log = logging.getLogger(__name__)
-class Metrics():
- def createMetrics(self,cloudwatch_conn,metric_info):
+class Metrics:
+
+ def createMetrics(self, cloudwatch_conn, metric_info):
try:
-
- '''createMetrics will be returning the metric_uuid=0 and
- status=True when the metric is supported by AWS'''
- supported=self.check_metric(metric_info['metric_name'])
+ """createMetrics will be returning the metric_uuid=0 and
+ status=True when the metric is supported by AWS"""
+
+ supported = self.check_metric(metric_info['metric_name'])
metric_resp = dict()
metric_resp['resource_uuid'] = metric_info['resource_uuid']
-
- if supported['status'] == True:
+
+ if supported['status']:
metric_resp['status'] = True
metric_resp['metric_uuid'] = 0
- log.debug("Metrics Configured Succesfully : %s" , metric_resp)
+ log.debug("Metrics Configured Successfully : %s", metric_resp)
else:
metric_resp['status'] = False
metric_resp['metric_uuid'] = None
- log.error("Metric name is not supported")
-
- return metric_resp
+ log.error("Metric name is not supported")
+
+ return metric_resp
except Exception as e:
log.error("Metric Configuration Failed: " + str(e))
-#-----------------------------------------------------------------------------------------------------------------------------
-
- def metricsData(self,cloudwatch_conn,data_info):
+
+ def metricsData(self, cloudwatch_conn, data_info):
"""Getting Metrics Stats for an Hour.The datapoints are
received after every one minute.
timestamp_arr = {}
value_arr = {}
- supported=self.check_metric(data_info['metric_name'])
+ supported = self.check_metric(data_info['metric_name'])
- if supported['status'] == True:
+ if supported['status']:
if int(data_info['collection_period']) % 60 == 0:
- metric_stats=cloudwatch_conn.get_metric_statistics(60, datetime.datetime.utcnow() - datetime.timedelta(seconds=int(data_info['collection_period'])),
- datetime.datetime.utcnow(),supported['metric_name'],'AWS/EC2', 'Maximum',
- dimensions={'InstanceId':data_info['resource_uuid']}, unit='Percent')
+ metric_stats = cloudwatch_conn.get_metric_statistics(60,
+ datetime.datetime.utcnow() - datetime.timedelta(
+ seconds=int(
+ data_info['collection_period'])),
+ datetime.datetime.utcnow(),
+ supported['metric_name'], 'AWS/EC2', 'Maximum',
+ dimensions={
+ 'InstanceId': data_info['resource_uuid']},
+ unit='Percent')
index = 0
- for itr in range (len(metric_stats)):
+ for itr in range(len(metric_stats)):
timestamp_arr[index] = str(metric_stats[itr]['Timestamp'])
value_arr[index] = metric_stats[itr]['Maximum']
- index +=1
+ index += 1
metric_info_dict['time_series'] = timestamp_arr
metric_info_dict['metrics_series'] = value_arr
log.debug("Metrics Data : %s", metric_info_dict)
return metric_info_dict
- else:
+ else:
log.error("Collection Period should be a multiple of 60")
return False
else:
log.error("Metric name is not supported")
return False
-
+
except Exception as e:
log.error("Error returning Metrics Data" + str(e))
-#-----------------------------------------------------------------------------------------------------------------------------
- def updateMetrics(self,cloudwatch_conn,metric_info):
-
- '''updateMetrics will be returning the metric_uuid=0 and
- status=True when the metric is supported by AWS'''
+ def updateMetrics(self, cloudwatch_conn, metric_info):
+
+ """updateMetrics will be returning the metric_uuid=0 and
+ status=True when the metric is supported by AWS"""
try:
- supported=self.check_metric(metric_info['metric_name'])
+ supported = self.check_metric(metric_info['metric_name'])
update_resp = dict()
update_resp['resource_uuid'] = metric_info['resource_uuid']
- if supported['status'] == True:
+ if supported['status']:
update_resp['status'] = True
update_resp['metric_uuid'] = 0
log.debug("Metric Updated : %s", update_resp)
update_resp['status'] = False
update_resp['metric_uuid'] = None
log.error("Metric name is not supported")
-
- return update_resp
-
+
+ return update_resp
+
except Exception as e:
log.error("Error in Update Metrics" + str(e))
-#-----------------------------------------------------------------------------------------------------------------------------
- def deleteMetrics(self,cloudwatch_conn,del_info):
-
- ''' " Not supported in AWS"
- Returning the required parameters with status = False'''
+
+ def deleteMetrics(self, cloudwatch_conn, del_info):
+
+ """ " Not supported in AWS"
+ Returning the required parameters with status = False"""
try:
- supported=self.check_metric(del_info['metric_name'])
+ supported = self.check_metric(del_info['metric_name'])
metric_resp = dict()
del_resp = dict()
- if supported['status'] == True:
+ if supported['status']:
del_resp['schema_version'] = del_info['schema_version']
del_resp['schema_type'] = "delete_metric_response"
del_resp['metric_name'] = del_info['metric_name']
del_resp['tenant_uuid'] = del_info['tenant_uuid']
del_resp['correlation_id'] = del_info['correlation_uuid']
del_resp['status'] = False
- log.info("Metric Deletion Not supported in AWS : %s",del_resp)
+ log.info("Metric Deletion Not supported in AWS : %s", del_resp)
return del_resp
else:
log.error("Metric name is not supported")
return False
except Exception as e:
- log.error(" Metric Deletion Not supported in AWS : " + str(e))
-#------------------------------------------------------------------------------------------------------------------------------------
-
- def listMetrics(self,cloudwatch_conn ,list_info):
+ log.error(" Metric Deletion Not supported in AWS : " + str(e))
+
+ def listMetrics(self, cloudwatch_conn, list_info):
- '''Returns the list of available AWS/EC2 metrics on which
- alarms have been configured and the metrics are being monitored'''
+ """Returns the list of available AWS/EC2 metrics on which
+ alarms have been configured and the metrics are being monitored"""
try:
supported = self.check_metric(list_info['metric_name'])
- if supported['status'] == True:
+ if supported['status']:
metrics_list = []
- metrics_data = dict()
+ metrics_data = dict()
- #To get the list of associated metrics with the alarms
+ # To get the list of associated metrics with the alarms
alarms = cloudwatch_conn.describe_alarms()
itr = 0
if list_info['metric_name'] == "":
for alarm in alarms:
metrics_info = dict()
- instance_id = str(alarm.dimensions['InstanceId']).split("'")[1]
- metrics_info['metric_name'] = str(alarm.metric)
- metrics_info['metric_uuid'] = 0
- metrics_info['metric_unit'] = str(alarm.unit)
- metrics_info['resource_uuid'] = instance_id
- metrics_list.insert(itr,metrics_info)
+ instance_id = str(alarm.dimensions['InstanceId']).split("'")[1]
+ metrics_info['metric_name'] = str(alarm.metric)
+ metrics_info['metric_uuid'] = 0
+ metrics_info['metric_unit'] = str(alarm.unit)
+ metrics_info['resource_uuid'] = instance_id
+ metrics_list.insert(itr, metrics_info)
itr += 1
log.info(metrics_list)
return metrics_list
- else:
+ else:
for alarm in alarms:
metrics_info = dict()
if alarm.metric == supported['metric_name']:
- instance_id = str(alarm.dimensions['InstanceId']).split("'")[1]
+ instance_id = str(alarm.dimensions['InstanceId']).split("'")[1]
metrics_info['metric_name'] = str(alarm.metric)
- metrics_info['metric_uuid'] = 0
- metrics_info['metric_unit'] = str(alarm.unit)
+ metrics_info['metric_uuid'] = 0
+ metrics_info['metric_unit'] = str(alarm.unit)
metrics_info['resource_uuid'] = instance_id
- metrics_list.insert(itr,metrics_info)
+ metrics_list.insert(itr, metrics_info)
itr += 1
- return metrics_list
- log.debug("Metrics List : %s",metrics_list)
+ return metrics_list
else:
log.error("Metric name is not supported")
return False
except Exception as e:
log.error("Error in Getting Metric List " + str(e))
-#------------------------------------------------------------------------------------------------------------------------------------
+ def check_metric(self, metric_name):
- def check_metric(self,metric_name):
-
- ''' Checking whether the metric is supported by AWS '''
+ """ Checking whether the metric is supported by AWS """
try:
check_resp = dict()
# metric_name
metric_status = False
log.info("Metric Not Supported by AWS plugin ")
check_resp['metric_name'] = metric_name
- #status
- if metric_status == True:
+ # status
+ if metric_status:
check_resp['status'] = True
else:
check_resp['status'] = False
return check_resp
- except Exception as e:
- log.error("Error in Plugin Inputs %s",str(e))
-#--------------------------------------------------------------------------------------------------------------------------------------
-
-
-
-
-
-
-
-
+ except Exception as e:
+ log.error("Error in Plugin Inputs %s", str(e))