def do_post_alarm_definitions(self, req, res): helpers.validate_authorization(req, self._default_authorized_roles) alarm_definition = read_json_msg_body(req) self._validate_alarm_definition(alarm_definition) tenant_id = helpers.get_tenant_id(req) name = get_query_alarm_definition_name(alarm_definition) expression = get_query_alarm_definition_expression(alarm_definition) description = get_query_alarm_definition_description(alarm_definition) severity = get_query_alarm_definition_severity(alarm_definition) match_by = get_query_alarm_definition_match_by(alarm_definition) alarm_actions = get_query_alarm_definition_alarm_actions( alarm_definition) undetermined_actions = get_query_alarm_definition_undetermined_actions( alarm_definition) ok_actions = get_query_ok_actions(alarm_definition) result = self._alarm_definition_create(tenant_id, name, expression, description, severity, match_by, alarm_actions, undetermined_actions, ok_actions) helpers.add_links_to_resource(result, req.uri) res.body = helpers.dumpit_utf8(result) res.status = falcon.HTTP_201
def do_post_stream_definitions(self, req, res): helpers.validate_authorization(req, self._default_authorized_roles) stream_definition = helpers.read_json_msg_body(req) self._validate_stream_definition(stream_definition) tenant_id = helpers.get_tenant_id(req) name = get_query_stream_definition_name(stream_definition) description = get_query_stream_definition_description( stream_definition) select = stream_definition['select'] group_by = stream_definition['group_by'] fire_criteria = stream_definition['fire_criteria'] expiration = stream_definition['expiration'] fire_actions = get_query_stream_definition_fire_actions( stream_definition) expire_actions = get_query_stream_definition_expire_actions( stream_definition) result = self._stream_definition_create(tenant_id, name, description, select, group_by, fire_criteria, expiration, fire_actions, expire_actions) helpers.add_links_to_resource(result, req.uri) res.body = helpers.dumpit_utf8(result) res.status = falcon.HTTP_201
def do_post_alarm_definitions(self, req, res): helpers.validate_authorization(req, self._default_authorized_roles) alarm_definition = helpers.read_json_msg_body(req) self._validate_alarm_definition(alarm_definition) tenant_id = helpers.get_tenant_id(req) name = get_query_alarm_definition_name(alarm_definition) expression = get_query_alarm_definition_expression(alarm_definition) description = get_query_alarm_definition_description(alarm_definition) severity = get_query_alarm_definition_severity(alarm_definition) match_by = get_query_alarm_definition_match_by(alarm_definition) alarm_actions = get_query_alarm_definition_alarm_actions( alarm_definition) undetermined_actions = get_query_alarm_definition_undetermined_actions( alarm_definition) ok_actions = get_query_ok_actions(alarm_definition) result = self._alarm_definition_create(tenant_id, name, expression, description, severity, match_by, alarm_actions, undetermined_actions, ok_actions) helpers.add_links_to_resource(result, req.uri) res.body = helpers.dumpit_utf8(result) res.status = falcon.HTTP_201
def _alarm_list(self, req_uri, tenant_id, query_parms, offset): alarm_rows = self._alarms_repo.get_alarms(tenant_id, query_parms, offset) result = [] if not alarm_rows: return result # Forward declaration alarm = {} prev_alarm_id = None for alarm_row in alarm_rows: if prev_alarm_id != alarm_row['alarm_id']: if prev_alarm_id is not None: result.append(alarm) ad = { u'id': alarm_row['alarm_definition_id'], u'name': alarm_row['alarm_definition_name'], u'severity': alarm_row['severity'], } helpers.add_links_to_resource(ad, re.sub('alarms', 'alarm-definitions', req_uri), rel=None) metrics = [] alarm = { u'id': alarm_row['alarm_id'], u'metrics': metrics, u'state': alarm_row['state'], u'alarm_definition': ad } helpers.add_links_to_resource(alarm, req_uri) prev_alarm_id = alarm_row['alarm_id'] dimensions = {} metric = { u'name': alarm_row['metric_name'], u'dimensions': dimensions } if alarm_row['metric_dimensions']: for dimension in alarm_row['metric_dimensions'].split(','): parsed_dimension = dimension.split('=') dimensions[parsed_dimension[0]] = parsed_dimension[1] metrics.append(metric) result.append(alarm) return helpers.paginate(result, req_uri, offset)
def do_get_alarm_definition(self, req, res, id): helpers.validate_authorization(req, self._default_authorized_roles) tenant_id = helpers.get_tenant_id(req) result = self._alarm_definition_show(tenant_id, id) helpers.add_links_to_resource(result, re.sub('/' + id, '', req.uri)) res.body = helpers.dumpit_utf8(result) res.status = falcon.HTTP_200
def _build_notification_result(self, notification_row, uri): result = { u'id': notification_row['id'], u'name': notification_row['name'], u'type': notification_row['type'], u'address': notification_row['address'] } helpers.add_links_to_resource(result, uri) return result
def do_put_alarm_definitions(self, req, res, id): helpers.validate_authorization(req, self._default_authorized_roles) alarm_definition = read_json_msg_body(req) self._validate_alarm_definition(alarm_definition) tenant_id = helpers.get_tenant_id(req) # Mandatory positional args name = get_query_alarm_definition_name(alarm_definition) expression = get_query_alarm_definition_expression(alarm_definition) actions_enabled = ( get_query_alarm_definition_actions_enabled(alarm_definition, required=True)) # Validator makes actions_enabled optional. So, check it here. if not actions_enabled: raise falcon.HTTPBadRequest('Bad request', 'Missing ' 'actions_enabled') # Optional args description = get_query_alarm_definition_description(alarm_definition, return_none=True) alarm_actions = get_query_alarm_definition_alarm_actions( alarm_definition, return_none=True) ok_actions = get_query_ok_actions(alarm_definition, return_none=True) undetermined_actions = get_query_alarm_definition_undetermined_actions( alarm_definition, return_none=True) match_by = get_query_alarm_definition_match_by(alarm_definition, return_none=True) severity = get_query_alarm_definition_severity(alarm_definition, return_none=True) result = self._alarm_definition_update_or_patch(tenant_id, id, name, expression, actions_enabled, description, alarm_actions, ok_actions, undetermined_actions, match_by, severity, patch=False) helpers.add_links_to_resource(result, req.uri) res.body = helpers.dumpit_utf8(result) res.status = falcon.HTTP_200
def _alarm_definition_list(self, tenant_id, name, dimensions, req_uri, offset): alarm_definition_rows = ( self._alarm_definitions_repo.get_alarm_definitions( tenant_id, name, dimensions, offset)) result = [] for alarm_definition_row in alarm_definition_rows: match_by = get_comma_separated_str_as_list( alarm_definition_row['match_by']) alarm_actions_list = get_comma_separated_str_as_list( alarm_definition_row['alarm_actions']) ok_actions_list = get_comma_separated_str_as_list( alarm_definition_row['ok_actions']) undetermined_actions_list = get_comma_separated_str_as_list( alarm_definition_row['undetermined_actions']) ad = { u'id': alarm_definition_row['id'].decode('utf8'), u'name': alarm_definition_row['name'].decode("utf8"), u'description': alarm_definition_row['description'].decode('utf8') if alarm_definition_row['description'] else u'', u'expression': alarm_definition_row['expression'].decode('utf8'), u'match_by': match_by, u'severity': alarm_definition_row['severity'].decode('utf8').upper(), u'actions_enabled': alarm_definition_row['actions_enabled'] == 1, u'alarm_actions': alarm_actions_list, u'ok_actions': ok_actions_list, u'undetermined_actions': undetermined_actions_list } helpers.add_links_to_resource(ad, req_uri) result.append(ad) result = helpers.paginate(result, req_uri, offset) return result
def do_put_alarm_definitions(self, req, res, id): helpers.validate_authorization(req, self._default_authorized_roles) alarm_definition = helpers.read_json_msg_body(req) self._validate_alarm_definition(alarm_definition) tenant_id = helpers.get_tenant_id(req) # Mandatory positional args name = get_query_alarm_definition_name(alarm_definition) expression = get_query_alarm_definition_expression(alarm_definition) actions_enabled = (get_query_alarm_definition_actions_enabled( alarm_definition, required=True)) # Validator makes actions_enabled optional. So, check it here. if not actions_enabled: raise falcon.HTTPBadRequest('Bad request', 'Missing ' 'actions_enabled') # Optional args description = get_query_alarm_definition_description(alarm_definition, return_none=True) alarm_actions = get_query_alarm_definition_alarm_actions( alarm_definition, return_none=True) ok_actions = get_query_ok_actions(alarm_definition, return_none=True) undetermined_actions = get_query_alarm_definition_undetermined_actions( alarm_definition, return_none=True) match_by = get_query_alarm_definition_match_by(alarm_definition, return_none=True) severity = get_query_alarm_definition_severity(alarm_definition, return_none=True) result = self._alarm_definition_update_or_patch(tenant_id, id, name, expression, actions_enabled, description, alarm_actions, ok_actions, undetermined_actions, match_by, severity, patch=False) helpers.add_links_to_resource(result, req.uri) res.body = helpers.dumpit_utf8(result) res.status = falcon.HTTP_200
def _alarm_list(self, req_uri, tenant_id, query_parms, offset): alarm_rows = self._alarms_repo.get_alarms(tenant_id, query_parms, offset) result = [] if not alarm_rows: return result # Forward declaration alarm = {} prev_alarm_id = None for alarm_row in alarm_rows: if prev_alarm_id != alarm_row['alarm_id']: if prev_alarm_id is not None: result.append(alarm) ad = {u'id': alarm_row['alarm_definition_id'], u'name': alarm_row['alarm_definition_name'], u'severity': alarm_row['severity'], } helpers.add_links_to_resource(ad, re.sub('alarms', 'alarm-definitions', req_uri), rel=None) metrics = [] alarm = {u'id': alarm_row['alarm_id'], u'metrics': metrics, u'state': alarm_row['state'], u'alarm_definition': ad} helpers.add_links_to_resource(alarm, req_uri) prev_alarm_id = alarm_row['alarm_id'] dimensions = {} metric = {u'name': alarm_row['metric_name'], u'dimensions': dimensions} if alarm_row['metric_dimensions']: for dimension in alarm_row['metric_dimensions'].split(','): parsed_dimension = dimension.split('=') dimensions[parsed_dimension[0]] = parsed_dimension[1] metrics.append(metric) result.append(alarm) return helpers.paginate(result, req_uri, offset)
def _stream_definition_list(self, tenant_id, name, req_uri, offset, limit): stream_definition_rows = ( self._stream_definitions_repo.get_stream_definitions( tenant_id, name, offset, limit)) result = [] for stream_definition_row in stream_definition_rows: sd = self._build_stream_definition_show_result( stream_definition_row) helpers.add_links_to_resource(sd, req_uri) result.append(sd) result = helpers.paginate(result, req_uri, offset) return result
def _create_notification_response(self, id, notification, uri): name = notification['name'] notification_type = notification['type'].upper() address = notification['address'] response = {'id': id, 'name': name, 'type': notification_type, 'address': address} return json.dumps(helpers.add_links_to_resource(response, uri), ensure_ascii=False).encode('utf8')
def do_patch_alarm_definitions(self, req, res, id): helpers.validate_authorization(req, self._default_authorized_roles) alarm_definition = read_json_msg_body(req) tenant_id = helpers.get_tenant_id(req) # Optional args name = get_query_alarm_definition_name(alarm_definition, return_none=True) expression = get_query_alarm_definition_expression(alarm_definition, return_none=True) actions_enabled = ( get_query_alarm_definition_actions_enabled(alarm_definition, return_none=True)) description = get_query_alarm_definition_description(alarm_definition, return_none=True) alarm_actions = get_query_alarm_definition_alarm_actions( alarm_definition, return_none=True) ok_actions = get_query_ok_actions(alarm_definition, return_none=True) undetermined_actions = get_query_alarm_definition_undetermined_actions( alarm_definition, return_none=True) match_by = get_query_alarm_definition_match_by(alarm_definition, return_none=True) severity = get_query_alarm_definition_severity(alarm_definition, return_none=True) result = self._alarm_definition_update_or_patch(tenant_id, id, name, expression, actions_enabled, description, alarm_actions, ok_actions, undetermined_actions, match_by, severity, patch=True) helpers.add_links_to_resource(result, req.uri) res.body = helpers.dumpit_utf8(result) res.status = falcon.HTTP_200
def do_patch_alarm_definitions(self, req, res, id): helpers.validate_authorization(req, self._default_authorized_roles) alarm_definition = helpers.read_json_msg_body(req) tenant_id = helpers.get_tenant_id(req) # Optional args name = get_query_alarm_definition_name(alarm_definition, return_none=True) expression = get_query_alarm_definition_expression(alarm_definition, return_none=True) actions_enabled = (get_query_alarm_definition_actions_enabled( alarm_definition, return_none=True)) description = get_query_alarm_definition_description(alarm_definition, return_none=True) alarm_actions = get_query_alarm_definition_alarm_actions( alarm_definition, return_none=True) ok_actions = get_query_ok_actions(alarm_definition, return_none=True) undetermined_actions = get_query_alarm_definition_undetermined_actions( alarm_definition, return_none=True) match_by = get_query_alarm_definition_match_by(alarm_definition, return_none=True) severity = get_query_alarm_definition_severity(alarm_definition, return_none=True) result = self._alarm_definition_update_or_patch(tenant_id, id, name, expression, actions_enabled, description, alarm_actions, ok_actions, undetermined_actions, match_by, severity, patch=True) helpers.add_links_to_resource(result, req.uri) res.body = helpers.dumpit_utf8(result) res.status = falcon.HTTP_200
def _alarm_show(self, req_uri, tenant_id, id): alarm_rows = self._alarms_repo.get_alarm(tenant_id, id) first_row = True for alarm_row in alarm_rows: if first_row: ad = { u'id': alarm_row['alarm_definition_id'], u'name': alarm_row['alarm_definition_name'], u'severity': alarm_row['severity'], } helpers.add_links_to_resource(ad, re.sub('alarms', 'alarm-definitions', req_uri), rel=None) metrics = [] alarm = { u'id': alarm_row['alarm_id'], u'metrics': metrics, u'state': alarm_row['state'], u'alarm_definition': ad } helpers.add_links_to_resource(alarm, req_uri) first_row = False dimensions = {} metric = { u'name': alarm_row['metric_name'], u'dimensions': dimensions } if alarm_row['metric_dimensions']: for dimension in alarm_row['metric_dimensions'].split(','): parsed_dimension = dimension.split('=') dimensions[parsed_dimension[0]] = parsed_dimension[1] metrics.append(metric) return alarm
def _alarm_definition_list(self, tenant_id, name, dimensions, req_uri, offset): alarm_definition_rows = ( self._alarm_definitions_repo.get_alarm_definitions(tenant_id, name, dimensions, offset)) result = [] for alarm_definition_row in alarm_definition_rows: match_by = get_comma_separated_str_as_list( alarm_definition_row['match_by']) alarm_actions_list = get_comma_separated_str_as_list( alarm_definition_row['alarm_actions']) ok_actions_list = get_comma_separated_str_as_list( alarm_definition_row['ok_actions']) undetermined_actions_list = get_comma_separated_str_as_list( alarm_definition_row['undetermined_actions']) ad = {u'id': alarm_definition_row['id'].decode('utf8'), u'name': alarm_definition_row['name'].decode("utf8"), u'description': alarm_definition_row['description'].decode( 'utf8') if alarm_definition_row['description'] else u'', u'expression': alarm_definition_row['expression'].decode( 'utf8'), u'match_by': match_by, u'severity': alarm_definition_row['severity'].decode( 'utf8'), u'actions_enabled': alarm_definition_row['actions_enabled'] == 1, u'alarm_actions': alarm_actions_list, u'ok_actions': ok_actions_list, u'undetermined_actions': undetermined_actions_list} helpers.add_links_to_resource(ad, req_uri) result.append(ad) result = helpers.paginate(result, req_uri, offset) return result
def _create_notification_response(self, id, name, type, address, uri): response = { 'id': id, 'name': name, 'type': type, 'address': address } return helpers.add_links_to_resource(response, uri)
def _alarm_definition_list(self, tenant_id, name, dimensions, req_uri): alarm_definition_rows = ( self._alarm_definitions_repo.get_alarm_definitions(tenant_id, name, dimensions)) result = [] for alarm_definition_row in alarm_definition_rows: match_by = get_comma_separated_str_as_list( alarm_definition_row.match_by) alarm_actions_list = get_comma_separated_str_as_list( alarm_definition_row.alarm_actions) ok_actions_list = get_comma_separated_str_as_list( alarm_definition_row.ok_actions) undetermined_actions_list = get_comma_separated_str_as_list( alarm_definition_row.undetermined_actions) ad = {u'id': alarm_definition_row.id.decode('utf8'), u'name': alarm_definition_row.name.decode("utf8"), u'description': alarm_definition_row.description.decode( 'utf8'), u'expression': alarm_definition_row.expression.decode( 'utf8'), u'match_by': match_by, u'severity': alarm_definition_row.severity.decode( 'utf8'), u'actions_enabled': alarm_definition_row.actions_enabled == 1, u'alarm_actions': alarm_actions_list, u'ok_actions': ok_actions_list, u'undetermined_actions': undetermined_actions_list} helpers.add_links_to_resource(ad, req_uri) result.append(ad) return result
def _alarm_show(self, req_uri, tenant_id, id): alarm_rows = self._alarms_repo.get_alarm(tenant_id, id) first_row = True for alarm_row in alarm_rows: if first_row: ad = {u'id': alarm_row['alarm_definition_id'], u'name': alarm_row['alarm_definition_name'], u'severity': alarm_row['severity'], } helpers.add_links_to_resource(ad, re.sub('alarms', 'alarm-definitions', req_uri), rel=None) metrics = [] alarm = {u'id': alarm_row['alarm_id'], u'metrics': metrics, u'state': alarm_row['state'], u'alarm_definition': ad} helpers.add_links_to_resource(alarm, req_uri) first_row = False dimensions = {} metric = {u'name': alarm_row['metric_name'], u'dimensions': dimensions} if alarm_row['metric_dimensions']: for dimension in alarm_row['metric_dimensions'].split(','): parsed_dimension = dimension.split('=') dimensions[parsed_dimension[0]] = parsed_dimension[1] metrics.append(metric) return alarm
def _list_notification(self, tenant_id, notification_id, uri): """Lists the notification by id. :param tenant_id: The tenant id. :param notification_id: The notification id :raises: falcon.HTTPServiceUnavailable,falcon.HTTPError (404): """ try: notifications = self._notifications_repo.list_notification( tenant_id, notification_id) return json.dumps( helpers.add_links_to_resource(notifications, uri)) except repository_exceptions.DoesNotExistException: helpers.raise_not_found_exception('notification', notification_id, tenant_id) except repository_exceptions.RepositoryException as ex: LOG.error(ex) raise falcon.HTTPInternalServerError('Service unavailable', ex.message)
def _create_notification_response(self, id, name, type, address, uri): response = {'id': id, 'name': name, 'type': type, 'address': address} return helpers.add_links_to_resource(response, uri)