liqian vor 2 Jahren
Ursprung
Commit
cc78d23a09
2 geänderte Dateien mit 62 neuen und 2 gelöschten Zeilen
  1. 61 1
      ess_instance_rov_server.py
  2. 1 1
      rov_server_config.py

+ 61 - 1
ess_instance_rov_server.py

@@ -3,6 +3,7 @@ import os
 import asyncio
 import logging
 import time
+import requests
 
 import utils
 import rov_server_config
@@ -14,6 +15,65 @@ health_instances = []
 ess_instances = []
 
 
+def rov_server_health_check(client, instance_id, max_wait_time=None):
+    """
+    服务健康检查
+    :param client: 客户端连接
+    :param instance_id: instanceId
+    :param max_wait_time: 最长等待时间,单位:s
+    :return:
+    """
+    global health_instances
+    start_time = time.time()
+    ip_address = utils.get_ip_address(client=client, instance_id=instance_id)
+    while True:
+        health_check_url = f"http://{ip_address}:5001/healthcheck"
+        try:
+            http_code = requests.get(health_check_url).status_code
+        except:
+            logging.info("images is downloading")
+            http_code = 0
+
+        if http_code == 200:
+            health_instances.append((instance_id, ip_address))
+            logging.info(f"health check success, instance: {instance_id}/{ip_address}")
+            break
+        elif max_wait_time is not None:
+            now = time.time()
+            if (now - start_time) >= max_wait_time:
+                logging.info(f"health check error, instance: {instance_id}/{ip_address}")
+                break
+            else:
+                time.sleep(10)
+        else:
+            time.sleep(10)
+
+
+def server_health_check(client, instance_id):
+    """
+    服务健康检查
+    :param client: 客户端连接
+    :param instance_id: instanceId
+    :return:
+    """
+    global health_instances
+    ip_address = utils.get_ip_address(client=client, instance_id=instance_id)
+    while True:
+        health_check_url = f"http://{ip_address}:5001/healthcheck"
+        try:
+            http_code = requests.get(health_check_url).status_code
+        except:
+            logging.info("images is downloading")
+            http_code = 0
+
+        if http_code == 200:
+            health_instances.append((instance_id, ip_address))
+            break
+        else:
+            # time.sleep(20)
+            await asyncio.sleep(10)
+
+
 async def ess_instance(create_client, slb_client, ess_count, max_workers):
     """
     扩容机器并运行新服务
@@ -45,7 +105,7 @@ async def ess_instance(create_client, slb_client, ess_count, max_workers):
     loop = asyncio.get_running_loop()
     executor = ThreadPoolExecutor(max_workers=max_workers)
     tasks = [
-        loop.run_in_executor(executor, utils.rov_server_health_check, *args) for args in
+        loop.run_in_executor(executor, rov_server_health_check, *args) for args in
         [(slb_client, instance_id, max_wait_time) for instance_id in ess_instance_ids]
     ]
     await asyncio.wait(tasks)

+ 1 - 1
rov_server_config.py

@@ -48,4 +48,4 @@ start_sh = {
     'target_dir': '/home/piaoquan_server_sh',
     'name': start_sh_filename,
     'content': file_content,
-}
+}