From 00aac960e09e35ecb69f1e93e91b58325d34093b Mon Sep 17 00:00:00 2001 From: filesite Date: Sat, 13 Apr 2024 07:49:06 +0800 Subject: [PATCH] check bot status before save task data --- heroUnion.mjs | 4 ++++ router_api.mjs | 48 +++++++++++++++++++++++++---------------- test/heroUnion.test.mjs | 2 +- 3 files changed, 34 insertions(+), 20 deletions(-) diff --git a/heroUnion.mjs b/heroUnion.mjs index 7ff3a06..69570d0 100644 --- a/heroUnion.mjs +++ b/heroUnion.mjs @@ -543,6 +543,10 @@ class HeroUnion { return this.heros.slice(start, end); } + getHeroByName(bot_name) { + return this.heros.find((item) => item.name == bot_name); + } + //初始化 async init() { await this.getConfig(); diff --git a/router_api.mjs b/router_api.mjs index 51046b7..0189be1 100644 --- a/router_api.mjs +++ b/router_api.mjs @@ -243,29 +243,39 @@ router.post('/savetask/', async (req, res) => { data.message = '任务编号task_id格式错误,请使用接口/api/gettask/返回数据里的任务id属性值'; } - //签名检查,如果通过则保存任务数据 - let task = heroUnion.getTaskById(task_id); - if (task) { - let paramsCheck = { - name: name, - task_id: task_id, - task_result: task_result - }; + //检查爬虫是否存在及其状态 + if (!data.message) { + let heroBot = heroUnion.getHeroByName(name); + if (!heroBot || heroBot.status == 'offline') { + data.message = `爬虫${name}不存在或已下线`; + } + } - let mySign = common.sign(paramsCheck, task.token); - if (mySign.toLowerCase() != sign.toLowerCase()) { - data.message = `签名 ${sign} 不匹配,请确保token正确及签名方法跟文档一致`; - }else { - let saved = heroUnion.saveTaskById(name, task_id, task_result); - if (saved) { - data.code = 1; - data.message = '保存任务数据完成'; + //签名检查,如果通过则保存任务数据 + if (!data.message) { + let task = heroUnion.getTaskById(task_id); + if (task) { + let paramsCheck = { + name: name, + task_id: task_id, + task_result: task_result + }; + + let mySign = common.sign(paramsCheck, task.token); + if (mySign.toLowerCase() != sign.toLowerCase()) { + data.message = `签名 ${sign} 不匹配,请确保token正确及签名方法跟文档一致`; }else { - data.message = `任务${task_id}已经完成,请勿重复提交数据`; + let saved = heroUnion.saveTaskById(name, task_id, task_result); + if (saved) { + data.code = 1; + data.message = '保存任务数据完成'; + }else { + data.message = `任务${task_id}已经完成,请勿重复提交数据`; + } } + }else { + data.message = `任务${task_id}不存在`; } - }else { - data.message = `任务${task_id}不存在`; } return res.status(200).json(data); diff --git a/test/heroUnion.test.mjs b/test/heroUnion.test.mjs index 5567206..71589f1 100644 --- a/test/heroUnion.test.mjs +++ b/test/heroUnion.test.mjs @@ -199,7 +199,7 @@ test('HeroUnion task data save test', async (t) => { api = 'http://127.0.0.1:8080/api/savetask/'; params = { - name: "heroDemo", + name: "test_hero", task_id: task.id, task_result: task_data };