def do_post_alarm_definitions(self, req, res):
        helpers.validate_authorization(req, self._default_authorized_roles)

        alarm_definition = read_json_msg_body(req)

        self._validate_alarm_definition(alarm_definition)

        tenant_id = helpers.get_tenant_id(req)
        name = get_query_alarm_definition_name(alarm_definition)
        expression = get_query_alarm_definition_expression(alarm_definition)
        description = get_query_alarm_definition_description(alarm_definition)
        severity = get_query_alarm_definition_severity(alarm_definition)
        match_by = get_query_alarm_definition_match_by(alarm_definition)
        alarm_actions = get_query_alarm_definition_alarm_actions(
            alarm_definition)
        undetermined_actions = get_query_alarm_definition_undetermined_actions(
            alarm_definition)
        ok_actions = get_query_ok_actions(alarm_definition)

        result = self._alarm_definition_create(tenant_id, name, expression,
                                               description, severity, match_by,
                                               alarm_actions,
                                               undetermined_actions,
                                               ok_actions)

        helpers.add_links_to_resource(result, req.uri)
        res.body = helpers.dumpit_utf8(result)
        res.status = falcon.HTTP_201
Esempio n. 2
0
    def do_post_stream_definitions(self, req, res):
        helpers.validate_authorization(req, self._default_authorized_roles)

        stream_definition = helpers.read_json_msg_body(req)

        self._validate_stream_definition(stream_definition)

        tenant_id = helpers.get_tenant_id(req)
        name = get_query_stream_definition_name(stream_definition)
        description = get_query_stream_definition_description(
            stream_definition)
        select = stream_definition['select']
        group_by = stream_definition['group_by']
        fire_criteria = stream_definition['fire_criteria']
        expiration = stream_definition['expiration']
        fire_actions = get_query_stream_definition_fire_actions(
            stream_definition)
        expire_actions = get_query_stream_definition_expire_actions(
            stream_definition)

        result = self._stream_definition_create(tenant_id, name, description,
                                                select, group_by,
                                                fire_criteria, expiration,
                                                fire_actions, expire_actions)

        helpers.add_links_to_resource(result, req.uri)
        res.body = helpers.dumpit_utf8(result)
        res.status = falcon.HTTP_201
Esempio n. 3
0
    def do_post_alarm_definitions(self, req, res):
        helpers.validate_authorization(req, self._default_authorized_roles)

        alarm_definition = helpers.read_json_msg_body(req)

        self._validate_alarm_definition(alarm_definition)

        tenant_id = helpers.get_tenant_id(req)
        name = get_query_alarm_definition_name(alarm_definition)
        expression = get_query_alarm_definition_expression(alarm_definition)
        description = get_query_alarm_definition_description(alarm_definition)
        severity = get_query_alarm_definition_severity(alarm_definition)
        match_by = get_query_alarm_definition_match_by(alarm_definition)
        alarm_actions = get_query_alarm_definition_alarm_actions(
            alarm_definition)
        undetermined_actions = get_query_alarm_definition_undetermined_actions(
            alarm_definition)
        ok_actions = get_query_ok_actions(alarm_definition)

        result = self._alarm_definition_create(tenant_id, name, expression,
                                               description, severity, match_by,
                                               alarm_actions,
                                               undetermined_actions,
                                               ok_actions)

        helpers.add_links_to_resource(result, req.uri)
        res.body = helpers.dumpit_utf8(result)
        res.status = falcon.HTTP_201
Esempio n. 4
0
    def _alarm_list(self, req_uri, tenant_id, query_parms, offset):

        alarm_rows = self._alarms_repo.get_alarms(tenant_id, query_parms,
                                                  offset)

        result = []

        if not alarm_rows:
            return result

        # Forward declaration
        alarm = {}
        prev_alarm_id = None
        for alarm_row in alarm_rows:
            if prev_alarm_id != alarm_row['alarm_id']:
                if prev_alarm_id is not None:
                    result.append(alarm)

                ad = {
                    u'id': alarm_row['alarm_definition_id'],
                    u'name': alarm_row['alarm_definition_name'],
                    u'severity': alarm_row['severity'],
                }
                helpers.add_links_to_resource(ad,
                                              re.sub('alarms',
                                                     'alarm-definitions',
                                                     req_uri),
                                              rel=None)

                metrics = []
                alarm = {
                    u'id': alarm_row['alarm_id'],
                    u'metrics': metrics,
                    u'state': alarm_row['state'],
                    u'alarm_definition': ad
                }
                helpers.add_links_to_resource(alarm, req_uri)

                prev_alarm_id = alarm_row['alarm_id']

            dimensions = {}
            metric = {
                u'name': alarm_row['metric_name'],
                u'dimensions': dimensions
            }

            if alarm_row['metric_dimensions']:
                for dimension in alarm_row['metric_dimensions'].split(','):
                    parsed_dimension = dimension.split('=')
                    dimensions[parsed_dimension[0]] = parsed_dimension[1]

            metrics.append(metric)

        result.append(alarm)

        return helpers.paginate(result, req_uri, offset)
Esempio n. 5
0
    def do_get_alarm_definition(self, req, res, id):

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

        result = self._alarm_definition_show(tenant_id, id)

        helpers.add_links_to_resource(result, re.sub('/' + id, '', req.uri))
        res.body = helpers.dumpit_utf8(result)
        res.status = falcon.HTTP_200
    def do_get_alarm_definition(self, req, res, id):

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

        result = self._alarm_definition_show(tenant_id, id)

        helpers.add_links_to_resource(result, re.sub('/' + id, '', req.uri))
        res.body = helpers.dumpit_utf8(result)
        res.status = falcon.HTTP_200
Esempio n. 7
0
    def _build_notification_result(self, notification_row, uri):

        result = {
            u'id': notification_row['id'],
            u'name': notification_row['name'],
            u'type': notification_row['type'],
            u'address': notification_row['address']
        }

        helpers.add_links_to_resource(result, uri)

        return result
Esempio n. 8
0
    def _build_notification_result(self, notification_row, uri):

        result = {
            u'id': notification_row['id'],
            u'name': notification_row['name'],
            u'type': notification_row['type'],
            u'address': notification_row['address']
        }

        helpers.add_links_to_resource(result, uri)

        return result
    def do_put_alarm_definitions(self, req, res, id):

        helpers.validate_authorization(req, self._default_authorized_roles)

        alarm_definition = read_json_msg_body(req)

        self._validate_alarm_definition(alarm_definition)

        tenant_id = helpers.get_tenant_id(req)

        # Mandatory positional args
        name = get_query_alarm_definition_name(alarm_definition)
        expression = get_query_alarm_definition_expression(alarm_definition)
        actions_enabled = (
            get_query_alarm_definition_actions_enabled(alarm_definition,
                                                       required=True))

        # Validator makes actions_enabled optional. So, check it here.
        if not actions_enabled:
            raise falcon.HTTPBadRequest('Bad request', 'Missing '
                                                       'actions_enabled')

        # Optional args
        description = get_query_alarm_definition_description(alarm_definition,
                                                             return_none=True)
        alarm_actions = get_query_alarm_definition_alarm_actions(
            alarm_definition, return_none=True)
        ok_actions = get_query_ok_actions(alarm_definition, return_none=True)
        undetermined_actions = get_query_alarm_definition_undetermined_actions(
            alarm_definition, return_none=True)
        match_by = get_query_alarm_definition_match_by(alarm_definition,
                                                       return_none=True)
        severity = get_query_alarm_definition_severity(alarm_definition,
                                                       return_none=True)

        result = self._alarm_definition_update_or_patch(tenant_id,
                                                        id,
                                                        name,
                                                        expression,
                                                        actions_enabled,
                                                        description,
                                                        alarm_actions,
                                                        ok_actions,
                                                        undetermined_actions,
                                                        match_by,
                                                        severity,
                                                        patch=False)

        helpers.add_links_to_resource(result, req.uri)
        res.body = helpers.dumpit_utf8(result)
        res.status = falcon.HTTP_200
Esempio n. 10
0
    def _alarm_definition_list(self, tenant_id, name, dimensions, req_uri,
                               offset):

        alarm_definition_rows = (
            self._alarm_definitions_repo.get_alarm_definitions(
                tenant_id, name, dimensions, offset))

        result = []
        for alarm_definition_row in alarm_definition_rows:
            match_by = get_comma_separated_str_as_list(
                alarm_definition_row['match_by'])

            alarm_actions_list = get_comma_separated_str_as_list(
                alarm_definition_row['alarm_actions'])

            ok_actions_list = get_comma_separated_str_as_list(
                alarm_definition_row['ok_actions'])

            undetermined_actions_list = get_comma_separated_str_as_list(
                alarm_definition_row['undetermined_actions'])

            ad = {
                u'id':
                alarm_definition_row['id'].decode('utf8'),
                u'name':
                alarm_definition_row['name'].decode("utf8"),
                u'description':
                alarm_definition_row['description'].decode('utf8')
                if alarm_definition_row['description'] else u'',
                u'expression':
                alarm_definition_row['expression'].decode('utf8'),
                u'match_by':
                match_by,
                u'severity':
                alarm_definition_row['severity'].decode('utf8').upper(),
                u'actions_enabled':
                alarm_definition_row['actions_enabled'] == 1,
                u'alarm_actions':
                alarm_actions_list,
                u'ok_actions':
                ok_actions_list,
                u'undetermined_actions':
                undetermined_actions_list
            }

            helpers.add_links_to_resource(ad, req_uri)
            result.append(ad)

        result = helpers.paginate(result, req_uri, offset)

        return result
Esempio n. 11
0
    def do_put_alarm_definitions(self, req, res, id):

        helpers.validate_authorization(req, self._default_authorized_roles)

        alarm_definition = helpers.read_json_msg_body(req)

        self._validate_alarm_definition(alarm_definition)

        tenant_id = helpers.get_tenant_id(req)

        # Mandatory positional args
        name = get_query_alarm_definition_name(alarm_definition)
        expression = get_query_alarm_definition_expression(alarm_definition)
        actions_enabled = (get_query_alarm_definition_actions_enabled(
            alarm_definition, required=True))

        # Validator makes actions_enabled optional. So, check it here.
        if not actions_enabled:
            raise falcon.HTTPBadRequest('Bad request', 'Missing '
                                        'actions_enabled')

        # Optional args
        description = get_query_alarm_definition_description(alarm_definition,
                                                             return_none=True)
        alarm_actions = get_query_alarm_definition_alarm_actions(
            alarm_definition, return_none=True)
        ok_actions = get_query_ok_actions(alarm_definition, return_none=True)
        undetermined_actions = get_query_alarm_definition_undetermined_actions(
            alarm_definition, return_none=True)
        match_by = get_query_alarm_definition_match_by(alarm_definition,
                                                       return_none=True)
        severity = get_query_alarm_definition_severity(alarm_definition,
                                                       return_none=True)

        result = self._alarm_definition_update_or_patch(tenant_id,
                                                        id,
                                                        name,
                                                        expression,
                                                        actions_enabled,
                                                        description,
                                                        alarm_actions,
                                                        ok_actions,
                                                        undetermined_actions,
                                                        match_by,
                                                        severity,
                                                        patch=False)

        helpers.add_links_to_resource(result, req.uri)
        res.body = helpers.dumpit_utf8(result)
        res.status = falcon.HTTP_200
Esempio n. 12
0
    def _alarm_list(self, req_uri, tenant_id, query_parms, offset):

        alarm_rows = self._alarms_repo.get_alarms(tenant_id, query_parms,
                                                  offset)

        result = []

        if not alarm_rows:
            return result

        # Forward declaration
        alarm = {}
        prev_alarm_id = None
        for alarm_row in alarm_rows:
            if prev_alarm_id != alarm_row['alarm_id']:
                if prev_alarm_id is not None:
                    result.append(alarm)

                ad = {u'id': alarm_row['alarm_definition_id'],
                      u'name': alarm_row['alarm_definition_name'],
                      u'severity': alarm_row['severity'], }
                helpers.add_links_to_resource(ad,
                                              re.sub('alarms',
                                                     'alarm-definitions',
                                                     req_uri),
                                              rel=None)

                metrics = []
                alarm = {u'id': alarm_row['alarm_id'], u'metrics': metrics,
                         u'state': alarm_row['state'],
                         u'alarm_definition': ad}
                helpers.add_links_to_resource(alarm, req_uri)

                prev_alarm_id = alarm_row['alarm_id']

            dimensions = {}
            metric = {u'name': alarm_row['metric_name'],
                      u'dimensions': dimensions}

            if alarm_row['metric_dimensions']:
                for dimension in alarm_row['metric_dimensions'].split(','):
                    parsed_dimension = dimension.split('=')
                    dimensions[parsed_dimension[0]] = parsed_dimension[1]

            metrics.append(metric)

        result.append(alarm)

        return helpers.paginate(result, req_uri, offset)
Esempio n. 13
0
    def _stream_definition_list(self, tenant_id, name, req_uri,
                                offset, limit):

        stream_definition_rows = (
            self._stream_definitions_repo.get_stream_definitions(
                tenant_id, name, offset, limit))
        result = []
        for stream_definition_row in stream_definition_rows:
            sd = self._build_stream_definition_show_result(
                stream_definition_row)
            helpers.add_links_to_resource(sd, req_uri)
            result.append(sd)

        result = helpers.paginate(result, req_uri, offset)

        return result
Esempio n. 14
0
 def _create_notification_response(self, id, notification, uri):
     name = notification['name']
     notification_type = notification['type'].upper()
     address = notification['address']
     response = {'id': id, 'name': name, 'type': notification_type,
                 'address': address}
     return json.dumps(helpers.add_links_to_resource(response, uri),
                       ensure_ascii=False).encode('utf8')
Esempio n. 15
0
    def do_patch_alarm_definitions(self, req, res, id):

        helpers.validate_authorization(req, self._default_authorized_roles)

        alarm_definition = read_json_msg_body(req)

        tenant_id = helpers.get_tenant_id(req)

        # Optional args
        name = get_query_alarm_definition_name(alarm_definition,
                                               return_none=True)
        expression = get_query_alarm_definition_expression(alarm_definition,
                                                           return_none=True)
        actions_enabled = (
            get_query_alarm_definition_actions_enabled(alarm_definition,
                                                       return_none=True))

        description = get_query_alarm_definition_description(alarm_definition,
                                                             return_none=True)
        alarm_actions = get_query_alarm_definition_alarm_actions(
            alarm_definition, return_none=True)
        ok_actions = get_query_ok_actions(alarm_definition, return_none=True)
        undetermined_actions = get_query_alarm_definition_undetermined_actions(
            alarm_definition, return_none=True)
        match_by = get_query_alarm_definition_match_by(alarm_definition,
                                                       return_none=True)
        severity = get_query_alarm_definition_severity(alarm_definition,
                                                       return_none=True)

        result = self._alarm_definition_update_or_patch(tenant_id,
                                                        id,
                                                        name,
                                                        expression,
                                                        actions_enabled,
                                                        description,
                                                        alarm_actions,
                                                        ok_actions,
                                                        undetermined_actions,
                                                        match_by,
                                                        severity,
                                                        patch=True)

        helpers.add_links_to_resource(result, req.uri)
        res.body = helpers.dumpit_utf8(result)
        res.status = falcon.HTTP_200
Esempio n. 16
0
    def do_patch_alarm_definitions(self, req, res, id):

        helpers.validate_authorization(req, self._default_authorized_roles)

        alarm_definition = helpers.read_json_msg_body(req)

        tenant_id = helpers.get_tenant_id(req)

        # Optional args
        name = get_query_alarm_definition_name(alarm_definition,
                                               return_none=True)
        expression = get_query_alarm_definition_expression(alarm_definition,
                                                           return_none=True)
        actions_enabled = (get_query_alarm_definition_actions_enabled(
            alarm_definition, return_none=True))

        description = get_query_alarm_definition_description(alarm_definition,
                                                             return_none=True)
        alarm_actions = get_query_alarm_definition_alarm_actions(
            alarm_definition, return_none=True)
        ok_actions = get_query_ok_actions(alarm_definition, return_none=True)
        undetermined_actions = get_query_alarm_definition_undetermined_actions(
            alarm_definition, return_none=True)
        match_by = get_query_alarm_definition_match_by(alarm_definition,
                                                       return_none=True)
        severity = get_query_alarm_definition_severity(alarm_definition,
                                                       return_none=True)

        result = self._alarm_definition_update_or_patch(tenant_id,
                                                        id,
                                                        name,
                                                        expression,
                                                        actions_enabled,
                                                        description,
                                                        alarm_actions,
                                                        ok_actions,
                                                        undetermined_actions,
                                                        match_by,
                                                        severity,
                                                        patch=True)

        helpers.add_links_to_resource(result, req.uri)
        res.body = helpers.dumpit_utf8(result)
        res.status = falcon.HTTP_200
Esempio n. 17
0
    def _alarm_show(self, req_uri, tenant_id, id):

        alarm_rows = self._alarms_repo.get_alarm(tenant_id, id)

        first_row = True
        for alarm_row in alarm_rows:
            if first_row:
                ad = {
                    u'id': alarm_row['alarm_definition_id'],
                    u'name': alarm_row['alarm_definition_name'],
                    u'severity': alarm_row['severity'],
                }
                helpers.add_links_to_resource(ad,
                                              re.sub('alarms',
                                                     'alarm-definitions',
                                                     req_uri),
                                              rel=None)

                metrics = []
                alarm = {
                    u'id': alarm_row['alarm_id'],
                    u'metrics': metrics,
                    u'state': alarm_row['state'],
                    u'alarm_definition': ad
                }
                helpers.add_links_to_resource(alarm, req_uri)

                first_row = False

            dimensions = {}
            metric = {
                u'name': alarm_row['metric_name'],
                u'dimensions': dimensions
            }

            if alarm_row['metric_dimensions']:
                for dimension in alarm_row['metric_dimensions'].split(','):
                    parsed_dimension = dimension.split('=')
                    dimensions[parsed_dimension[0]] = parsed_dimension[1]

            metrics.append(metric)

        return alarm
Esempio n. 18
0
    def _alarm_definition_list(self, tenant_id, name, dimensions, req_uri,
                               offset):

        alarm_definition_rows = (
            self._alarm_definitions_repo.get_alarm_definitions(tenant_id, name,
                                                               dimensions,
                                                               offset))

        result = []
        for alarm_definition_row in alarm_definition_rows:
            match_by = get_comma_separated_str_as_list(
                alarm_definition_row['match_by'])

            alarm_actions_list = get_comma_separated_str_as_list(
                alarm_definition_row['alarm_actions'])

            ok_actions_list = get_comma_separated_str_as_list(
                alarm_definition_row['ok_actions'])

            undetermined_actions_list = get_comma_separated_str_as_list(
                alarm_definition_row['undetermined_actions'])

            ad = {u'id': alarm_definition_row['id'].decode('utf8'),
                  u'name': alarm_definition_row['name'].decode("utf8"),
                  u'description': alarm_definition_row['description'].decode(
                      'utf8') if alarm_definition_row['description'] else u'',
                  u'expression': alarm_definition_row['expression'].decode(
                      'utf8'), u'match_by': match_by,
                  u'severity': alarm_definition_row['severity'].decode(
                      'utf8'),
                  u'actions_enabled':
                      alarm_definition_row['actions_enabled'] == 1,
                  u'alarm_actions': alarm_actions_list,
                  u'ok_actions': ok_actions_list,
                  u'undetermined_actions': undetermined_actions_list}

            helpers.add_links_to_resource(ad, req_uri)
            result.append(ad)

        result = helpers.paginate(result, req_uri, offset)

        return result
Esempio n. 19
0
    def _create_notification_response(self, id, name, type,
                                      address, uri):

        response = {
            'id': id,
            'name': name,
            'type': type,
            'address': address
        }

        return helpers.add_links_to_resource(response, uri)
    def _alarm_definition_list(self, tenant_id, name, dimensions, req_uri):

        alarm_definition_rows = (
            self._alarm_definitions_repo.get_alarm_definitions(tenant_id, name,
                                                               dimensions))

        result = []
        for alarm_definition_row in alarm_definition_rows:

            match_by = get_comma_separated_str_as_list(
                alarm_definition_row.match_by)

            alarm_actions_list = get_comma_separated_str_as_list(
                alarm_definition_row.alarm_actions)

            ok_actions_list = get_comma_separated_str_as_list(
                alarm_definition_row.ok_actions)

            undetermined_actions_list = get_comma_separated_str_as_list(
                alarm_definition_row.undetermined_actions)

            ad = {u'id': alarm_definition_row.id.decode('utf8'),
                  u'name': alarm_definition_row.name.decode("utf8"),
                  u'description': alarm_definition_row.description.decode(
                      'utf8'),
                  u'expression': alarm_definition_row.expression.decode(
                      'utf8'), u'match_by': match_by,
                  u'severity': alarm_definition_row.severity.decode(
                      'utf8'),
                  u'actions_enabled':
                      alarm_definition_row.actions_enabled == 1,
                  u'alarm_actions': alarm_actions_list,
                  u'ok_actions': ok_actions_list,
                  u'undetermined_actions': undetermined_actions_list}

            helpers.add_links_to_resource(ad, req_uri)
            result.append(ad)

        return result
Esempio n. 21
0
    def _alarm_show(self, req_uri, tenant_id, id):

        alarm_rows = self._alarms_repo.get_alarm(tenant_id, id)

        first_row = True
        for alarm_row in alarm_rows:
            if first_row:
                ad = {u'id': alarm_row['alarm_definition_id'],
                      u'name': alarm_row['alarm_definition_name'],
                      u'severity': alarm_row['severity'], }
                helpers.add_links_to_resource(ad,
                                              re.sub('alarms',
                                                     'alarm-definitions',
                                                     req_uri),
                                              rel=None)

                metrics = []
                alarm = {u'id': alarm_row['alarm_id'], u'metrics': metrics,
                         u'state': alarm_row['state'],
                         u'alarm_definition': ad}
                helpers.add_links_to_resource(alarm, req_uri)

                first_row = False

            dimensions = {}
            metric = {u'name': alarm_row['metric_name'],
                      u'dimensions': dimensions}

            if alarm_row['metric_dimensions']:
                for dimension in alarm_row['metric_dimensions'].split(','):
                    parsed_dimension = dimension.split('=')
                    dimensions[parsed_dimension[0]] = parsed_dimension[1]

            metrics.append(metric)

        return alarm
Esempio n. 22
0
    def _list_notification(self, tenant_id, notification_id, uri):
        """Lists the notification by id.

        :param tenant_id: The tenant id.
        :param notification_id: The notification id
        :raises: falcon.HTTPServiceUnavailable,falcon.HTTPError (404):
        """
        try:
            notifications = self._notifications_repo.list_notification(
                tenant_id, notification_id)
            return json.dumps(
                helpers.add_links_to_resource(notifications, uri))
        except repository_exceptions.DoesNotExistException:
            helpers.raise_not_found_exception('notification', notification_id,
                                              tenant_id)
        except repository_exceptions.RepositoryException as ex:
            LOG.error(ex)
            raise falcon.HTTPInternalServerError('Service unavailable',
                                                 ex.message)
Esempio n. 23
0
    def _create_notification_response(self, id, name, type, address, uri):

        response = {'id': id, 'name': name, 'type': type, 'address': address}

        return helpers.add_links_to_resource(response, uri)