Beispiel #1
0
    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
Beispiel #2
0
 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)
Beispiel #3
0
    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
Beispiel #4
0
    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
Beispiel #5
0
    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
Beispiel #6
0
 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)
Beispiel #7
0
    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
Beispiel #9
0
    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
Beispiel #10
0
    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
Beispiel #11
0
    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
Beispiel #13
0
    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
Beispiel #14
0
    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
Beispiel #16
0
    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
Beispiel #17
0
 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'))
Beispiel #18
0
 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
Beispiel #20
0
 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'))
Beispiel #21
0
    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
Beispiel #22
0
 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
Beispiel #23
0
 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
Beispiel #24
0
 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
Beispiel #25
0
 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
Beispiel #26
0
 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
Beispiel #27
0
 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
Beispiel #28
0
 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)
Beispiel #29
0
 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
Beispiel #30
0
 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
Beispiel #31
0
 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)
Beispiel #32
0
 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
Beispiel #33
0
 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)
Beispiel #34
0
 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
Beispiel #35
0
    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)
Beispiel #36
0
 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
Beispiel #37
0
    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_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
Beispiel #39
0
    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
Beispiel #40
0
 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
Beispiel #43
0
    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
Beispiel #44
0
    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
Beispiel #45
0
    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 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)