agent

1. API 设计概览

  1. 调试/立即执行/一次性执行任务,调用 RPC 接口
  2. 周期执行并永久保存的代码,存储到指定文件夹中
  3. 任务信息,包括任务主体、执行周期和回显方式

以下是 API 的设计和相关 JSON 配置示例:

1.1 创建/更新任务

POST /api/v1/task

创建或更新一个任务,包含代码、执行周期、回显方式等信息。

请求参数 (JSON)

{
  "task_id": "string",               // 任务的唯一标识符 (可选,更新任务时必填)
  "task_name": "string",             // 任务名称
  "code": "string",                  // 任务代码,支持多行
  "schedule": "string",              // 执行周期,例如:"0 0 * * *" (cron 表达式) 或 "immediate" (立即执行)
  "echo_mode": "string",             // 回显方式,可选值: "tcp", "webhook"
  "echo_target": "string",           // 回显目标 (对于 "tcp" 是地址,"webhook" 是 URL)
  "task_type": "string",             // 任务类型,可选值: "immediate" (立即执行), "periodic" (周期性执行)
  "file_path": "string"              // 存储任务代码的文件路径 (对于周期性任务使用)
}

响应 (JSON)

{
  "status": "string",                // 请求处理状态,"success" 或 "error"
  "message": "string",               // 处理结果消息
  "task_id": "string"                // 新任务或更新任务的唯一标识符
}

1.2 执行任务

POST /api/v1/task/execute

立即执行一个任务,传入任务的 task_id,支持一次性执行的任务。

请求参数 (JSON)

{
  "task_id": "string"  // 要执行的任务 ID
}

响应 (JSON)

{
  "status": "string",        // 请求处理状态,"success" 或 "error"
  "message": "string",       // 执行结果消息
  "result": "string"         // 执行回显结果 (如果有)
}

1.3 获取任务信息

GET /api/v1/task/{task_id}

获取任务的详细信息。

请求参数 (无)

响应 (JSON)

{
  "task_id": "string",
  "task_name": "string",
  "code": "string",
  "schedule": "string",
  "echo_mode": "string",
  "echo_target": "string",
  "task_type": "string",
  "file_path": "string",
  "last_execution": "string",  // 最后一次执行时间
  "next_execution": "string"   // 下次执行时间
}

1.4 删除任务

DELETE /api/v1/task/{task_id}

删除一个任务。

请求参数 (无)

响应 (JSON)

{
  "status": "string",   // 请求处理状态,"success" 或 "error"
  "message": "string"   // 处理结果消息
}

2. JSON 配置示例

2.1 创建一个周期性任务

例如,创建一个每小时执行一次的任务,并通过 Webhook 回显结果:

{
  "task_name": "Hourly Task",
  "code": "console.log('Hello, world!');",
  "schedule": "0 * * * *",  // 每小时执行一次
  "echo_mode": "webhook",   // 使用 webhook 回显
  "echo_target": "https://example.com/webhook",  // 回显的目标 URL
  "task_type": "periodic",  // 周期性任务
  "file_path": "/path/to/save/task/code.js"  // 存储任务代码的路径
}

2.2 创建一个立即执行的任务

例如,创建一个立即执行并通过 TCP 回显的任务:

{
  "task_name": "Immediate Task",
  "code": "console.log('Task executed immediately!');",
  "schedule": "immediate",   // 立即执行
  "echo_mode": "tcp",        // 使用 TCP 回显
  "echo_target": "tcp://localhost:8080",  // 回显的 TCP 地址
  "task_type": "immediate",  // 立即执行任务
  "file_path": ""            // 不需要存储文件路径
}

3. 设计考虑与说明

  1. 任务唯一标识符 (task_id): task_id 是任务的唯一标识符,创建任务时可以由系统自动生成。更新任务时,必须传入 task_id。
  2. 执行周期 (schedule): 支持 cron 表达式来定义周期性任务。例如,"0 * * * *" 表示每小时执行一次。 "immediate" 表示立即执行一次任务。
  3. 回显方式 (echo_mode): 支持 tcp 和 webhook 两种回显方式。 对于 tcp,需要提供回显的目标 TCP 地址。 对于 webhook,需要提供回显的 URL。
  4. 任务存储 (file_path): 对于周期性任务,可以指定存储任务代码的文件路径。任务代码会被存储在该路径下,以便定期执行。
  5. 任务类型 (task_type): 支持 "immediate"(立即执行)和 "periodic"(周期性执行)任务。

通过这种方式,你可以灵活管理任务,执行周期任务并回显执行结果,同时也可以调试并立即执行任务。

二、scheduler

周期任务和一次性任务的调度

三、worker

接受scheduler的需求,具体执行任务

四、notify

根据api、配置文件中的配置,对结果进行推送,直接通过长连接或者push到配置的webhook;  

文章标签:

评论(0)