예제 #1
0
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)]
예제 #2
0
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()
예제 #3
0
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()
예제 #4
0
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)
    ]
예제 #5
0
 def __init__(self):
     self.br = BofhdRequests(db, const)
     self.eq = EntityQuarantine(db)
예제 #6
0
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