示例#1
0
    def QualifierFilter(args, rows):
        """This is filter for testing "in-memory HBase".

        This method is called from scan() when 'QualifierFilter' is found in
        the 'filter' argument
        """
        op = args[0]
        value = args[1]
        is_regex = False
        if value.startswith('binaryprefix:'):
            value = value[len('binaryprefix:'):]
        if value.startswith('regexstring:'):
            value = value[len('regexstring:'):]
            is_regex = True
        column = 'f:' + value
        r = {}
        for row in rows:
            data = rows[row]
            r_data = {}
            for key in data:
                if ((op == '=' and key.startswith(column))
                        or (op == '>=' and key >= column)
                        or (op == '<=' and key <= column)
                        or (op == '>' and key > column)
                        or (op == '<' and key < column)
                        or (is_regex and re.search(value, key))):
                    r_data[key] = data[key]
                else:
                    raise aodh.NotImplementedError("In-memory QualifierFilter "
                                                   "doesn't support the %s "
                                                   "operation yet" % op)
            if r_data:
                r[row] = r_data
        return r
示例#2
0
    def get_alarms(self,
                   name=None,
                   user=None,
                   state=None,
                   meter=None,
                   project=None,
                   enabled=None,
                   alarm_id=None,
                   alarm_type=None,
                   severity=None,
                   exclude=None):

        if meter:
            raise aodh.NotImplementedError('Filter by meter not implemented')

        q = hbase_utils.make_query(alarm_id=alarm_id,
                                   name=name,
                                   enabled=enabled,
                                   user_id=user,
                                   project_id=project,
                                   state=state,
                                   type=alarm_type,
                                   severity=severity,
                                   exclude=exclude)

        with self.conn_pool.connection() as conn:
            alarm_table = conn.table(self.ALARM_TABLE)
            gen = alarm_table.scan(filter=q)
            alarms = [
                hbase_utils.deserialize_entry(data) for ignored, data in gen
            ]
            for alarm in sorted(alarms,
                                key=operator.itemgetter('timestamp'),
                                reverse=True):
                yield models.Alarm(**alarm)
示例#3
0
    def get_alarm_changes(alarm_id, on_behalf_of,
                          user=None, project=None, alarm_type=None,
                          severity=None, start_timestamp=None,
                          start_timestamp_op=None, end_timestamp=None,
                          end_timestamp_op=None, pagination=None):
        """Yields list of AlarmChanges describing alarm history

        Changes are always sorted in reverse order of occurrence, given
        the importance of currency.

        Segregation for non-administrative users is done on the basis
        of the on_behalf_of parameter. This allows such users to have
        visibility on both the changes initiated by themselves directly
        (generally creation, rule changes, or deletion) and also on those
        changes initiated on their behalf by the alarming service (state
        transitions after alarm thresholds are crossed).

        :param alarm_id: ID of alarm to return changes for
        :param on_behalf_of: ID of tenant to scope changes query (None for
                             administrative user, indicating all projects)
        :param user: Optional ID of user to return changes for
        :param project: Optional ID of project to return changes for
        :param alarm_type: Optional change type
        :param severity: Optional change severity
        :param start_timestamp: Optional modified timestamp start range
        :param start_timestamp_op: Optional timestamp start range operation
        :param end_timestamp: Optional modified timestamp end range
        :param end_timestamp_op: Optional timestamp end range operation
        :param pagination: Pagination parameters.
        """
        raise aodh.NotImplementedError('Alarm history not implemented')
示例#4
0
    def RowFilter(args, rows):
        """This is filter for testing "in-memory HBase".

        This method is called from scan() when 'RowFilter' is found in the
        'filter' argument.

        :param args: a list of filter arguments, it contains operator and
          sought string
        :param rows: a dict of rows which are filtered
        """
        op = args[0]
        value = args[1]
        if value.startswith('binary:'):
            value = value[len('binary:'):]
        if value.startswith('regexstring:'):
            value = value[len('regexstring:'):]
        r = {}
        for row, data in rows.items():
            try:
                g = re.search(value, row).group()
                if op == '=':
                    if g == row:
                        r[row] = data
                else:
                    raise aodh.NotImplementedError("In-memory "
                                                   "RowFilter doesn't support "
                                                   "the %s operation yet" % op)
            except AttributeError:
                pass
        return r
示例#5
0
    def get_alarms(name=None,
                   user=None,
                   state=None,
                   meter=None,
                   project=None,
                   enabled=None,
                   alarm_id=None,
                   alarm_type=None,
                   severity=None,
                   exclude=None,
                   pagination=None):
        """Yields a lists of alarms that match filters.

        :param name: Optional name for alarm.
        :param user: Optional ID for user that owns the resource.
        :param state: Optional string for alarm state.
        :param meter: Optional string for alarms associated with meter.
        :param project: Optional ID for project that owns the resource.
        :param enabled: Optional boolean to list disable alarm.
        :param alarm_id: Optional alarm_id to return one alarm.
        :param alarm_type: Optional alarm type.
        :param severity: Optional alarm severity.
        :param exclude: Optional dict for inequality constraint.
        :param pagination: Pagination parameters.
        """
        raise aodh.NotImplementedError('Alarms not implemented')
示例#6
0
    def clear_expired_alarm_history_data(alarm_history_ttl):
        """Clear expired alarm history data from the backend storage system.

        Clearing occurs according to the time-to-live.

        :param alarm_history_ttl: Number of seconds to keep alarm history
                                  records for.
        """
        raise aodh.NotImplementedError('Clearing alarm history '
                                       'not implemented')
示例#7
0
    def query_alarm_history(filter_expr=None, orderby=None, limit=None):
        """Return an iterable of model.AlarmChange objects.

        :param filter_expr: Filter expression for query.
        :param orderby: List of field name and direction pairs for order by.
        :param limit: Maximum number of results to return.
        """

        raise aodh.NotImplementedError('Complex query for alarms '
                                       'history is not implemented.')
示例#8
0
    def scan(self,
             filter=None,
             columns=None,
             row_start=None,
             row_stop=None,
             limit=None):
        columns = columns or []
        sorted_keys = sorted(self._rows_with_ts)
        # copy data between row_start and row_stop into a dict
        rows = {}
        for row in sorted_keys:
            if row_start and row < row_start:
                continue
            if row_stop and row > row_stop:
                break
            rows[row] = self._get_latest_dict(row)

        if columns:
            ret = {}
            for row, data in six.iteritems(rows):
                for key in data:
                    if key in columns:
                        ret[row] = data
            rows = ret
        if filter:
            # TODO(jdanjou): we should really parse this properly,
            # but at the moment we are only going to support AND here
            filters = filter.split('AND')
            for f in filters:
                # Extract filter name and its arguments
                g = re.search("(.*)\((.*),?\)", f)
                fname = g.group(1).strip()
                fargs = [
                    s.strip().replace('\'', '') for s in g.group(2).split(',')
                ]
                m = getattr(self, fname)
                if callable(m):
                    # overwrite rows for filtering to take effect
                    # in case of multiple filters
                    rows = m(fargs, rows)
                else:
                    raise aodh.NotImplementedError(
                        "%s filter is not implemented, "
                        "you may want to add it!")
        for k in sorted(rows)[:limit]:
            yield k, rows[k]
示例#9
0
 def get_alarm_changes(self,
                       alarm_id,
                       on_behalf_of,
                       user=None,
                       project=None,
                       alarm_type=None,
                       severity=None,
                       start_timestamp=None,
                       start_timestamp_op=None,
                       end_timestamp=None,
                       end_timestamp_op=None,
                       pagination=None):
     if pagination:
         raise aodh.NotImplementedError('Pagination query not implemented')
     q = hbase_utils.make_query(alarm_id=alarm_id,
                                on_behalf_of=on_behalf_of,
                                type=alarm_type,
                                user_id=user,
                                project_id=project,
                                severity=severity)
     start_row, end_row = hbase_utils.make_timestamp_query(
         hbase_utils.make_general_rowkey_scan,
         start=start_timestamp,
         start_op=start_timestamp_op,
         end=end_timestamp,
         end_op=end_timestamp_op,
         bounds_only=True,
         some_id=alarm_id)
     with self.conn_pool.connection() as conn:
         alarm_history_table = conn.table(self.ALARM_HISTORY_TABLE)
         gen = alarm_history_table.scan(filter=q,
                                        row_start=start_row,
                                        row_stop=end_row)
         for ignored, data in gen:
             stored_entry = hbase_utils.deserialize_entry(data)
             yield models.AlarmChange(**stored_entry)
示例#10
0
 def record_alarm_change(alarm_change):
     """Record alarm change event."""
     raise aodh.NotImplementedError('Alarm history not implemented')
示例#11
0
 def delete_alarm(alarm_id):
     """Delete an alarm and its history data."""
     raise aodh.NotImplementedError('Alarms not implemented')
示例#12
0
 def update_alarm(alarm):
     """Update alarm."""
     raise aodh.NotImplementedError('Alarms not implemented')
示例#13
0
    def create_alarm(alarm):
        """Create an alarm. Returns the alarm as created.

        :param alarm: The alarm to create.
        """
        raise aodh.NotImplementedError('Alarms not implemented')
示例#14
0
 def delete_quotas(project_id):
     raise aodh.NotImplementedError('Deleting resource quota not '
                                    'implemented')
示例#15
0
 def set_quotas(project_id, quotas):
     """Set resource quota for the given user."""
     raise aodh.NotImplementedError('Setting resource quota not '
                                    'implemented')
示例#16
0
 def get_quotas(project_id):
     """Get resource quota for the given project."""
     raise aodh.NotImplementedError('Getting resource quota not '
                                    'implemented')
示例#17
0
 def get_alarms(*args, **kwargs):
     """Yields a lists of alarms that match filters."""
     raise aodh.NotImplementedError('Alarms not implemented')