def get_all(self, q=None, sort=None, limit=None, marker=None): """Return all alarms, based on the query provided. :param q: Filter rules for the alarms to be returned. :param sort: A list of pairs of sort key and sort dir. :param limit: The maximum number of items to be return. :param marker: The pagination query marker. """ target = rbac.target_from_segregation_rule(pecan.request.headers, pecan.request.enforcer) rbac.enforce('get_alarms', pecan.request.headers, pecan.request.enforcer, target) q = q or [] # Timestamp is not supported field for Simple Alarm queries kwargs = v2_utils.query_to_kwargs(q, pecan.request.storage.get_alarms, allow_timestamps=False) if sort or limit or marker: kwargs['pagination'] = v2_utils.get_pagination_options( sort, limit, marker, models.Alarm) return [ Alarm.from_db_model(m) for m in pecan.request.storage.get_alarms(**kwargs) ]
def get_all(self, q=None): """Return all alarms, based on the query provided. :param q: Filter rules for the alarms to be returned. """ target = rbac.target_from_segregation_rule( pecan.request.headers, pecan.request.enforcer) rbac.enforce('get_alarms', pecan.request.headers, pecan.request.enforcer, target) q = q or [] # Timestamp is not supported field for Simple Alarm queries kwargs = v2_utils.query_to_kwargs( q, pecan.request.storage.get_alarms, allow_timestamps=False) return [Alarm.from_db_model(m) for m in pecan.request.storage.get_alarms(**kwargs)]
def get_all(self, q=None, sort=None, limit=None, marker=None): """Return all alarms, based on the query provided. :param q: Filter rules for the alarms to be returned. :param sort: A list of pairs of sort key and sort dir. :param limit: The maximum number of items to be return. :param marker: The pagination query marker. """ target = rbac.target_from_segregation_rule(pecan.request.headers, pecan.request.enforcer) rbac.enforce("get_alarms", pecan.request.headers, pecan.request.enforcer, target) q = q or [] # Timestamp is not supported field for Simple Alarm queries kwargs = v2_utils.query_to_kwargs(q, pecan.request.storage.get_alarms, allow_timestamps=False) if sort or limit or marker: kwargs["pagination"] = v2_utils.get_pagination_options(sort, limit, marker, models.Alarm) return [Alarm.from_db_model(m) for m in pecan.request.storage.get_alarms(**kwargs)]
def post(self, body): """Define query for retrieving Alarm data. :param body: Query rules for the alarms to be returned. """ target = rbac.target_from_segregation_rule(pecan.request.headers, pecan.request.enforcer) rbac.enforce('query_alarm', pecan.request.headers, pecan.request.enforcer, target) query = ValidatedComplexQuery(body, models.Alarm) query.validate(visibility_field="project_id") conn = pecan.request.storage return [ alarms.Alarm.from_db_model(s) for s in conn.query_alarms( query.filter_expr, query.orderby, query.limit) ]
def post(self, body): """Define query for retrieving AlarmChange data. :param body: Query rules for the alarm history to be returned. """ target = rbac.target_from_segregation_rule( pecan.request.headers, pecan.request.enforcer) rbac.enforce('query_alarm_history', pecan.request.headers, pecan.request.enforcer, target) query = ValidatedComplexQuery(body, models.AlarmChange) query.validate(visibility_field="on_behalf_of") conn = pecan.request.storage return [alarms.AlarmChange.from_db_model(s) for s in conn.query_alarm_history(query.filter_expr, query.orderby, query.limit)]
def get_all(self, q=None): """Return all alarms, based on the query provided. :param q: Filter rules for the alarms to be returned. """ target = rbac.target_from_segregation_rule(pecan.request.headers, pecan.request.enforcer) rbac.enforce('get_alarms', pecan.request.headers, pecan.request.enforcer, target) q = q or [] # Timestamp is not supported field for Simple Alarm queries kwargs = v2_utils.query_to_kwargs( q, pecan.request.alarm_storage_conn.get_alarms, allow_timestamps=False) return [ Alarm.from_db_model(m) for m in pecan.request.alarm_storage_conn.get_alarms(**kwargs) ]
def history(self, q=None): """Assembles the alarm history requested. :param q: Filter rules for the changes to be described. """ target = rbac.target_from_segregation_rule( pecan.request.headers, pecan.request.enforcer) rbac.enforce('alarm_history', pecan.request.headers, pecan.request.enforcer, target) q = q or [] # allow history to be returned for deleted alarms, but scope changes # returned to those carried out on behalf of the auth'd tenant, to # avoid inappropriate cross-tenant visibility of alarm history auth_project = rbac.get_limited_to_project(pecan.request.headers, pecan.request.enforcer) conn = pecan.request.alarm_storage_conn kwargs = v2_utils.query_to_kwargs( q, conn.get_alarm_changes, ['on_behalf_of', 'alarm_id']) return [AlarmChange.from_db_model(ac) for ac in conn.get_alarm_changes(self._id, auth_project, **kwargs)]
def history(self, q=None): """Assembles the alarm history requested. :param q: Filter rules for the changes to be described. """ target = rbac.target_from_segregation_rule(pecan.request.headers, pecan.request.enforcer) rbac.enforce('alarm_history', pecan.request.headers, pecan.request.enforcer, target) q = q or [] # allow history to be returned for deleted alarms, but scope changes # returned to those carried out on behalf of the auth'd tenant, to # avoid inappropriate cross-tenant visibility of alarm history auth_project = rbac.get_limited_to_project(pecan.request.headers, pecan.request.enforcer) conn = pecan.request.alarm_storage_conn kwargs = v2_utils.query_to_kwargs(q, conn.get_alarm_changes, ['on_behalf_of', 'alarm_id']) return [ AlarmChange.from_db_model(ac) for ac in conn.get_alarm_changes(self._id, auth_project, **kwargs) ]
def get_all(self, q=None, sort=None, limit=None, marker=None): """Return all alarms, based on the query provided. :param q: Filter rules for the alarms to be returned. :param sort: A list of pairs of sort key and sort dir. :param limit: The maximum number of items to be return. :param marker: The pagination query marker. """ target = rbac.target_from_segregation_rule(pecan.request.headers, pecan.request.enforcer) rbac.enforce('get_alarms', pecan.request.headers, pecan.request.enforcer, target) q = q or [] filters = {} # Check field keys = set([query.field for query in q]) if not keys.issubset(ALARM_QUERY_FIELDS_ALLOWED): raise wsme.exc.InvalidInput( 'field', keys, 'only fields %s are allowed' % ALARM_QUERY_FIELDS_ALLOWED) # Check op ops = set([query.op for query in q]) if any([op not in ALARM_QUERY_OPS_ALLOWED for op in ops]): raise wsme.exc.InvalidInput( 'op', ops, 'only operations %s are allowed' % ALARM_QUERY_OPS_ALLOWED) if 'all_projects' in keys: if v2_utils.get_query_value(q, 'all_projects', 'boolean'): rbac.enforce('get_alarms:all_projects', pecan.request.headers, pecan.request.enforcer, target) keys.remove('all_projects') else: project_id = pecan.request.headers.get('X-Project-Id') is_admin = rbac.is_admin(pecan.request.headers) if not v2_utils.is_field_exist(q, 'project_id'): q.append( base.Query(field='project_id', op='eq', value=project_id)) keys.add('project_id') else: request_project = v2_utils.get_query_value(q, 'project_id') if not is_admin and request_project != project_id: raise base.ProjectNotAuthorized(request_project) for query in q: if query.field in keys: filters[query.field] = {query.op: query.get_value(query.type)} if sort or limit or marker: filters['pagination'] = v2_utils.get_pagination_options( sort, limit, marker, models.Alarm) LOG.debug('Getting alarms from database, filters: %s', filters) return [ Alarm.from_db_model_scrubbed(m) for m in pecan.request.storage.get_alarms(**filters) ]