Commit e1ce57fb by 刘豪

digikey 重试逻辑更改

parent 21c46dcb
Showing with 34 additions and 24 deletions
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import json
import time
import traceback
import redis
......@@ -54,16 +55,8 @@ class DGTokenCrawler(token_lib.BaseTokenCrawler):
def collect_token(self):
try:
token_json = self.get_token_by_refresh_token()
if not token_json.get('access_token', ''):
# dd_send_msg('digikey自动登录同步token')
# resp_data = self.get_token_json()
# if resp_data == False:
# mgs = "digikey 刷新token失败,请手动获取"
# dd_send_msg(mgs)
# self.logger.error(mgs)
# raise Exception(mgs)
# token_json = resp_data['data']
mgs = "digikey返回内容异常:{} 刷新token失败,请手动获取".format(json.dumps(token_json))
if token_json is None:
mgs = "digikey返回内容异常, 刷新token失败,请手动获取"
dd_send_msg(mgs)
self.logger.error(mgs)
raise Exception(mgs)
......@@ -73,6 +66,7 @@ class DGTokenCrawler(token_lib.BaseTokenCrawler):
dd_send_msg('digikey token同步失败:' + traceback.format_exc())
self.logger.error(traceback.format_exc())
def save_token_to_redis(self, token_json):
access_token, refresh_token = token_json['access_token'], token_json['refresh_token']
apidigikey_log.info("access_token:" + access_token)
......@@ -105,20 +99,36 @@ class DGTokenCrawler(token_lib.BaseTokenCrawler):
token_json = resp.json()
return token_json['access_token'], token_json['refresh_token']
@retry(tries=5, delay=30)
def get_token_by_refresh_token(self):
refresh_token = self._redis.get(self.refresh_token_key).decode()
p_data = {
'client_id': self.client_id,
'client_secret': self.client_secret,
'refresh_token': refresh_token,
# 'refresh_token': 'jwki255qAu14VPDGhuJKQVPHixiAGO1D',
'grant_type': 'refresh_token'
}
resp = requests.post(p_url, headers=p_headers, data=p_data, timeout=60)
self.logger.info("digikey token 返回内容:{}".format(resp.text))
token_json = resp.json()
return token_json
def get_token_by_refresh_token(self, count=1):
if count > 5:
# 最多重试5次
return None
self.logger.info("尝试获取token第{}次".format(count))
count += 1
try:
refresh_token = self._redis.get(self.refresh_token_key).decode()
p_data = {
'client_id': self.client_id,
'client_secret': self.client_secret,
'refresh_token': refresh_token,
'grant_type': 'refresh_token'
}
resp = requests.post(p_url, headers=p_headers, data=p_data, timeout=60)
self.logger.info("digikey token 返回内容:{}".format(resp.text))
token_json = resp.json()
if not token_json.get('access_token', ''):
self.logger.info("返回内容异常,休眠30s")
time.sleep(30)
# 说明digikey接口内容返回异常,尝试再次获取,不确定refresh_token经过一次请求后返回内容异常时是否失效,需观察,如果失效的话,那么重试就没有任何意义了
self.get_token_by_refresh_token(count)
else:
return token_json
except Exception:
# 通常是超时了,休眠1分钟后重新尝试获取,但是超时的报错不确定refresh_token是否就会因此失效,所以还得观察
self.logger.error("报错,休眠1分钟,{}".format(traceback.format_exc()))
time.sleep(60)
self.get_token_by_refresh_token(count)
def process(self, is_main):
self.collect_token()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment