任务管理API

​ Mixtask 是Mixiot 任务管理服务,是一个任务管理与执行器。Mixtask 以 Lua 程序脚本方式建立不同的可执行任务,提供 Mixiot 其他应用服务调用执行。

​ Mixtask 服务除了Lua 基本语法逻辑、还定义Mixiot相关命令函数,支持实现mixiot相关操作。

Action

创建任务

参数

参数名称 是否必选 数据类型 数据约束 描述
action String create_task 方法名
actionid String 请求标识
uid String 最多64个字符,唯一 自定义唯一标识,不填则系统生成
name String 最多64个字符 名称,显示名称
description String 最多255个字符 描述
script String 脚本
onlyone int 只能0/1 任务是否只可同时运行一个,默认为0,不限定
reference String 最多64个字符 参考号

示例

{
    "action":"create_task",
    "actionid": "2021-06-09",
    "uid": "test",
    "name": "测试",
    "description": "测试",
    "script": "\nlocal log = require(\"log\")\nlocal json = require(\"json\")\nlocal http = require(\"http\")\nlocal math = require(\"math\")\nlocal exmath = require(\"exmath\")\nlog.info('test log')\na = {1,2,3,4.5}\nlog.info(exmath.max(a))\nlog.info(exmath.min(a))\nlog.info(exmath.sum(a))\nlog.info(exmath.average(a))\nlog.info(exmath.var(a))\nlog.info(exmath.std(a))\n  \nresponse, error_message = http.post(\"http://192.168.88.88:31507/apiproxy/api\", {\n\tbody='{\"action\":\"get_object_list\"}'\n})\nprint(response[\"body\"],error_message)\n\nprint(a,math.pi)\nmath.randomseed(os.time())\na=math.random(100)\nprint(data)\nlog.info(data)\nlog.info(data[\"data\"])\n\t",
    "onlyone":1,
    "reference": ""
}

响应

{
    "resp": "create_task",
    "actionid": "2021-06-09",
    "code": 200,
    "msg": "成功",
    "result": {
        "uid": "test",
        "name": "测试"
    }
}

更新任务

参数

参数名称 是否必选 数据类型 数据约束 描述
action String update_task 方法名
actionid String 请求标识
uid String 最多64个字符,唯一 自定义唯一标识
name String 最多64个字符 名称,显示名称
description String 最多255个字符 描述
script String 脚本
onlyone int 只能0/1 任务是否只可同时运行一个,默认为0,不限定
reference String 最多64个字符 参考号

示例

{
    "action":"update_task",
    "actionid": "2021-06-09",
    "uid": "TASK1691200100005",
    "name": "关机任务",
    "description": "指定设备进行远程关机",
    "script": "",
    "onlyone":0,
    "reference": ""
}

响应

{
    "resp": "update_task",
    "actionid": "2021-06-09",
    "code": 200,
    "msg": "成功",
    "result": {
        "uid": "TASK1691200100005",
        "name": "关机任务"
    }
}

删除任务

参数

参数名称 是否必选 数据类型 数据约束 描述
action String delete_task 方法名
actionid String 请求标识
uid String 最多64个字符,唯一 任务编号

示例

{
    "action":"delete_task",
    "actionid": "2021-06-09",
    "uid": "TASK1691200100005"
}

响应

{
    "resp": "delete_task",
    "actionid": "2021-06-09",
    "code": 200,
    "msg": "成功",
    "result": {
        "uid": "TASK1691200100005"
    }
}

获取任务记录

参数

参数名称 是否必选 数据类型 数据约束 描述
action String get_task_item 方法名
actionid String 请求标识
uid String 最多64个字符,唯一 任务编号

示例

{
    "action":"get_task_item",
    "actionid": "2021-06-09",
    "uid": "ccc"
}

响应

{
    "resp": "get_task_item",
    "actionid": "2021-06-09",
    "code": 200,
    "msg": "成功",
    "result": {
        "uid": "ccc",
        "name": "ccc",
        "description": "test",
        "script": "\nlocal log = require(\"log\")\nlocal json = require(\"json\")\nlocal http = require(\"http\")\nlocal math = require(\"math\")\nlocal exmath = require(\"exmath\")\nlog.info('test log')\na = {1,2,3,4.5}\nlog.info(exmath.max(a))\nlog.info(exmath.min(a))\nlog.info(exmath.sum(a))\nlog.info(exmath.average(a))\nlog.info(exmath.var(a))\nlog.info(exmath.std(a))\n  \nresponse, error_message = http.post(\"http://192.168.88.88:31507/apiproxy/api\", {\n\tbody='{\"action\":\"get_object_list\"}'\n})\nprint(response[\"body\"],error_message)\n\nprint(a,math.pi)\nmath.randomseed(os.time())\na=math.random(100)\nprint(data)\nlog.info(data)\nlog.info(data[\"data\"])\n\t",
        "onlyone":1,
        "checksum": "337a26e20b76d064bed31101151b8d65",
        "token": "f95abbe6-4e11-05ce-ac4d-de1f7d60d236",
        "reference": "",
        "created": "2021-07-12 15:54:38",
        "created_by": "",
        "last_modified": "",
        "last_modified_by": ""
    }
}

获取任务列表

参数

参数名称 是否必选 数据类型 数据约束 描述
action String get_task_list 方法名
actionid String 请求标识

示例

{
    "action":"get_task_list",
    "actionid": "2021-06-09",
}

响应

{
    "resp": "get_task_list",
    "actionid": "2021-06-09",
    "code": 200,
    "msg": "成功",
    "result": [
        {
            "uid": "ccc",
            "name": "ccc",
            "description": "test",
            "script": "\nlocal log = require(\"log\")\nlocal json = require(\"json\")\nlocal http = require(\"http\")\nlocal math = require(\"math\")\nlocal exmath = require(\"exmath\")\nlog.info('test log')\na = {1,2,3,4.5}\nlog.info(exmath.max(a))\nlog.info(exmath.min(a))\nlog.info(exmath.sum(a))\nlog.info(exmath.average(a))\nlog.info(exmath.var(a))\nlog.info(exmath.std(a))\n  \nresponse, error_message = http.post(\"http://192.168.88.88:31507/apiproxy/api\", {\n\tbody='{\"action\":\"get_object_list\"}'\n})\nprint(response[\"body\"],error_message)\n\nprint(a,math.pi)\nmath.randomseed(os.time())\na=math.random(100)\nprint(data)\nlog.info(data)\nlog.info(data[\"data\"])\n\t",
            "onlyone":1,
            "checksum": "337a26e20b76d064bed31101151b8d65",
            "token": "f95abbe6-4e11-05ce-ac4d-de1f7d60d236",
            "reference": "",
            "created": "2021-07-12 15:54:38",
            "created_by": "",
            "last_modified": "",
            "last_modified_by": ""
        },
        {
            "uid": "test",
            "name": "测试",
            "description": "测试",
            "script": "\nlocal log = require(\"log\")\nlocal json = require(\"json\")\nlocal http = require(\"http\")\nlocal math = require(\"math\")\nlocal exmath = require(\"exmath\")\nlog.info('test log')\na = {1,2,3,4.5}\nlog.info(exmath.max(a))\nlog.info(exmath.min(a))\nlog.info(exmath.sum(a))\nlog.info(exmath.average(a))\nlog.info(exmath.var(a))\nlog.info(exmath.std(a))\n  \nresponse, error_message = http.post(\"http://192.168.88.88:31507/apiproxy/api\", {\n\tbody='{\"action\":\"get_object_list\"}'\n})\nprint(response[\"body\"],error_message)\n\nprint(a,math.pi)\nmath.randomseed(os.time())\na=math.random(100)\nprint(data)\nlog.info(data)\nlog.info(data[\"data\"])\n\t",
            "onlyone":1,
            "checksum": "337a26e20b76d064bed31101151b8d65",
            "token": "7b3aa44f-4b34-b652-b856-e862389c87f2",
            "reference": "",
            "created": "2021-07-12 17:27:21",
            "created_by": "",
            "last_modified": "",
            "last_modified_by": ""
        }
    ]
}

校验脚本(新版本支持)

该接口实现对 Lua脚本的语法检验(解析器检验),如添加、编辑任务 先编辑校验再保存。

参数

参数名称 是否必选 数据类型 数据约束 描述
action String check_script 方法名
actionid String 请求标识
script String 脚本

示例

{
    "action":"check_script",
    "actionid": "2021-06-09",
    "script": ""
}

响应

{
    "resp": "check_script",
    "actionid": "2021-06-09",
    "code": 200,
    "msg": "成功",
    "result": {
        "checkrule": 1,
        "message": "检查成功"
    }
}

更新令牌

更新任务的 Token

参数

参数名称 是否必选 数据类型 数据约束 描述
action String update_token 方法名
actionid String 请求标识
uid String 任务编号

示例

{
    "action":"update_token",
    "actionid": "2021-06-09",
    "uid": "ccc"
}

响应

{
    "resp": "update_token",
    "actionid": "2021-06-09",
    "code": 200,
    "msg": "成功",
    "result": {
        "token": "c2fb4aca-c115-5a3f-353b-f93b7db81c44",
        "uid": "ccc"
    }
}

执行任务

参数

参数名称 是否必选 数据类型 数据约束 描述
action String exec_task 方法名
actionid String 请求标识
uid String 最多64个字符,唯一 任务编号
args json 参数列表
source String 最多64个字符 调用来源,如workflow
token String 任务校验令牌

示例

{
 "action":"exec_task",
 "actionid": "2021-06-09",
 "uid":"ccc",
 "args":{"data":"aaa"},
 "source":"aaaaa",
 "token":"5c00c2c9-2a29-971e-bb7f-8b4476f63446"
}

响应

{
    "resp": "exec_task",
    "actionid": "2021-06-09",
    "code": 200,
    "msg": "成功",
    "result": {
        "uid": "RECORD1725270300001"
    }
}

获取执行任务结果

参数

参数名称 是否必选 数据类型 数据约束 描述
action String get_record_item 方法名
actionid String 请求标识
uid String 执行任务的编号

示例

{
    "action": "get_exec_record_item",
    "actionid": "2021-06-09",
    "uid": "RECORD1725270300001"
}

响应

{
    "resp": "get_exec_record_item",
    "actionid": "2021-06-09",
    "code": 200,
    "msg": "成功",
    "result": {
        "uid": "RECORD1725270300001",
        "task_id": "ccc",
        "source": "aaaaa",
        "ip": "",
        "args": {
            "data": "aaa"
        },
        "script": "\nlocal log = require(\"log\")\nlocal json = require(\"json\")\nlocal http = require(\"http\")\nlocal math = require(\"math\")\nlocal exmath = require(\"exmath\")\nlog.info('test log')\na = {1,2,3,4.5}\nlog.info(exmath.max(a))\nlog.info(exmath.min(a))\nlog.info(exmath.sum(a))\nlog.info(exmath.average(a))\nlog.info(exmath.var(a))\nlog.info(exmath.std(a))\n  \nresponse, error_message = http.post(\"http://192.168.88.88:31507/apiproxy/api\", {\n\tbody='{\"action\":\"get_object_list\"}'\n})\nprint(response[\"body\"],error_message)\n\nprint(a,math.pi)\nmath.randomseed(os.time())\na=math.random(100)\nprint(data)\nlog.info(data)\nlog.info(data[\"data\"])\n\t",
        "exec_time": "2021-07-12 18:00:53",
        "code": "200",
        "message": "",
        "is_finish": 0,
        "reference": "",
        "last_modified": "2021-07-12 18:00:54"
    }
}

获取执行任务结果列表

参数

参数名称 是否必选 数据类型 数据约束 描述
action String get_record_list 方法名
actionid String 请求标识
uid String 最多64个字符,唯一 任务编号

示例

{
    "action": "get_record_list",
    "actionid": "2021-06-09",
    "uid": "ccc"
}

响应

{
    "resp": "get_record_list",
    "actionid": "2021-06-09",
    "code": 200,
    "msg": "成功",
    "result": [
        {
            "uid": "RECORD1725270300001",
            "task_id": "ccc",
            "source": "aaaaa",
            "ip": "",
            "args": {
                "data": "aaa"
            },
            "script": "\nlocal log = require(\"log\")\nlocal json = require(\"json\")\nlocal http = require(\"http\")\nlocal math = require(\"math\")\nlocal exmath = require(\"exmath\")\nlog.info('test log')\na = {1,2,3,4.5}\nlog.info(exmath.max(a))\nlog.info(exmath.min(a))\nlog.info(exmath.sum(a))\nlog.info(exmath.average(a))\nlog.info(exmath.var(a))\nlog.info(exmath.std(a))\n  \nresponse, error_message = http.post(\"http://192.168.88.88:31507/apiproxy/api\", {\n\tbody='{\"action\":\"get_object_list\"}'\n})\nprint(response[\"body\"],error_message)\n\nprint(a,math.pi)\nmath.randomseed(os.time())\na=math.random(100)\nprint(data)\nlog.info(data)\nlog.info(data[\"data\"])\n\t",
            "exec_time": "2021-07-12 18:00:53",
            "code": "200",
            "message": "",
            "is_finish": 0,
            "reference": "",
            "last_modified": "2021-07-12 18:00:54"
        }
    ]
}

停止执行任务

参数

参数名称 是否必选 数据类型 数据约束 描述
action String stop_task 方法名
actionid String 请求标识
uid String 最多64个字符,唯一 执行任务的编号

示例

{
    "action": "stop_task",
    "actionid": "2021-06-09",
    "uid": "RECORD1794925800001"
}

响应

{
    "resp": "stop_task",
    "actionid": "2021-06-09",
    "code": 200,
    "msg": "成功",
    "result": {}
}

获取执行任务日志信息(ws/tcp,不支持http)

参数

参数名称 是否必选 数据类型 数据约束 描述
action String exec_log 方法名
actionid String 请求标识
uid String 最多64个字符,唯一 执行任务的编号

示例

{
    "action": "sub_task_log",
    "actionid": "2021-06-09",
    "uid": "RECORD1794925800001"
}

响应

{
    "resp": "sub_task_log",
    "actionid": "2021-06-09",
    "code": 200,
    "msg": "成功",
    "result": {}
}

调试脚本(新版本支持)

建立tcp长连接通道,调试查看脚本执行记录(类似cli通道)

参数

参数名称 是否必选 数据类型 数据约束 描述
action String dubug_script 方法名
actionid String 请求标识
uid String 最多64个字符,唯一 任务编号
args json 参数列表

示例

{
    "action":"dubug_script",
    "actionid": "2021-06-09",
    "uid": "TASK1691200100005",
    "args": {}
}

响应

{
    "resp": "dubug_script",
    "actionid": "2021-06-09",
    "code": 200,
    "msg": "成功",
    "result": {}
}

Lua自定义函数

在使用之前使用require引用该模块

Http

API

http.get(url [, options])

参数

名称 类型 描述
url String 请求url
options Table 可选项

可选项

名称 类型 描述
query String URL编码的查询参数
cookies Table 附加cookies
headers Table 附加headers
timeout Number/String 请求超时。秒数或字符串,如”1h”

返回值

http.response or (nil, error message)

用例

    local http = require("http")
    response,error_message = http.get("https://baidu.com")
    print(error_message,response["body"])

http.post(url [, options])

参数

名称 类型 描述
url String 请求url
options Table 可选项

可选项

名称 类型 描述
query String URL编码的查询参数
cookies Table 附加cookies
body String 请求体
form String 弃用。URL编码的请求体。 需要设置请求header Content-Typeapplication/x-www-form-urlencoded
headers Table 附加headers
timeout Number/String 请求超时。秒数或字符串,如”1h”

返回值

http.response or (nil, error message)

用例

local http = require("http")
local json = require("json")

token_response = http.post("http://192.168.88.87/http/user/login", {form="username=admin&password=Mix@pwd"})
response, error_message = http.post("http://192.168.88.88:31507/apiproxy/api", {
    body='{"action":"get_object_list"}',
    headers={
                ["Content-Type"]="application/json",
                ["Authorization"]="Bearer " .. json.decode(token_response["body"])["result"]["token"]
            }
})
print(error_message,response["body"])

http.request(method, url [, options])

参数

名称 类型 描述
method String 请求方法
url String 请求url
options Table 可选项

可选项

名称 类型 描述
query String URL编码的查询参数
cookies Table 附加cookies
body String 请求体
form String 弃用。URL编码的请求体。 需要设置请求header Content-Typeapplication/x-www-form-urlencoded
headers Table 附加headers
timeout Number/String 请求超时。秒数或字符串,如”1h”

返回值

http.response or (nil, error message)

5.1.4http.response

包含关于已完成的HTTP请求的响应信息

参数

名称 类型 描述
body String 响应体
body_size Number 响应体的大小(以字节为单位)
headers Table 响应headers
cookies Table 响应cookies
status_code Number 响应状态码
url String 请求在重定向后指向的最终URL

JSON

API

json.encode(data)

将值编码为JSON字符串。如果无法对值进行编码,则返回nil和错误字符串。

参数

名称 类型 描述
data Table 将表转换为JSON字符串

返回值

JSON string or (nil, error message)

用例

    local json = require("json")
    data='{"username": "admin", "password": "Mix@pwd", "action": "login"}'
    print(json.encode(data) ) --"{\"username\": \"admin\", \"password\": \"Mix@pwd\", \"action\": \"login\"}"

json.decode(data)

解码JSON字符串。如果无法对值进行解码,则返回nil和错误字符串。

参数

名称 类型 描述
data String 解码到JSON表的JSON字符串

返回值

table or (nil, error message)

用例

    local json = require("json")
    data='{"username": "admin", "password": "Mix@pwd", "action": "login"}'
    print(json.decode(json.encode(data))) --{"username": "admin", "password": "Mix@pwd", "action": "login"}

Log

API

log.info(data)

运行脚本的日志。需要将日志等级调整为7,需要在配置文件中设置log::level为7,或者调用action:{“action”:”set_log_level”,”level”:7}
如果需要写入文件,需要在配置文件中设置log::file::enable为true
如果需要页面可视化,需要在apiproxy中进行转发

参数

名称 类型 描述
data any 输出数据

用例

    local log = require("log")
    log.info("test",1) --日志输出test 1

Exmath

API

exmath.max(data)

输入数据中的最大值

参数

名称 类型 描述
data Table 以列表形式输入的数据

返回值

Number

用例

    local exmath = require("exmath")
    data = {1,2,3,4.5}
    print(exmath.max(data)) --4.5

exmath.min(data)

输入数据中的最小值

参数

名称 类型 描述
data Table 以列表形式输入的数据

返回值

Number

用例

    local exmath = require("exmath")
    data = {1,2,3,4.5}
    print(exmath.min(data)) --1

exmath.sum(data)

所有输入数据的和

参数

名称 类型 描述
data Table 以列表形式输入的数据

返回值

Number

用例

    local exmath = require("exmath")
    data = {1,2,3,4.5}
    print(exmath.sum(data)) --10.5

exmath.average(data)

所有输入数据的平均值

参数

名称 类型 描述
data Table 以列表形式输入的数据

返回值

Number

用例

    local exmath = require("exmath")
    data = {1,2,3,4.5}
    print(exmath.average(data)) --2.625

exmath.var(data)

输入数据的总体标准偏差的方差

参数

名称 类型 描述
data Table 以列表形式输入的数据

返回值

Number

用例

    local exmath = require("exmath")
    data = {1,2,3,4.5}
    print(exmath.var(data)) --1.671875

exmath.std(data)

输入数据的总体标准偏差

参数

名称 类型 描述
data Table 以列表形式输入的数据

返回值

Number

用例

    local exmath = require("exmath")
    data = {1,2,3,4.5}
    print(exmath.std(data)) --1.2930100540985752

global_channel

支持单程序内部多个协程运行状态下的 Lua 脚本,使用全局 chan 进行交互的功能

包括:

global_channel.create(name,n)

参数

名称 类型 描述
name string chan名称
n int chan长度

返回值

名称 类型 描述
ok bool 创建成功或者失败

用例

local global_channel = require("global_channel")

ok = global_channel.create("test",10)
print(ok) --true。程序内部首次创建chan,成功

ok = global_channel.create("test",10)
print(ok) --false。已经创建过chan,失败

global_channel.destroy(name)

参数

名称 类型 描述
name string chan名称

返回值

名称 类型 描述
ok bool 销毁成功或者失败

用例

    local global_channel = require("global_channel")

    ok = global_channel.create("test",10)
    print(ok) --true。程序内部首次创建chan,成功

    ok =global_channel.destroy("test")
    print(ok) --true。销毁成功

    ok =global_channel.destroy("test")
    print(ok) --false。未存在名为test的chan,销毁失败

global_channel.getllist()

参数

返回值

名称 类型 描述
list table 当前程序内部创建的通道情况

用例

local global_channel = require("global_channel")
local json = require("json")

print(json.encode(global_channel.getlist())) --{}。未有任何通道和数据

ok = global_channel.create("test",10)
print(ok) --true。创建成功
print(json.encode(global_channel.getlist())) --{"test":0}。有一个通道,且当前数据量为0

ok = global_channel.push("test",123456)
print(ok) --true。chan存在,写入成功
print(json.encode(global_channel.getlist())) --{"test":1}。有一个通道,且当前数据量为1

global_channel.push(name,data)

参数

名称 类型 描述
name string chan名称
data any 数据

返回值

名称 类型 描述
ok bool 写入成功或者失败

用例

    local global_channel = require("global_channel")
    ok = global_channel.create("test",1)
    print(ok) --true。程序内部首次创建,成功

    ok = global_channel.push("test",123456)
    print(ok) --true。chan存在,写入成功

    ok = global_channel.push("test",789)
    print(ok) --false。chan存在,超出长度,写入失败,丢弃数据

    ok = global_channel.push("test1",123456)
    print(ok) --false。chan不存在,写入失败,丢弃数据

global_channel.pop(name)

参数

名称 类型 描述
name string chan名称

返回值

名称 类型 描述
data any 数据
n int 当前剩余数据长度
ok bool 获取数据成功或者失败

用例

    local global_channel = require("global_channel")
    ok = global_channel.create("test",10)
    print(ok) --true。程序内部首次创建,成功

    ok = global_channel.push("test",123456)
    print(ok) --true。chan存在,写入成功

    data,n,ok = global_channel.pop("test")
    print(data,n,ok) -- 123456,0,true。返回数据

    data,n,ok = global_channel.pop("test")
    print(data,n,ok) -- nil,0,false。没有数据,chan不存在或者当前chan没有数据

    data,n,ok = global_channel.pop("test1")
    print(data,n,ok) -- nil,0,false。没有数据,chan不存在或者当前chan没有数据

简单示例

第一个Lua脚本执行发送函数

local global_channel = require("global_channel") --引用全局chan
global_channel.create("test",1) --定义名称为test,长度为1的chan
global_channel.push("test",123456) -- 往名为test的chan发送数据:123456

第二个Lua脚本执行接收函数

local global_channel = require("global_channel") --引用全局chan
data,n,ok = global_channel.pop("test") --从名为test的chan中接收数据
print(data,n,ok) -- 123456,0,true。返回数据

global_channel.destroy("test") --销毁名为test的chan

注意事项

  • 1.如果未使用 destroy 销毁 chan,可能会带来内存泄露问题。
  • 2.chan 定义长度过大或者数据量过大,可能会带来的内存不足问题。
文档更新时间: 2024-08-09 16:06   作者:Mixiot