def on_get(self, req, res, notification_method_id=None): if notification_method_id is None: helpers.validate_authorization(req, self._get_notifications_authorized_roles) sort_by = helpers.get_query_param(req, 'sort_by', default_val=None) if sort_by is not None: if isinstance(sort_by, six.string_types): sort_by = sort_by.split(',') allowed_sort_by = {'id', 'name', 'type', 'address', 'updated_at', 'created_at'} validation.validate_sort_by(sort_by, allowed_sort_by) offset = helpers.get_query_param(req, 'offset') if offset is not None and not isinstance(offset, int): try: offset = int(offset) except Exception: raise HTTPUnprocessableEntityError('Unprocessable Entity', 'Offset value {} must be an integer' .format(offset)) result = self._list_notifications(req.project_id, req.uri, sort_by, offset, req.limit) res.body = helpers.to_json(result) res.status = falcon.HTTP_200 else: helpers.validate_authorization(req, self._get_notifications_authorized_roles) result = self._list_notification(req.project_id, notification_method_id, req.uri) res.body = helpers.to_json(result) res.status = falcon.HTTP_200
def on_get(self, req, res, version_id=None): result = { 'links': [{ 'rel': 'self', 'href': req.uri.decode('utf8') }], 'elements': [] } if version_id is None: for version in VERSIONS: VERSIONS[version]['links'][0]['href'] = ( req.uri.decode('utf8') + version) result['elements'].append(VERSIONS[version]) res.body = helpers.to_json(result) res.status = falcon.HTTP_200 else: if version_id in VERSIONS: VERSIONS[version_id]['links'][0]['href'] = ( req.uri.decode('utf8')) res.body = helpers.to_json(VERSIONS[version_id]) res.status = falcon.HTTP_200 else: raise HTTPUnprocessableEntityError( 'Invalid version', 'No versions found matching ' + version_id)
def on_get(self, req, res, alarm_id=None): if alarm_id is None: helpers.validate_authorization(req, self._get_alarms_authorized_roles) start_timestamp = helpers.get_query_starttime_timestamp(req, False) end_timestamp = helpers.get_query_endtime_timestamp(req, False) offset = helpers.get_query_param(req, 'offset') dimensions = helpers.get_query_dimensions(req) helpers.validate_query_dimensions(dimensions) result = self._alarm_history_list(req.project_id, start_timestamp, end_timestamp, dimensions, req.uri, offset, req.limit) res.body = helpers.to_json(result) res.status = falcon.HTTP_200 else: helpers.validate_authorization(req, self._get_alarms_authorized_roles) offset = helpers.get_query_param(req, 'offset') result = self._alarm_history(req.project_id, alarm_id, req.uri, offset, req.limit) res.body = helpers.to_json(result) res.status = falcon.HTTP_200
def on_get(self, req, res, notification_method_id=None): if notification_method_id is None: helpers.validate_authorization( req, self._get_notifications_authorized_roles) sort_by = helpers.get_query_param(req, 'sort_by', default_val=None) if sort_by is not None: if isinstance(sort_by, six.string_types): sort_by = sort_by.split(',') allowed_sort_by = { 'id', 'name', 'type', 'address', 'updated_at', 'created_at' } validation.validate_sort_by(sort_by, allowed_sort_by) offset = helpers.get_query_param(req, 'offset') if offset is not None and not isinstance(offset, int): try: offset = int(offset) except Exception: raise HTTPUnprocessableEntityError( 'Unprocessable Entity', 'Offset value {} must be an integer'.format(offset)) result = self._list_notifications(req.project_id, req.uri, sort_by, offset, req.limit) res.body = helpers.to_json(result) res.status = falcon.HTTP_200 else: helpers.validate_authorization( req, self._get_notifications_authorized_roles) result = self._list_notification(req.project_id, notification_method_id, req.uri) res.body = helpers.to_json(result) res.status = falcon.HTTP_200
def on_get(self, req, res, version_id=None): req_uri = req.uri.decode('utf8') if six.PY2 else req.uri helpers.validate_authorization(req, ['api:versions']) result = { 'links': [{ 'rel': 'self', 'href': req_uri }], 'elements': [] } if version_id is None: for version in VERSIONS: VERSIONS[version]['links'][0]['href'] = ( req_uri + version) result['elements'].append(VERSIONS[version]) res.body = helpers.to_json(result) res.status = falcon.HTTP_200 else: if version_id in VERSIONS: VERSIONS[version_id]['links'][0]['href'] = req_uri res.body = helpers.to_json(VERSIONS[version_id]) res.status = falcon.HTTP_200 else: raise HTTPUnprocessableEntityError('Invalid version', 'No versions found matching ' + version_id)
def on_get(self, req, res, alarm_id=None): helpers.validate_authorization(req, ['api:alarms:get']) if alarm_id is None: query_parms = falcon.uri.parse_query_string(req.query_string) if 'state' in query_parms: validation.validate_alarm_state(query_parms['state']) query_parms['state'] = query_parms['state'].upper() if 'severity' in query_parms: validation.validate_severity_query(query_parms['severity']) query_parms['severity'] = query_parms['severity'].upper() if 'sort_by' in query_parms: if isinstance(query_parms['sort_by'], six.string_types): query_parms['sort_by'] = query_parms['sort_by'].split(',') allowed_sort_by = { 'alarm_id', 'alarm_definition_id', 'alarm_definition_name', 'state', 'severity', 'lifecycle_state', 'link', 'state_updated_timestamp', 'updated_timestamp', 'created_timestamp' } validation.validate_sort_by(query_parms['sort_by'], allowed_sort_by) query_parms['metric_dimensions'] = helpers.get_query_dimensions( req, 'metric_dimensions') helpers.validate_query_dimensions(query_parms['metric_dimensions']) offset = helpers.get_query_param(req, 'offset') if offset is not None and not isinstance(offset, int): try: offset = int(offset) except Exception as ex: LOG.exception(ex) raise HTTPUnprocessableEntityError( "Unprocessable Entity", "Offset value {} must be an integer".format(offset)) result = self._alarm_list(req.uri, req.project_id, query_parms, offset, req.limit) res.body = helpers.to_json(result) res.status = falcon.HTTP_200 else: result = self._alarm_show(req.uri, req.project_id, alarm_id) res.body = helpers.to_json(result) res.status = falcon.HTTP_200
def on_get(self, req, res, alarm_definition_id=None): if alarm_definition_id is None: helpers.validate_authorization( req, self._get_alarmdefs_authorized_roles) name = helpers.get_query_name(req) dimensions = helpers.get_query_dimensions(req) severity = helpers.get_query_param(req, "severity", default_val=None) if severity is not None: validation.validate_severity_query(severity) severity = severity.upper() sort_by = helpers.get_query_param(req, 'sort_by', default_val=None) if sort_by is not None: if isinstance(sort_by, basestring): sort_by = sort_by.split(',') allowed_sort_by = { 'id', 'name', 'severity', 'updated_at', 'created_at' } validation.validate_sort_by(sort_by, allowed_sort_by) offset = helpers.get_query_param(req, 'offset') if offset is not None and not isinstance(offset, int): try: offset = int(offset) except Exception: raise HTTPUnprocessableEntityError( 'Unprocessable Entity', 'Offset value {} must be an integer'.format(offset)) result = self._alarm_definition_list(req.project_id, name, dimensions, severity, req.uri, sort_by, offset, req.limit) res.body = helpers.to_json(result) res.status = falcon.HTTP_200 else: helpers.validate_authorization( req, self._get_alarmdefs_authorized_roles) result = self._alarm_definition_show(req.project_id, alarm_definition_id) helpers.add_links_to_resource( result, re.sub('/' + alarm_definition_id, '', req.uri)) res.body = helpers.to_json(result) res.status = falcon.HTTP_200
def on_get(self, req, res, alarm_id=None): helpers.validate_authorization(req, ['api:alarms:get']) if alarm_id is None: query_parms = falcon.uri.parse_query_string(req.query_string) if 'state' in query_parms: validation.validate_alarm_state(query_parms['state']) query_parms['state'] = query_parms['state'].upper() if 'severity' in query_parms: validation.validate_severity_query(query_parms['severity']) query_parms['severity'] = query_parms['severity'].upper() if 'sort_by' in query_parms: if isinstance(query_parms['sort_by'], six.string_types): query_parms['sort_by'] = query_parms['sort_by'].split(',') allowed_sort_by = { 'alarm_id', 'alarm_definition_id', 'alarm_definition_name', 'state', 'severity', 'lifecycle_state', 'link', 'state_updated_timestamp', 'updated_timestamp', 'created_timestamp'} validation.validate_sort_by(query_parms['sort_by'], allowed_sort_by) query_parms['metric_dimensions'] = helpers.get_query_dimensions( req, 'metric_dimensions') helpers.validate_query_dimensions(query_parms['metric_dimensions']) offset = helpers.get_query_param(req, 'offset') if offset is not None and not isinstance(offset, int): try: offset = int(offset) except Exception as ex: LOG.exception(ex) raise HTTPUnprocessableEntityError( "Unprocessable Entity", "Offset value {} must be an integer".format(offset)) result = self._alarm_list(req.uri, req.project_id, query_parms, offset, req.limit) res.body = helpers.to_json(result) res.status = falcon.HTTP_200 else: result = self._alarm_show(req.uri, req.project_id, alarm_id) res.body = helpers.to_json(result) res.status = falcon.HTTP_200
def on_get(self, req, res): helpers.validate_authorization(req, self._get_metrics_authorized_roles) tenant_id = ( helpers.get_x_tenant_or_tenant_id(req, self._delegate_authorized_roles)) name = helpers.get_query_name(req, True) helpers.validate_query_name(name) dimensions = helpers.get_query_dimensions(req) helpers.validate_query_dimensions(dimensions) start_timestamp = helpers.get_query_starttime_timestamp(req) end_timestamp = helpers.get_query_endtime_timestamp(req, False) helpers.validate_start_end_timestamps(start_timestamp, end_timestamp) statistics = helpers.get_query_statistics(req) period = helpers.get_query_period(req) offset = helpers.get_query_param(req, 'offset') merge_metrics_flag = get_merge_metrics_flag(req) group_by = helpers.get_query_group_by(req) result = self._metric_statistics(tenant_id, name, dimensions, start_timestamp, end_timestamp, statistics, period, req.uri, offset, req.limit, merge_metrics_flag, group_by) res.body = helpers.to_json(result) res.status = falcon.HTTP_200
def on_post(self, req, res): helpers.validate_authorization(req, self._default_authorized_roles) alarm_definition = helpers.from_json(req) self._validate_alarm_definition(alarm_definition) 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( req.project_id, name, expression, description, severity, match_by, alarm_actions, undetermined_actions, ok_actions) helpers.add_links_to_resource(result, req.uri) res.body = helpers.to_json(result) res.status = falcon.HTTP_201
def on_put(self, req, res, alarm_id): helpers.validate_authorization(req, ['api:alarms:put']) alarm = helpers.from_json(req) schema_alarm.validate(alarm) # Validator makes state optional, so check it here if 'state' not in alarm or not alarm['state']: raise HTTPUnprocessableEntityError('Unprocessable Entity', "Field 'state' is required") if 'lifecycle_state' not in alarm or not alarm['lifecycle_state']: raise HTTPUnprocessableEntityError('Unprocessable Entity', "Field 'lifecycle_state' is required") if 'link' not in alarm or not alarm['link']: raise HTTPUnprocessableEntityError('Unprocessable Entity', "Field 'link' is required") self._alarm_update(req.project_id, alarm_id, alarm['state'], alarm['lifecycle_state'], alarm['link']) result = self._alarm_show(req.uri, req.project_id, alarm_id) res.body = helpers.to_json(result) res.status = falcon.HTTP_200
def on_get(self, req, res): helpers.validate_authorization(req, ['api:alarms:count']) query_parms = falcon.uri.parse_query_string(req.query_string) if 'state' in query_parms: validation.validate_alarm_state(query_parms['state']) query_parms['state'] = query_parms['state'].upper() if 'severity' in query_parms: validation.validate_severity_query(query_parms['severity']) query_parms['severity'] = query_parms['severity'].upper() if 'group_by' in query_parms: if not isinstance(query_parms['group_by'], list): query_parms['group_by'] = query_parms['group_by'].split(',') self._validate_group_by(query_parms['group_by']) query_parms['metric_dimensions'] = helpers.get_query_dimensions(req, 'metric_dimensions') helpers.validate_query_dimensions(query_parms['metric_dimensions']) offset = helpers.get_query_param(req, 'offset') if offset is not None: try: offset = int(offset) except Exception: raise HTTPUnprocessableEntityError( "Unprocessable Entity", "Offset must be a valid integer, was {}".format(offset)) result = self._alarms_count(req.uri, req.project_id, query_parms, offset, req.limit) res.body = helpers.to_json(result) res.status = falcon.HTTP_200
def on_post(self, req, res): helpers.validate_authorization(req, ['api:alarms:definition:post']) alarm_definition = helpers.from_json(req) self._validate_alarm_definition(alarm_definition) 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(req.project_id, name, expression, description, severity, match_by, alarm_actions, undetermined_actions, ok_actions) helpers.add_links_to_resource(result, req.uri) res.body = helpers.to_json(result) res.status = falcon.HTTP_201
def on_put(self, req, res, alarm_id): helpers.validate_authorization(req, ['api:alarms:put']) alarm = helpers.from_json(req) schema_alarm.validate(alarm) # Validator makes state optional, so check it here if 'state' not in alarm or not alarm['state']: raise HTTPUnprocessableEntityError('Unprocessable Entity', "Field 'state' is required") if 'lifecycle_state' not in alarm or not alarm['lifecycle_state']: raise HTTPUnprocessableEntityError( 'Unprocessable Entity', "Field 'lifecycle_state' is required") if 'link' not in alarm or not alarm['link']: raise HTTPUnprocessableEntityError('Unprocessable Entity', "Field 'link' is required") self._alarm_update(req.project_id, alarm_id, alarm['state'], alarm['lifecycle_state'], alarm['link']) result = self._alarm_show(req.uri, req.project_id, alarm_id) res.body = helpers.to_json(result) res.status = falcon.HTTP_200
def send_event(self, message_queue, event_msg): try: message_queue.send_message(helpers.to_json(event_msg)) except message_queue_exceptions.MessageQueueException as ex: LOG.exception(ex) raise falcon.HTTPInternalServerError( 'Message queue service unavailable'.encode('utf8'), str(ex).encode('utf8'))
def on_post(self, req, res): helpers.validate_json_content_type(req) helpers.validate_authorization(req, self._default_authorized_roles) notification = helpers.from_json(req) self._parse_and_validate_notification(notification) result = self._create_notification(req.project_id, notification, req.uri) res.body = helpers.to_json(result) res.status = falcon.HTTP_201
def on_get(self, req, res): # This is to provide consistency. Pagination is not really supported here as there # are not that many rows result = self._list_notifications(req.uri, req.limit) res.body = helpers.to_json(result) res.status = falcon.HTTP_200
def on_get(self, req, res): helpers.validate_authorization(req, ['api:notifications:type']) # This is to provide consistency. Pagination is not really supported here as there # are not that many rows result = self._list_notifications(req.uri, req.limit) res.body = helpers.to_json(result) res.status = falcon.HTTP_200
def on_get(self, req, res): helpers.validate_authorization(req, ['api:metrics:dimension:names']) tenant_id = helpers.get_x_tenant_or_tenant_id(req, ['api:delegate']) metric_name = helpers.get_query_param(req, 'metric_name') offset = helpers.get_query_param(req, 'offset') result = self._dimension_names(tenant_id, req.uri, metric_name, offset, req.limit) res.body = helpers.to_json(result) res.status = falcon.HTTP_200
def on_put(self, req, res, notification_method_id): helpers.validate_json_content_type(req) helpers.validate_authorization(req, self._default_authorized_roles) notification = helpers.from_json(req) self._parse_and_validate_notification(notification, require_all=True) result = self._update_notification(notification_method_id, req.project_id, notification, req.uri) res.body = helpers.to_json(result) res.status = falcon.HTTP_200
def on_patch(self, req, res, notification_method_id): helpers.validate_json_content_type(req) helpers.validate_authorization(req, ['api:notifications:patch']) notification = helpers.from_json(req) self._patch_get_notification(req.project_id, notification_method_id, notification) self._parse_and_validate_notification(notification, require_all=True) result = self._update_notification(notification_method_id, req.project_id, notification, req.uri) res.body = helpers.to_json(result) res.status = falcon.HTTP_200
def on_get(self, req, res): helpers.validate_authorization(req, ['api:metrics:get']) tenant_id = helpers.get_x_tenant_or_tenant_id(req, ['api:delegate']) dimensions = helpers.get_query_dimensions(req) helpers.validate_query_dimensions(dimensions) offset = helpers.get_query_param(req, 'offset') result = self._list_metric_names(tenant_id, dimensions, req.uri, offset, req.limit) res.body = helpers.to_json(result) res.status = falcon.HTTP_200
def on_get(self, req, res): result = { 'id': 'v2.0', 'links': [{ 'rel': 'self', 'href': req.uri.decode('utf-8') }], 'status': 'CURRENT', 'updated': "2013-03-06T00:00:00.000Z" } res.body = helpers.to_json(result)
def on_get(self, req, res): helpers.validate_authorization(req, self._get_metrics_authorized_roles) tenant_id = ( helpers.get_x_tenant_or_tenant_id(req, self._delegate_authorized_roles)) metric_name = helpers.get_query_param(req, 'metric_name') offset = helpers.get_query_param(req, 'offset') result = self._dimension_names(tenant_id, req.uri, metric_name, offset, req.limit) res.body = helpers.to_json(result) res.status = falcon.HTTP_200
def on_get(self, req, res): helpers.validate_authorization(req, ['api:versions']) result = { 'id': 'v2.0', 'links': [{ 'rel': 'self', 'href': encodeutils.safe_decode(req.uri, 'utf-8') }], 'status': 'CURRENT', 'updated': "2013-03-06T00:00:00.000Z" } res.body = helpers.to_json(result)
def on_get(self, req, res): helpers.validate_authorization(req, self._get_metrics_authorized_roles) tenant_id = ( helpers.get_x_tenant_or_tenant_id(req, self._delegate_authorized_roles)) metric_name = helpers.get_query_param(req, 'metric_name') dimension_name = helpers.get_query_param(req, 'dimension_name', required=True) offset = helpers.get_query_param(req, 'offset') result = self._dimension_values(tenant_id, req.uri, metric_name, dimension_name, offset, req.limit) res.body = helpers.to_json(result) res.status = falcon.HTTP_200
def on_get(self, req, res): helpers.validate_authorization(req, ['api:metrics:dimension:values']) tenant_id = helpers.get_x_tenant_or_tenant_id(req, ['api:delegate']) metric_name = helpers.get_query_param(req, 'metric_name') dimension_name = helpers.get_query_param(req, 'dimension_name', required=True) offset = helpers.get_query_param(req, 'offset') start_timestamp = helpers.get_query_starttime_timestamp(req, False) end_timestamp = helpers.get_query_endtime_timestamp(req, False) result = self._dimension_values(tenant_id, req.uri, metric_name, dimension_name, offset, req.limit, start_timestamp, end_timestamp) res.body = helpers.to_json(result) res.status = falcon.HTTP_200
def on_get(self, req, res): kafka_result = self._kafka_check.health_check() alarms_db_result = self._alarm_db_check.health_check() metrics_db_result = self._metrics_db_check.health_check() status_data = { 'kafka': kafka_result.message, 'alarms_database': alarms_db_result.message, 'metrics_database': metrics_db_result.message } health = (kafka_result.healthy and alarms_db_result.healthy and metrics_db_result.healthy) res.status = (self.HEALTHY_CODE_GET if health else self.NOT_HEALTHY_CODE) res.cache_control = self.CACHE_CONTROL res.body = helpers.to_json(status_data)
def on_get(self, req, res): helpers.validate_authorization(req, ['api:metrics:get']) tenant_id = helpers.get_x_tenant_or_tenant_id(req, ['api:delegate']) name = helpers.get_query_name(req) helpers.validate_query_name(name) dimensions = helpers.get_query_dimensions(req) helpers.validate_query_dimensions(dimensions) offset = helpers.get_query_param(req, 'offset') start_timestamp = helpers.get_query_starttime_timestamp(req, False) end_timestamp = helpers.get_query_endtime_timestamp(req, False) helpers.validate_start_end_timestamps(start_timestamp, end_timestamp) result = self._list_metrics(tenant_id, name, dimensions, req.uri, offset, req.limit, start_timestamp, end_timestamp) res.body = helpers.to_json(result) res.status = falcon.HTTP_200
def on_patch(self, req, res, alarm_definition_id=None): if not alarm_definition_id: raise HTTPBadRequestError('Bad Request', 'Alarm definition ID not provided') helpers.validate_authorization(req, ['api:alarms:definition:patch']) alarm_definition = helpers.from_json(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(req.project_id, alarm_definition_id, name, expression, actions_enabled, description, alarm_actions, ok_actions, undetermined_actions, match_by, severity, patch=True) helpers.add_links_to_resource( result, re.sub('/' + alarm_definition_id, '', req.uri)) res.body = helpers.to_json(result) res.status = falcon.HTTP_200
def on_patch(self, req, res, alarm_definition_id=None): if not alarm_definition_id: raise HTTPBadRequestError('Bad Request', 'Alarm definition ID not provided') helpers.validate_authorization(req, ['api:alarms:definition:patch']) alarm_definition = helpers.from_json(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(req.project_id, alarm_definition_id, name, expression, actions_enabled, description, alarm_actions, ok_actions, undetermined_actions, match_by, severity, patch=True) helpers.add_links_to_resource( result, re.sub('/' + alarm_definition_id, '', req.uri)) res.body = helpers.to_json(result) res.status = falcon.HTTP_200
def on_get(self, req, res): helpers.validate_authorization(req, self._get_metrics_authorized_roles) tenant_id = ( helpers.get_x_tenant_or_tenant_id(req, self._delegate_authorized_roles)) name = helpers.get_query_name(req) helpers.validate_query_name(name) dimensions = helpers.get_query_dimensions(req) helpers.validate_query_dimensions(dimensions) offset = helpers.get_query_param(req, 'offset') start_timestamp = helpers.get_query_starttime_timestamp(req, False) end_timestamp = helpers.get_query_endtime_timestamp(req, False) helpers.validate_start_end_timestamps(start_timestamp, end_timestamp) result = self._list_metrics(tenant_id, name, dimensions, req.uri, offset, req.limit, start_timestamp, end_timestamp) res.body = helpers.to_json(result) res.status = falcon.HTTP_200
def on_get(self, req, res, alarm_definition_id=None): helpers.validate_authorization(req, ['api:alarms:definition:get']) if alarm_definition_id is None: name = helpers.get_query_name(req) dimensions = helpers.get_query_dimensions(req) severity = helpers.get_query_param(req, "severity", default_val=None) if severity is not None: validation.validate_severity_query(severity) severity = severity.upper() sort_by = helpers.get_query_param(req, 'sort_by', default_val=None) if sort_by is not None: if isinstance(sort_by, six.string_types): sort_by = sort_by.split(',') allowed_sort_by = {'id', 'name', 'severity', 'updated_at', 'created_at'} validation.validate_sort_by(sort_by, allowed_sort_by) offset = helpers.get_query_param(req, 'offset') if offset is not None and not isinstance(offset, int): try: offset = int(offset) except Exception: raise HTTPUnprocessableEntityError( 'Unprocessable Entity', 'Offset value {} must be an integer'.format(offset)) result = self._alarm_definition_list(req.project_id, name, dimensions, severity, req.uri, sort_by, offset, req.limit) else: result = self._alarm_definition_show(req.project_id, alarm_definition_id) helpers.add_links_to_resource(result, re.sub('/' + alarm_definition_id, '', req.uri)) res.body = helpers.to_json(result) res.status = falcon.HTTP_200
def on_put(self, req, res, alarm_definition_id=None): if not alarm_definition_id: raise HTTPUnprocessableEntityError( 'Unprocessable Entity', 'Alarm definition ID not provided') helpers.validate_authorization(req, self._default_authorized_roles) alarm_definition = helpers.from_json(req) self._validate_alarm_definition(alarm_definition, require_all=True) 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)) description = get_query_alarm_definition_description(alarm_definition) alarm_actions = get_query_alarm_definition_alarm_actions( alarm_definition) ok_actions = get_query_ok_actions(alarm_definition) undetermined_actions = get_query_alarm_definition_undetermined_actions( alarm_definition) match_by = get_query_alarm_definition_match_by(alarm_definition) severity = get_query_alarm_definition_severity(alarm_definition) result = self._alarm_definition_update_or_patch(req.project_id, alarm_definition_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.to_json(result) res.status = falcon.HTTP_200
def on_patch(self, req, res, alarm_id): helpers.validate_authorization(req, ['api:alarms:patch']) alarm = helpers.from_json(req) schema_alarm.validate(alarm) old_alarm = self._alarms_repo.get_alarm(req.project_id, alarm_id)[0] # if a field is not present or is None, replace it with the old value if 'state' not in alarm or not alarm['state']: alarm['state'] = old_alarm['state'] if 'lifecycle_state' not in alarm or alarm['lifecycle_state'] is None: alarm['lifecycle_state'] = old_alarm['lifecycle_state'] if 'link' not in alarm or alarm['link'] is None: alarm['link'] = old_alarm['link'] self._alarm_patch(req.project_id, alarm_id, alarm['state'], alarm['lifecycle_state'], alarm['link']) result = self._alarm_show(req.uri, req.project_id, alarm_id) res.body = helpers.to_json(result) res.status = falcon.HTTP_200
def on_get(self, req, res): helpers.validate_authorization(req, ['api:alarms:count']) query_parms = falcon.uri.parse_query_string(req.query_string) if 'state' in query_parms: validation.validate_alarm_state(query_parms['state']) query_parms['state'] = query_parms['state'].upper() if 'severity' in query_parms: validation.validate_severity_query(query_parms['severity']) query_parms['severity'] = query_parms['severity'].upper() if 'group_by' in query_parms: if not isinstance(query_parms['group_by'], list): query_parms['group_by'] = query_parms['group_by'].split(',') self._validate_group_by(query_parms['group_by']) query_parms['metric_dimensions'] = helpers.get_query_dimensions( req, 'metric_dimensions') helpers.validate_query_dimensions(query_parms['metric_dimensions']) offset = helpers.get_query_param(req, 'offset') if offset is not None: try: offset = int(offset) except Exception: raise HTTPUnprocessableEntityError( "Unprocessable Entity", "Offset must be a valid integer, was {}".format(offset)) result = self._alarms_count(req.uri, req.project_id, query_parms, offset, req.limit) res.body = helpers.to_json(result) res.status = falcon.HTTP_200
def test_to_json(self): test_dict = {'test_body': 'test'} expected_json = '{"test_body":"test"}' response = helpers.to_json(test_dict) self.assertEqual(expected_json, response)