Skip to content

JsResult 总览

JsResultjs-worker_run 的异步执行结果表。

一次 run 会先创建一条结果记录并返回 id,脚本执行完成后再回填该记录。

方法列表

方法名描述
query查询执行结果
delete删除执行结果

数据结构

JsResult 每条记录包含:

json
{
  "id": 1,
  // 记录 ID
  "js_worker_id": 10,
  // 关联的 JsWorker ID
  "js_worker_name": "demo_worker",
  // 关联的 JsWorker 名称
  "run_type": "call",
  // 执行类型
  "start_time": 1775000000000,
  // 毫秒时间戳,开始时间,运行前为 null
  "finish_time": 1775000000123,
  // 毫秒时间戳,结束时间,运行中为 null
  "param": {
    // 执行参数,可为 null
    "hello": "world"
  },
  "result": {
    // 执行结果,运行中或失败时为 null
    "ok": true
  },
  "error_message": null
  // 错误信息,成功或运行中时为 null
}

注意事项

  • resulterror_message 至少有一个会被回填。
  • 运行中状态定义为:result == null && error_message == null

查询条件

统一使用 JsResultQueryCondition,其为 Rust Enum,解析时请注意:

rust
#[serde(rename_all = "snake_case")]
pub enum JsResultQueryCondition {
    Id(i64),
    JsWorkerId(i64),
    JsWorkerName(String),
    RunType(String),
    StartTimeFromTo(i64, i64),
    StartTimeFrom(i64),
    StartTimeTo(i64),
    FinishTimeFromTo(i64, i64),
    FinishTimeFrom(i64),
    FinishTimeTo(i64),
    IsSuccess,
    IsFailure,
    IsRunning,
    Limit(u64),
    Last,
}

下面是一些解析的示例:

json
{
  "id": 1
}

{
  "js_worker_name": "demo_worker"
}

{
  "start_time_from_to": [
    1775000000000,
    1775000001000
  ]
}

{
  "start_time_from": 1775000000000
}

{
  "limit": 100
  // 依照 start_time 最新的 100 条
}

"last" // 对就是一个 `last`,无其他东西

"is_success" // 同理,无其他东西

"is_failure"

"is_running"

注意事项

start_time_from_to 字段可看作是 start_time_fromstart_time_to 的简略写法,下面的两种表达方式是等价的:

json
{
  "start_time_from_to": [
    1775000000000,
    1775000001000
  ]
}

[
  {
    "start_time_from": 1775000000000
  },
  {
    "start_time_to": 1775000001000
  }
]

finish_time_from_to 同理。

limit 为 1 与 last 等价,在数据库层面限制查询结果,按照时间倒序排列。

多个条件并存时,为 AND,即只查询满足所有条件的数据。

权限说明

JsResult 权限基于 Scope::JsWorker(String) 生效,支持后缀 * 通配符。

json
{
  "scopes": [
    {
      "js_worker": "demo_*"
    }
  ],
  "permissions": [
    {
      "js_result": {
        "read": "demo_*"
      }
    },
    {
      "js_result": {
        "delete": "demo_*"
      }
    }
  ]
}
  • read:可查询匹配脚本名的结果。
  • delete:可删除匹配脚本名的结果。