示例#1
0
class ReserveShell(object):
    def __init__(self):
        self.sess = get_session()
        self.logger = settings.logging.getLogger('reserveshell')
        self.remote_api = RemoteAPI(username=settings.REMOTE_USERNAME,
                                    password=settings.REMOTE_PASSWORD)

    def run(self, rule_id=None):
        filter = None
        if rule_id is not None:
            filter = (Rule.id == rule_id)
        rules = Rule.get(filter, sess=self.sess)
        self.logger.info('There are %d rules.' % len(rules))

        for rule in rules:
            self.reserve_by_rule(rule)

    def reserve_by_rule(self, rule):
        self.logger.info('processing rule: id %s' % rule.id)

        filter = and_(Program.rule_id == None, rule.conditions.make_filter())
        programs = Program.get_reservable(filter, sess=self.sess)
        self.logger.info('%d program(s) to reserve found' % len(programs))
        for program in programs:
            if self.remote_api.reserve(crid=program.crid):
                self.logger.info('reservation succeeded: crid %s' % program.crid)
                program.reserve_by = rule
                self.sess.add(program)
                self.sess.commit()
                self.logger.info('update program data: reserved_by = %s' % rule.id)
            else:
                self.logger.info('reservation failed: crid %s' % program.crid)
示例#2
0
 def __init__(self):
     self.sess = get_session()
     self.logger = settings.logging.getLogger('reserveshell')
     self.remote_api = RemoteAPI(username=settings.REMOTE_USERNAME,
                                 password=settings.REMOTE_PASSWORD)