Quellcode durchsuchen

完成前后端代理自启动

mrh vor 9 Monaten
Ursprung
Commit
6eb2b4d8dc

+ 18 - 3
ui/backend/config.yaml

@@ -4,22 +4,37 @@ browser:
 mimo_exe: g:\code\upwork\zhang_crawl_bio\download\proxy_pool\mihomo-windows-amd64-go120.exe
 redis_exe: g:\code\upwork\zhang_crawl_bio\download\Redis-x64-5.0.14.1\redis-server.exe
 redis_port: null
+select_proxy: system
 sqluri: G:\code\upwork\zhang_crawl_bio\output\temp.db
 sub:
+  auto_start: true
   file: g:\code\upwork\zhang_crawl_bio\download\proxy_pool\6137e542.yaml
   proxies:
     9660:
       file_path: g:\code\upwork\zhang_crawl_bio\download\proxy_pool\temp\9660.yaml
-      name: "\U0001F1ED\U0001F1F0\u9999\u6E2F1\u53F7"
+      name: "\U0001F1ED\U0001F1F0\u9999\u6E2F2\u53F7"
       port: 9660
+      startup: true
     9662:
       file_path: g:\code\upwork\zhang_crawl_bio\download\proxy_pool\temp\9662.yaml
-      name: "\U0001F1EF\U0001F1F5\u4E9A\u9A6C\u900A\u65E5\u672C2"
+      name: "\u81EA\u52A8\u9009\u62E9"
       port: 9662
+      startup: true
     9664:
       file_path: g:\code\upwork\zhang_crawl_bio\download\proxy_pool\temp\9664.yaml
-      name: "\U0001F1F3\U0001F1F1\u8377\u5170\u4E13\u7EBF"
+      name: "\u81EA\u52A8\u9009\u62E9"
       port: 9664
+      startup: true
+    9666:
+      file_path: g:\code\upwork\zhang_crawl_bio\download\proxy_pool\temp\9666.yaml
+      name: "\u81EA\u52A8\u9009\u62E9"
+      port: 9666
+      startup: true
+    9668:
+      file_path: g:\code\upwork\zhang_crawl_bio\download\proxy_pool\temp\9668.yaml
+      name: "\u81EA\u52A8\u9009\u62E9"
+      port: 9668
+      startup: true
   start_port: 9660
   temp_dir: g:\code\upwork\zhang_crawl_bio\download\proxy_pool\temp
   url: https://www.yfjc.xyz/api/v1/client/subscribe?token=b74f2207492053926f7511a8e474048f

+ 2 - 1
ui/backend/main.py

@@ -4,7 +4,7 @@ import sys
 # 为了避免耦合,微服务,可能确实要将上级的上级目录作为一个单独的进程来处理,此目录作为一个单独的UI项目
 sys.path.append(str(Path(__file__).parent))
 from fastapi import FastAPI
-from routers.proxy import router, health_check_proxy_task 
+from routers.proxy import router, health_check_proxy_task,sub_mgr
 from routers.file import router as file_router
 from routers.worker import router as worker_router
 from fastapi.middleware.cors import CORSMiddleware
@@ -19,6 +19,7 @@ async def startup():
     tasks = []
     logger.info(f"startup")
     tasks.append(asyncio.create_task(CeleryWorker().run()))
+    tasks.append(asyncio.create_task(sub_mgr.startup()))
     # asyncio.create_task(health_check_proxy_task(interval=90))
     health_check_task_instance = asyncio.create_task(health_check_proxy_task(interval=90))
     tasks.append(health_check_task_instance)

+ 9 - 0
ui/backend/routers/proxy.py

@@ -13,6 +13,7 @@ from utils.config import Config, config, PROXY_POLL_DIR, Sub, Proxy
 from utils.process_mgr import process_manager
 from utils.logu import get_logger,logger
 from src.services.subscription_manager import SubscriptionManager
+from src.services.proxy_manager import ProxyManager
 
 sub_mgr = SubscriptionManager(config=config)
 proxy_lock = asyncio.Lock()  # 全局异步锁
@@ -221,6 +222,14 @@ async def create_subscription(request: SubUrlPost):
         return {"err": 1, "msg": str(e)}
 
 
+class StartupRequest(BaseModel):
+    auto_start: bool
+
+@router.post("/startup")
+async def startup(request: StartupRequest):
+    global sub_mgr,config
+    sub_mgr.save_startup(request.auto_start)
+    return {"err": 0, "msg": "ok", "data": config}
 
 def main():
     # 获取代理设置

+ 20 - 1
ui/backend/src/services/subscription_manager.py

@@ -7,6 +7,7 @@ from datetime import datetime
 from src.services.proxy_manager import ProxyManager
 from utils.config import PROXY_POLL_DIR,config,Sub,Proxy,Config
 from utils.mihomo import get_sub,update_config,save_yaml_dump,find_free_port
+from utils.logu import get_logger,logger
 
 class SubscriptionManager:
     """管理订阅的生命周期,包括下载、更新、启动、停止等操作"""
@@ -78,6 +79,7 @@ class SubscriptionManager:
         proxy:Proxy = self.sub.proxies.get(port)
         if not proxy:
             return False
+        proxy.startup = True
         self.list_proxies_mgr[port] = ProxyManager(self.config.mimo_exe, proxy.file_path)
         return await self.list_proxies_mgr[port].start_proxy()
     
@@ -88,6 +90,7 @@ class SubscriptionManager:
         proxy:Proxy = self.sub.proxies.get(port)
         if not proxy:
             return False
+        proxy.startup = False
         self.list_proxies_mgr[port] = ProxyManager(self.config.mimo_exe, proxy.file_path)
         return await self.list_proxies_mgr[port].stop_proxy()
 
@@ -121,4 +124,20 @@ class SubscriptionManager:
         return self.save_config()
     
     def get_proxy_manager(self, port: int) -> ProxyManager:
-        return self.list_proxies_mgr.get(port)
+        return self.list_proxies_mgr.get(port)
+    
+    def save_startup(self, auto_start: bool = False):
+        self.sub.auto_start = auto_start
+        for proxy in self.sub.proxies.values():
+            if self.get_proxy_manager(proxy.port).running:
+                proxy.startup = True
+        return self.save_config()
+    
+    async def startup(self):
+        if not self.sub.auto_start:
+            return
+        for proxy in self.sub.proxies.values():
+            if proxy.startup:
+                logger.info(f"{proxy.port} 自动启动")
+                self.select_proxy(proxy.port, proxy.name)
+                await self.start_proxy(proxy.port)

+ 2 - 1
ui/backend/utils/config.py

@@ -22,7 +22,8 @@ class Sub(AutoLoadModel):
     url: Optional[str] = None
     start_port: Optional[int] = 9660  # Changed to int
     file: Optional[str] = None
-    temp_dir: Optional[str] = str(PROXY_POLL_DIR / "temp")   
+    temp_dir: Optional[str] = str(PROXY_POLL_DIR / "temp")  
+    auto_start: Optional[bool] = True 
     proxies: Optional[Dict[Union[int,str], Proxy]] = {}
     def __init__(self, **data):
             super().__init__(**data)