def get_quarantines(db, quarantine_types=None): """List quarantines. :param db: Database-object. :param quarantine_types: Quarantine-types to filter by. :return list(<dict()>): List of quarantines.""" from Cerebrum.Entity import EntityQuarantine eq = EntityQuarantine(db) return [row.dict() for row in eq.list_entity_quarantines(quarantine_types=quarantine_types)]
def get_quarantines(db, quarantine_types): """List quarantines. :param db: Database-object. :param quarantine_types: Quarantine-types to filter by. :param iterable quarantines: An iterable with quarantine db rows. :return iterable: An iterable with quarantine db rows. """ eq = EntityQuarantine(db) for row in eq.list_entity_quarantines(quarantine_types=quarantine_types): yield row.dict()
def get_quarantines(db, quarantine_types=None): """List quarantines. :param db: Database-object. :param quarantine_types: Quarantine-types to filter by. :return list(<dict()>): List of quarantines.""" from Cerebrum.Entity import EntityQuarantine eq = EntityQuarantine(db) return [ row.dict() for row in eq.list_entity_quarantines( quarantine_types=quarantine_types) ]
def __init__(self): self.br = BofhdRequests(db, const) self.eq = EntityQuarantine(db)
class Quarantine2Request(EvtHandler): """When a quarantine has been added/updated/deleted, we register a bofh_quarantine_refresh bofhd_request on the apropriate start_date, end_date and disable_until dates. """ def __init__(self): self.br = BofhdRequests(db, const) self.eq = EntityQuarantine(db) def get_triggers(self): return ("quarantine_add", "quarantine_mod", "quarantine_del") def _get_quarantine(self, entity_id, q_type): self.eq.clear() try: self.eq.find(entity_id) except Errors.NotFoundError: return None qdata = self.eq.get_entity_quarantine(q_type) if not qdata: return None return qdata[0] def notify_quarantine_add(self, evt, params): # Register a bofh_quarantine_refresh on start, end and # disable_date qdata = self._get_quarantine(evt['subject_entity'], params['q_type']) if not qdata: return True for when in ('start_date', 'end_date', 'disable_until'): if qdata[when] is not None: self.br.add_request(None, qdata[when], const.bofh_quarantine_refresh, evt['subject_entity'], None, state_data=int(params['q_type'])) db.commit() return True def notify_quarantine_mod(self, evt, params): # Currently only disable_until is affected by quarantine_mod. qdata = self._get_quarantine(evt['subject_entity'], params['q_type']) if not qdata: return True if qdata['disable_until']: self.br.add_request(None, qdata['disable_until'], const.bofh_quarantine_refresh, evt['subject_entity'], None, state_data=int(params['q_type'])) self.br.add_request(None, self.br.now, const.bofh_quarantine_refresh, evt['subject_entity'], None, state_data=int(params['q_type'])) db.commit() return True def notify_quarantine_del(self, evt, params): # Remove existing requests for this entity_id/quarantine_type # combination as they are no longer needed for row in self.br.get_requests( entity_id=evt['subject_entity'], operation=int(const.bofh_quarantine_refresh)): if int(row['state_data']) == int(params['q_type']): self.br.delete_request(request_id=row['request_id']) self.br.add_request(None, self.br.now, const.bofh_quarantine_refresh, evt['subject_entity'], None, state_data=int(params['q_type'])) db.commit() return True