コード例 #1
0
ファイル: gaecron.py プロジェクト: furyutei/GAE-Cron
 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)
コード例 #2
0
ファイル: gaecron.py プロジェクト: furyutei/GAE-Cron
     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()