Przeglądaj źródła

完成提交任务搜索任务,跟随系统或使用代理池

mrh 9 miesięcy temu
rodzic
commit
4ca1876550

+ 7 - 2
ui/backend/src/services/celery_worker.py

@@ -33,7 +33,7 @@ class SearchTaskInput(BaseModel):
 
 class CrawlTaskParams(BaseModel):
     overwrite: Optional[bool] = False
-    proxy_pool: Optional[List[str]] = Field(default_factory=list)
+    proxy_pool_url: Optional[List[str]] = Field(default_factory=list)
 
 class ConvertTaskParams(BaseModel):
     result_ids: List[str] = Field(..., min_length=1)
@@ -55,8 +55,9 @@ class WorkerModel(BaseModel):
         return v    
     
 class CeleryWorker:
-    def __init__(self, python_exe: str=sys.executable):
+    def __init__(self, python_exe: str=sys.executable, config = config):
         self.python_exe = python_exe
+        self.config = config
         self.workers_model: Dict[str, WorkerModel] = {}
         self.redis_url = f"redis://{config.redis.host}:{config.redis.port}/{config.redis.db}"
         self.redis_client = redis.Redis(host=config.redis.host, port=config.redis.port, db=config.redis.db)
@@ -254,8 +255,12 @@ class CeleryWorker:
         # 根据worker类型验证任务数据
         if worker_name == 'search':
             task_model = SearchTaskInput(**data)
+            if select_proxy == 'pool':
+                task_model.config.proxy_pool_url = f"http://{self.config.backend.host}:{self.config.backend.port}/api/proxy/proxies-pool"
         elif worker_name == 'crawl':
             task_model = CrawlTaskParams(**data)
+            if select_proxy == 'pool':
+                task_model.proxy_pool_url = f"http://{self.config.backend.host}:{self.config.backend.port}/api/proxy/proxies-pool"
         elif worker_name == 'convert':
             task_model = ConvertTaskParams(**data)
         

+ 2 - 2
ui/fontend/src/components/Proxy.vue

@@ -3,7 +3,7 @@
     <el-row justify="center">
       <el-radio-group @change="proxy_change" v-model="proxy_choice">
         <el-radio value="system" @change="get_sys_proxy" border>系统</el-radio>
-        <el-radio value="poll" @change="get_sub_url" border>代理池</el-radio>
+        <el-radio value="pool" @change="get_sub_url" border>代理池</el-radio>
       </el-radio-group>
     </el-row>
 
@@ -26,7 +26,7 @@
   </div>
 </template>
 
-<script setup lang="ts">
+<script lang="ts" setup>
 import { ref, onMounted } from 'vue' // 确保导入onMounted
 import ProxyPool from './ProxyPool.vue'
 import { useProxyStore } from '../stores/proxyStore'

+ 8 - 2
ui/fontend/src/components/WorkerCtrl.vue

@@ -38,6 +38,12 @@
                 >
                   提交单个搜索任务
                 </el-button>
+                <el-button 
+                :disabled="!workerStatus.search || loadingStates.search"
+                @click="sendRequest('search', 'submit', true)"
+                >
+                  仅测试
+                </el-button>
               </el-row>
             </el-space>
           </el-card>
@@ -155,7 +161,7 @@ function stopPolling() {
 onMounted(() => startPolling())
 onUnmounted(() => stopPolling())
 
-const sendRequest = async (workerName: string, action: string) => {
+const sendRequest = async (workerName: string, action: string, dryRun: boolean = false) => {
   const loadingKey = workerName as keyof typeof loadingStates.value
   loadingStates.value[loadingKey] = true
 
@@ -176,7 +182,7 @@ const sendRequest = async (workerName: string, action: string) => {
               max_result_items: 200,
               skip_existing: true,
               browser_config: {},
-              dry_run: true
+              dry_run: dryRun
             }
           } : {}),
           ...(workerName === 'crawl' ? {

+ 1 - 1
utils/proxy_pool.py

@@ -3,7 +3,7 @@ from config.settings import PROXIES
 import httpx
 def get_proxy_pool(proxy_pool_url) -> list:
     res = httpx.get(proxy_pool_url)
-    return res.json()
+    return res.json().get("proxies")
 
 def get_random_proxy(proxy_pool_url: str=None) -> str:
     if proxy_pool_url:

+ 4 - 1
worker/celery/search_tasks.py

@@ -76,10 +76,13 @@ def drission_search_task(task_input: SearchTaskInput):
     async def _execute_search():
         try:
             # 使用配置模型的参数
+            logger.info(f"开始处理关键词搜索任务{"( dry_run 模式)" if config.dry_run else ""}: {input_model.keyword}")
             if config.proxy_pool_url:
                 proxy = await asyncio.to_thread(get_random_proxy, config.proxy_pool_url)
                 config.browser_config['proxy'] = proxy
-            logger.info(f"开始处理关键词搜索任务{"( dry_run 模式)" if config.dry_run else ""}: {input_model.keyword}")
+                logger.info(f"使用代理池: {config.proxy_pool_url}  -->  {proxy}")
+            else:
+                logger.info(f"使用代理: 跟随系统")
             logger.info(f"任务配置: {config.model_dump()}")
             if config.dry_run:
                 await asyncio.sleep(3)