def _common(self): (req,rsp,rheaders,rcookies) = common_init(self) pre_str = u'restoreTimer: ' rsp.set_status(200) loginfo(pre_str+u'start') max_num = MAX_RESTORE_NUM_PER_CYCLE last_id = req.get('last_id') flg_first = False if not last_id: set_maintenance_mode(True) flg_first = True timer_initialize() db_gc_list = dbGaeCronUser.all().order('date').fetch(max_num) cnt = 0 tcnt = 0 else: last_time = isofmt_to_datetime(req.get('last_time')) log(' last_id=%s' % (last_id)) log(' last_time=%s' % (req.get('last_time'))) db_gc_list = dbGaeCronUser.all().filter('date >=', last_time).order('date').fetch(max_num) cnt = int(req.get('cnt'),0) tcnt = int(req.get('tcnt'),0) gae_timer = GAE_Timer() set_timer = gae_timer.set_timer rel_timer = gae_timer.rel_timer for db_gc in db_gc_list: db_gc_id = str(db_gc.key().id()) if db_gc_id == last_id: continue cnt += 1 email = db_gc.email loginfo(u'%d: %s %s' % (cnt,email,db_gc.date)) cron_info_dict = json.loads(db_gc.croninfo) for (no,cron_info) in cron_info_dict.items(): tid = None if cron_info['valid']: timerid=u'%s-%s-%s' % (NAMESPACE,db_gc_id,str(no)) if cron_info['kind'] == 'cycle': tid = set_timer(minutes=cron_info['cycle_info']['cycle'],url=cron_info['url'],user_id=email,user_info=no,timerid=timerid,sem=False,save_after=True) else: _c = cron_info['cron_info'] _crontime = ' '.join([_c['min'],_c['hour'],_c['day'],_c['month'],_c['wday']]) tid = set_timer(crontime=_crontime,url=cron_info['url'],user_id=email,user_info=no,tz_hours=_c['tz_hours'],timerid=timerid,sem=False,save_after=True) if tid: tcnt += 1 loginfo(u' timer(No.%d) update (timerid=%s)' % (1+int(no),tid)) else: cron_info['valid'] = 0 logerr(u' timer(No.%d) set error' % (1+int(no))) cron_info['tid'] = tid db_gc.croninfo = db.Text(json.dumps(cron_info_dict)) dbPut(db_gc) last_id = db_gc_id last_time = db_gc.date if max_num<=len(db_gc_list): str_rsp = pre_str+u'continue' url=PATH_RESTORE_TIMER+'?last_id=%s&last_time=%s&cnt=%d&tcnt=%d' % (urllib.quote(last_id),urllib.quote(datetime_to_isofmt(last_time)),cnt,tcnt) log(u'call:"%s"' % (url)) for ci in range(3): try: taskqueue.add(url=url,method='GET',headers={'X-AppEngine-TaskRetryCount':0}) break except Exception, s: str_rsp = pre_str+u'taskqueue error: %s' % (str(s)) pass time.sleep(1)
str_rsp = pre_str+u'continue' url=PATH_RESTORE_TIMER+'?last_id=%s&last_time=%s&cnt=%d&tcnt=%d' % (urllib.quote(last_id),urllib.quote(datetime_to_isofmt(last_time)),cnt,tcnt) log(u'call:"%s"' % (url)) for ci in range(3): try: taskqueue.add(url=url,method='GET',headers={'X-AppEngine-TaskRetryCount':0}) break except Exception, s: str_rsp = pre_str+u'taskqueue error: %s' % (str(s)) pass time.sleep(1) else: str_rsp = pre_str+u'end' log('set timer (success) number=%d' % (tcnt)) reportServiceInfos() set_maintenance_mode(False) loginfo(str_rsp) if flg_first: return_url = req.get('return_url',PATH_TOP) if isinstance(return_url, unicode): return_url = return_url.encode('utf-8','ignore') self.redirect(return_url) else: rsp.headers['Content-Type'] = CONTENT_TYPE_PLAIN rsp.out.write(str_rsp) def get(self): self._common() def post(self): self._common()