Esempio n. 1
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
    def test_dimension_multi_value(self):
        req = Mock()
        req.query_string = (
            "foo=bar&dimensions=Dimension_multi_value:one|two|three")

        result = helpers.get_query_dimensions(req)
        self.assertEqual(result, {"Dimension_multi_value": "one|two|three"})
Esempio n. 3
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.dumpit_utf8(result)
        res.status = falcon.HTTP_200
Esempio n. 4
0
    def on_get(self, req, res, alarm_definition_id=None):
        if alarm_definition_id is None:
            helpers.validate_authorization(req, self._default_authorized_roles)
            tenant_id = helpers.get_tenant_id(req)
            name = helpers.get_query_name(req)
            dimensions = helpers.get_query_dimensions(req)
            offset = helpers.get_query_param(req, 'offset')
            limit = helpers.get_limit(req)

            result = self._alarm_definition_list(tenant_id, name, dimensions,
                                                 req.uri, offset, limit)

            res.body = helpers.dumpit_utf8(result)
            res.status = falcon.HTTP_200

        else:
            helpers.validate_authorization(req, self._default_authorized_roles)
            tenant_id = helpers.get_tenant_id(req)

            result = self._alarm_definition_show(tenant_id,
                                                 alarm_definition_id)

            helpers.add_links_to_resource(result,
                                          re.sub('/' + alarm_definition_id, '',
                                                 req.uri))
            res.body = helpers.dumpit_utf8(result)
            res.status = falcon.HTTP_200
Esempio n. 5
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
Esempio n. 6
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.dumpit_utf8(result)
        res.status = falcon.HTTP_200
Esempio n. 7
0
    def on_get(self, req, res):
        helpers.validate_authorization(req, self._get_alarms_authorized_roles)
        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.dumpit_utf8(result)
        res.status = falcon.HTTP_200
Esempio n. 8
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
Esempio n. 9
0
    def test_no_dimensions(self):
        req = Mock()

        req.query_string = "foo=bar"

        result = helpers.get_query_dimensions(req)

        self.assertEqual(result, {})
Esempio n. 10
0
    def test_one_dimensions(self):
        req = Mock()

        req.query_string = "foo=bar&dimensions=Dimension:Value"

        result = helpers.get_query_dimensions(req)

        self.assertEqual(result, {"Dimension": "Value"})
Esempio n. 11
0
    def test_dimension_with_multi_colons(self):
        req = Mock()
        req.query_string = ("foo=bar&dimensions=url:http://192.168.10.4:5601,"
                            "hostname:monasca,component:kibana,service:monitoring")

        result = helpers.get_query_dimensions(req)
        self.assertEqual(result, {"url": "http://192.168.10.4:5601",
                                  "hostname": "monasca",
                                  "component": "kibana",
                                  "service": "monitoring"})
Esempio n. 12
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
Esempio n. 13
0
    def test_comma_sep_dimensions(self):
        req = Mock()

        req.query_string = ("foo=bar&"
                            "dimensions=Dimension:Value,Dimension-2:Value-2")

        result = helpers.get_query_dimensions(req)

        self.assertEqual(
            result, {"Dimension": "Value", "Dimension-2": "Value-2"})
Esempio n. 14
0
 def on_get(self, req, res):
     helpers.validate_authorization(req, self._default_authorized_roles)
     tenant_id = helpers.get_tenant_id(req)
     dimensions = helpers.get_query_dimensions(req)
     helpers.validate_query_dimensions(dimensions)
     offset = helpers.get_query_param(req, 'offset')
     limit = helpers.get_limit(req)
     result = self._list_metric_names(tenant_id, dimensions, req.uri,
                                      offset, limit)
     res.body = helpers.dumpit_utf8(result)
     res.status = falcon.HTTP_200
Esempio n. 15
0
 def on_get(self, req, res):
     helpers.validate_authorization(req, self._get_metrics_authorized_roles)
     tenant_id = helpers.get_tenant_id(req)
     dimensions = helpers.get_query_dimensions(req)
     helpers.validate_query_dimensions(dimensions)
     offset = helpers.get_query_param(req, 'offset')
     limit = helpers.get_limit(req)
     result = self._list_metric_names(tenant_id, dimensions,
                                      req.uri, offset, limit)
     res.body = helpers.dumpit_utf8(result)
     res.status = falcon.HTTP_200
Esempio n. 16
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))
     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
Esempio n. 17
0
    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)
            tenant_id = helpers.get_tenant_id(req)
            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)
            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))
            limit = helpers.get_limit(req)

            result = self._alarm_definition_list(tenant_id, name, dimensions,
                                                 severity, req.uri, sort_by,
                                                 offset, limit)

            res.body = helpers.dumpit_utf8(result)
            res.status = falcon.HTTP_200

        else:
            helpers.validate_authorization(
                req, self._get_alarmdefs_authorized_roles)
            tenant_id = helpers.get_tenant_id(req)

            result = self._alarm_definition_show(tenant_id,
                                                 alarm_definition_id)

            helpers.add_links_to_resource(
                result, re.sub('/' + alarm_definition_id, '', req.uri))
            res.body = helpers.dumpit_utf8(result)
            res.status = falcon.HTTP_200
Esempio n. 18
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
Esempio n. 19
0
    def test_dimension_with_multi_colons(self):
        req = Mock()
        req.query_string = (
            "foo=bar&dimensions=url:http://192.168.10.4:5601,"
            "hostname:monasca,component:kibana,service:monitoring")

        result = helpers.get_query_dimensions(req)
        self.assertEqual(
            result, {
                "url": "http://192.168.10.4:5601",
                "hostname": "monasca",
                "component": "kibana",
                "service": "monitoring"
            })
Esempio n. 20
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
Esempio n. 21
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
Esempio n. 22
0
 def on_get(self, req, res):
     helpers.validate_authorization(req, self._get_metrics_authorized_roles)
     tenant_id = helpers.get_tenant_id(req)
     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')
     limit = helpers.get_limit(req)
     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, limit,
                                 start_timestamp, end_timestamp)
     res.body = helpers.dumpit_utf8(result)
     res.status = falcon.HTTP_200
Esempio n. 23
0
    def on_get(self, req, res, alarm_definition_id=None):
        if alarm_definition_id is None:
            helpers.validate_authorization(req, self._default_authorized_roles)
            tenant_id = helpers.get_tenant_id(req)
            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)
            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))
            limit = helpers.get_limit(req)

            result = self._alarm_definition_list(tenant_id, name, dimensions, severity,
                                                 req.uri, sort_by, offset, limit)

            res.body = helpers.dumpit_utf8(result)
            res.status = falcon.HTTP_200

        else:
            helpers.validate_authorization(req, self._default_authorized_roles)
            tenant_id = helpers.get_tenant_id(req)

            result = self._alarm_definition_show(tenant_id,
                                                 alarm_definition_id)

            helpers.add_links_to_resource(result,
                                          re.sub('/' + alarm_definition_id, '',
                                                 req.uri))
            res.body = helpers.dumpit_utf8(result)
            res.status = falcon.HTTP_200
Esempio n. 24
0
    def test_empty_dimension(self):
        req = Mock()
        req.query_string = ("foo=bar&dimensions=")

        result = helpers.get_query_dimensions(req)
        self.assertEqual(result, {})
    def test_dimension_multi_value(self):
        req = Mock()
        req.query_string = ("foo=bar&dimensions=Dimension_multi_value:one|two|three")

        result = helpers.get_query_dimensions(req)
        self.assertEqual(result, {"Dimension_multi_value": "one|two|three"})
Esempio n. 26
0
    def test_empty_dimension(self):
        req = Mock()
        req.query_string = ("foo=bar&dimensions=")

        result = helpers.get_query_dimensions(req)
        self.assertEqual(result, {})