dan92 commited on
Commit
0d6acf3
·
verified ·
1 Parent(s): ddf5e2a

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +32 -6
app.py CHANGED
@@ -34,12 +34,28 @@ CORS(app, resources={r"/*": {"origins": "*"}})
34
  executor = ThreadPoolExecutor(max_workers=10)
35
 
36
  proxy_url = os.getenv('PROXY_URL')
37
- NOTDIAMOND_IP = os.getenv('NOTDIAMOND_IP')
38
  NOTDIAMOND_DOMAIN = os.getenv('NOTDIAMOND_DOMAIN')
 
 
 
39
 
40
- if not NOTDIAMOND_IP:
41
- logger.error("NOTDIAMOND_IP environment variable is not set!")
42
- raise ValueError("NOTDIAMOND_IP must be set")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43
 
44
  refresh_token_cache = TTLCache(maxsize=1000, ttl=3600)
45
  headers_cache = TTLCache(maxsize=1, ttl=3600) # 1小时过期
@@ -49,8 +65,9 @@ token_refresh_lock = threading.Lock()
49
  def patched_create_connection(address, *args, **kwargs):
50
  host, port = address
51
  if host == NOTDIAMOND_DOMAIN:
52
- logger.info(f"Connecting to {NOTDIAMOND_DOMAIN} using IP: {NOTDIAMOND_IP}")
53
- return create_connection((NOTDIAMOND_IP, port), *args, **kwargs)
 
54
  return create_connection(address, *args, **kwargs)
55
 
56
  # 替换 urllib3 的默认连接函数
@@ -664,6 +681,15 @@ def health_check():
664
  if current_time.tm_hour == 0 and current_time.tm_min == 0:
665
  multi_auth_manager.reset_all_model_status()
666
  logger.info("Reset model status for all accounts")
 
 
 
 
 
 
 
 
 
667
  except Exception as e:
668
  logger.error(f"Health check error: {e}")
669
  time.sleep(60) # 每分钟检查一次
 
34
  executor = ThreadPoolExecutor(max_workers=10)
35
 
36
  proxy_url = os.getenv('PROXY_URL')
 
37
  NOTDIAMOND_DOMAIN = os.getenv('NOTDIAMOND_DOMAIN')
38
+ if not NOTDIAMOND_DOMAIN:
39
+ logger.error("NOTDIAMOND_DOMAIN environment variable is not set!")
40
+ raise ValueError("NOTDIAMOND_DOMAIN must be set")
41
 
42
+ # 动态IP缓存,设置1小时过期
43
+ ip_cache = TTLCache(maxsize=1, ttl=3600)
44
+ ip_refresh_lock = threading.Lock()
45
+
46
+ def get_current_ip():
47
+ """动态获取当前域名对应的IP地址"""
48
+ try:
49
+ with ip_refresh_lock:
50
+ if 'current_ip' not in ip_cache:
51
+ logger.info(f"Resolving IP for domain: {NOTDIAMOND_DOMAIN}")
52
+ ip = socket.gethostbyname(NOTDIAMOND_DOMAIN)
53
+ ip_cache['current_ip'] = ip
54
+ logger.info(f"Successfully resolved IP: {ip}")
55
+ return ip_cache['current_ip']
56
+ except socket.gaierror as e:
57
+ logger.error(f"DNS resolution failed for {NOTDIAMOND_DOMAIN}: {e}")
58
+ raise Exception(f"Failed to resolve IP for {NOTDIAMOND_DOMAIN}")
59
 
60
  refresh_token_cache = TTLCache(maxsize=1000, ttl=3600)
61
  headers_cache = TTLCache(maxsize=1, ttl=3600) # 1小时过期
 
65
  def patched_create_connection(address, *args, **kwargs):
66
  host, port = address
67
  if host == NOTDIAMOND_DOMAIN:
68
+ current_ip = get_current_ip()
69
+ logger.info(f"Connecting to {NOTDIAMOND_DOMAIN} using IP: {current_ip}")
70
+ return create_connection((current_ip, port), *args, **kwargs)
71
  return create_connection(address, *args, **kwargs)
72
 
73
  # 替换 urllib3 的默认连接函数
 
681
  if current_time.tm_hour == 0 and current_time.tm_min == 0:
682
  multi_auth_manager.reset_all_model_status()
683
  logger.info("Reset model status for all accounts")
684
+
685
+ # 每小时刷新一次IP缓存
686
+ if current_time.tm_min == 0:
687
+ try:
688
+ ip_cache.clear()
689
+ logger.info("Cleared IP cache for periodic refresh")
690
+ except Exception as e:
691
+ logger.error(f"Error clearing IP cache: {e}")
692
+
693
  except Exception as e:
694
  logger.error(f"Health check error: {e}")
695
  time.sleep(60) # 每分钟检查一次