# PureLinux
## JOB STAUS
```go
const (
JOB_NEW JOB_STATUS = `new` // 新的 Job
JOB_RUNNING JOB_STATUS = `running` // 正在執行 Job
JOB_DONE JOB_STATUS = `done` // 已完成 Job
JOB_PAUSE JOB_STATUS = `pause` // 暫停的 Job
JOB_FAILED JOB_STATUS = `failed` // 失敗的 Job (算完成的一種
)
```
## sendCLI (Embd)
### Note
> compList = stage
> 沒有做到的 task status --
> code 每個都要各自表示的意思,default value 不同
### Input Data
```json
{
"devID": "8D6785", // 裝置 ID
// 一個二維陣列,單台 embd 通常用 [1][cmd length]
"CLICommands": [
[
{
"devID": "8D6785", // 裝置 ID
"refReturn": {}, // 要將此 cmd 的回傳參數帶入下個 cmd 使用
"refParam": {}, // 要拿取上個 cmd 執行完的結果當作參數
"param": {
"uuid": "Jydisi-WimS-8Wm7-FQOc-vVuf-GUfI-qEq4te",
"size": 1025
},
"key": "lvmExpand",
"devType": "raid" // 不重要照填即可,已經棄用可忽略
}
]
],
devType: "raid", // 不重要照填即可,已經棄用可忽略
estimatedTime: 10, // 不重要照填即可,已經棄用可忽略
templateID: "none" // 不重要照填即可,已經棄用可忽略
}
```
### Old Job Respone
::: spoiler 成功的範例
```json=
{
"esPercent": 84,
"msgArray": [
{
"msg": "[\"0x06170146\",[]]",
"dataArray": [
{
"performance": "mid",
"protection": "",
"media": "mid"
}
],
"code": "0x06170146",
"status": "success"
}
],
"currStepTask": 1,
"totalSteps": 1,
"progress": 0,
"step": 1,
"compList": [
{
"msg": "[\"0x06170146\",[]]",
"msgObj": {
"isFSS": true,
"data": [
{
"performance": "mid",
"protection": "",
"media": "mid"
}
],
"msgList": [
{
"code": "0x06170146",
"message": "0x06170146",
"params": []
}
]
},
"code": "0x06170146",
"taskList": [
{
"msgObj": {
"isFSS": true,
"data": [
{
"performance": "mid",
"protection": "",
"media": "mid"
}
],
"msgList": [
{
"code": "0x06170146",
"message": "0x06170146",
"params": []
}
]
},
"status": "success"
}
],
"status": "success"
}
],
"templateID": "none",
"currStepTotalTasks": 1,
"status": "done"
}
```
:::
::: spoiler 失敗的範例
```json=
{
"esPercent": 2,
"msgArray": [
{
"msg": "[\"0xFFF00004\",[]]",
"dataArray": [],
"code": "0x00040000",
"status": "failed"
}
],
"currStepTask": 1,
"totalSteps": 1,
"progress": 0,
"step": 1,
"compList": [
{
"msg": "",
"msgObj": {
"isFSS": true,
"data": [],
"msgList": [
{
"code": "0x00040000",
"message": "0xFFF00004",
"params": []
}
]
},
"code": "0x00000000",
"taskList": [
{
"msgObj": {
"isFSS": true,
"data": [],
"msgList": [
{
"code": "0x00040000",
"message": "0xFFF00004",
"params": []
}
]
},
"status": "failed"
}
],
"status": "failed"
}
],
"templateID": "none",
"currStepTotalTasks": 1,
"status": "failed"
}
```
:::
### Old Job with struct
```go=
type oldJobResult struct {
EsPercent int `json:"esPercent"` // i don't know
MsgArray []msgArray `json:"msgArray"`
CurrStepTask int `json:"currStepTask"`
TotalSteps int `json:"totalSteps"`
Progress int `json:"progress"` // not use ?
Step int `json:"step"` // not use ?
CompList []compList `json:"compList"`
TemplateID string `json:"templateID"` // not use ?
CurrStepTotalTasks int `json:"currStepTotalTasks"` // i don't know
Status string `json:"status"`
}
type msgArray struct {
Msg string `json:"msg"` // compose [returnCode.code, returnCode.Params]
Code string `json:"code"` // NASCLI cliCode.Return || returnCode.code
Status string `json:"status"`
DataArray []*simplejson.Json `json:"dataArray"` // NASCLI data
}
type compList struct {
Msg string `json:"msg"` // compose [returnCode.code, returnCode.Params]
MsgObj msgObj `json:"msgObj,omitempty"`
Code string `json:"code"` // not sure, sometime will use cliCode.Return/returnCode.code/0x0000
TaskList []taskList `json:"taskList"`
Status string `json:"status"`
}
type msgObj struct {
IsFss bool `json:"isFss"` // always true
Data []*simplejson.Json `json:"data"` // NASCLI data
MsgList []msgList `json:"msgList"`
}
type msgList struct {
Code string `json:"code"` // NASCLI cliCode.Return || returnCode.code
Message string `json:"message"` // NASCLI (cliCode.Return || returnCode.code)? to lang
Param *simplejson.Json `json:"params"` // NASCLI returnCode.Params
}
```
### Compare
使用相同 cmd 在不同台下的 job result
:::spoiler EonOne
```json=
{
"esPercent": 5,
"msgArray": [
{
"msg": "[\"general_output_successful\",[]]",
"dataArray": [
{
"clear_text_password": false,
"server_name": "nas-8739448-a",
"login_message": "",
"enabled": false
}
],
"code": "0x00000000",
"status": "success"
}
],
"currStepTask": 1,
"totalSteps": 1,
"progress": 0,
"step": 1,
"compList": [
{
"msg": "[\"general_output_successful\",[]]",
"msgObj": {
"isFSS": true,
"data": [
{
"clear_text_password": false,
"server_name": "nas-8739448-a",
"login_message": "",
"enabled": false
}
],
"msgList": [
{
"code": "0x00000000",
"message": "general_output_successful",
"params": []
}
]
},
"code": "0x00000000",
"taskList": [
{
"msgObj": {
"isFSS": true,
"data": [
{
"clear_text_password": false,
"server_name": "nas-8739448-a",
"login_message": "",
"enabled": false
}
],
"msgList": [
{
"code": "0x00000000",
"message": "general_output_successful",
"params": []
}
]
},
"status": "success"
}
],
"status": "success"
}
],
"templateID": "none",
"currStepTotalTasks": 1,
"status": "done"
}
```
:::
:::spoiler PureLinux (getCLIExecutorStatus)
```json=
{
"esPercent": 100,
"msgArray": [
{
"msg": "[\"0x0000\",{}]",
"code": "0x0000",
"status": "success",
"dataArray": [
{
"$controller$": "SlotB",
"clear_text_password": false,
"enabled": false,
"login_message": "",
"server_name": "ks-9267075"
},
{
"$controller$": "SlotA",
"clear_text_password": false,
"enabled": false,
"login_message": "",
"server_name": "ks-9267075"
}
]
}
],
"currStepTask": 1,
"totalSteps": 1,
"progress": 100,
"step": 1,
"compList": [
{
"msg": "[\"0x0000\",{}]",
"msgObj": {
"isFss": true,
"data": [
{
"$controller$": "SlotB",
"clear_text_password": false,
"enabled": false,
"login_message": "",
"server_name": "ks-9267075"
},
{
"$controller$": "SlotA",
"clear_text_password": false,
"enabled": false,
"login_message": "",
"server_name": "ks-9267075"
}
],
"msgList": [
{
"code": "0x0000",
"message": "0x0000",
"params": {}
}
]
},
"code": "0x0000",
"taskList": [
{
"msgObj": {
"isFss": true,
"data": [
{
"$controller$": "SlotB",
"clear_text_password": false,
"enabled": false,
"login_message": "",
"server_name": "ks-9267075"
},
{
"$controller$": "SlotA",
"clear_text_password": false,
"enabled": false,
"login_message": "",
"server_name": "ks-9267075"
}
],
"msgList": [
{
"code": "0x0000",
"message": "0x0000",
"params": {}
}
]
},
"status": "success"
}
],
"status": "success"
}
],
"templateID": "none",
"currStepTotalTasks": 1,
"status": "done"
}
```
:::
:::spoiler PureLinux (getJob)
跟上面不同的測試,單純補充格式
```json=
{
"currentTask": 1,
"err": [],
"result": [
[
{
"cliCode": {
"Return": "0x0000",
"CLI": "Successful"
},
"returnCode": [],
"data": []
}
]
],
"status": "done",
"totalTask": 1
}
```
:::
---
## sendParallel
### Note
> 有一堆還沒有辦法實作的欄位
> 像是 device busy 的錯誤訊息並不通用
> 以及部分還未實作的功能欄位 e.x. revert
::: spoiler Device busy reponse (Old)
```jsonld=
{
"revertObjects": [
{
"Stage 6760E-0": {
"success": true,
"jobs": {}
}
}
],
"objects": [
{
"Stage 64DC9-0": {
"executeByJobManagerException": {
"currentCommamdIndex": 0,
"subCommandObject": {
"devID": "64DC9",
"param": {
"a": "",
"slot": "slotA"
},
"refReturn": {},
"key": "fssOssV2KeyDel"
},
"Exception": "Can not find job from jobmanager by jobID: ''. deviceBusy: true",
"threadName": "CLIParallelForDevice_unsetStageKey_Stage_64DC9-0_11",
"isSuccess": false
}
},
"Stage 6760E-0": {
"14e095e3-78c2-430a-9bff-ce4200761431": {
"JobStatus": "failed",
"JobStdOutput": {
"dataArray": [],
"code": "0x00040000",
"message": "0xFFF00004",
"params": []
},
"Severity": "stop all stages",
"isConnectionFailed": false,
"JobCompList": [
{
"msgObj": {
"dataArray": [],
"isFSS": true,
"msgs": [
{
"msg": "0xFFF00004",
"code": "0x00040000",
"params": []
}
]
},
"code": "0x00000000",
"success": false,
"devIDForTask": [
"64DC9"
],
"taskList": [
{
"devID": "64DC9",
"msgObj": {
"dataArray": [],
"isFSS": true,
"msgs": [
{
"msg": "0xFFF00004",
"code": "0x00040000",
"params": []
}
]
},
"refParam": {},
"success": false,
"cmdParam": {
"a": "",
"slot": "slotA"
},
"ignoreFail": false,
"failed": true,
"cmdKey": "fssOssV2KeyDel",
"config": {},
"refReturn": {},
"status": "failed"
}
],
"failed": true,
"message": "",
"status": "failed"
}
],
"isSuccess": false
}
}
}
],
"isRevertSuccess": true,
"isConnectionFailed": false,
"status": "error"
}
```
:::
### Old Respone
::: spoiler 範例 (I/O)
```jsonld=
{
"CommandSetKey": "parallelV2",
"devType": "raid",
"redirectEmbeddedDevId": null,
"CLICommands":
[
{
"stageKey": "syncCommand",
"command":
{
"64DC9":
[
{
"key": "setControllerDate",
"devID": "64DC9",
"param":
{
"yyyyMMdd": "20230815",
"hhmmss": "102400"
}
}
]
}
},
{
"stageKey": "setAllNodes",
"command":
{
"6760E":
[
{
"key": "setControllerParm",
"devID": "6760E",
"param":
{
"sntpIp": "172.26.112.63",
"sntpPoll": "1"
},
"refReturn":
{},
"refParam":
{}
},
{
"key": "showCheckNTP",
"devID": "6760E",
"param":
{
"ip": "172.26.112.63"
},
"option":
{}
}
]
}
}
]
}
```
```jsonld=
{
"revertObjects": [],
"objects": [
{
"Stage 64DC9-0": {
"2aed59ed-63a4-40e2-a347-fe25a1f4542e": {
"JobStatus": "done",
"JobStdOutput": {
"dataArray": [],
"code": "0x00000000",
"message": "general_output_successful",
"params": []
},
"JobCompList": [
{
"msgObj": {
"dataArray": [],
"isFSS": false,
"msgs": [
{
"msg": "general_output_successful",
"code": "0x00000000",
"params": []
}
]
},
"code": "0x00000000",
"success": true,
"devIDForTask": [
"64DC9"
],
"taskList": [
{
"devID": "64DC9",
"msgObj": {
"dataArray": [],
"isFSS": false,
"msgs": [
{
"msg": "general_output_successful",
"code": "0x00000000",
"params": []
}
]
},
"refParam": {},
"cmdParam": {
"hhmmss": "102400",
"yyyyMMdd": "20230815"
},
"ignoreFail": false,
"success": true,
"failed": false,
"cmdKey": "setControllerDate",
"config": {},
"refReturn": {},
"status": "success"
}
],
"failed": false,
"message": "",
"status": "success"
}
],
"isSuccess": true
}
}
},
{
"Stage 6760E-1": {
"29667923-b2e6-4495-bff3-108f1c7a7823": {
"JobStatus": "done",
"JobStdOutput": {
"dataArray": [],
"code": "0x00000000",
"message": "general_output_successful",
"params": []
},
"JobCompList": [
{
"msgObj": {
"dataArray": [],
"isFSS": false,
"msgs": [
{
"msg": "general_output_successful",
"code": "0x00000000",
"params": []
}
]
},
"code": "0x00000000",
"success": true,
"devIDForTask": [
"6760E"
],
"taskList": [
{
"devID": "6760E",
"msgObj": {
"dataArray": [],
"isFSS": false,
"msgs": [
{
"msg": "general_output_successful",
"code": "0x00000000",
"params": []
}
]
},
"refParam": {},
"cmdParam": {
"sntpPoll": "1",
"sntpIp": "172.26.112.63"
},
"ignoreFail": false,
"success": true,
"failed": false,
"cmdKey": "setControllerParm",
"config": {},
"refReturn": {},
"status": "success"
}
],
"failed": false,
"message": "",
"status": "success"
}
],
"isSuccess": true
},
"420ece78-263c-4d34-aa54-d7975c52b0cb": {
"JobStatus": "done",
"JobStdOutput": {
"dataArray": [
{
"Status": "Success"
}
],
"code": "0x00000000",
"message": "general_output_successful",
"params": []
},
"JobCompList": [
{
"msgObj": {
"dataArray": [
{
"Status": "Success"
}
],
"isFSS": false,
"msgs": [
{
"msg": "general_output_successful",
"code": "0x00000000",
"params": []
}
],
"dataObj": {
"Status": "Success"
}
},
"code": "0x00000000",
"success": true,
"devIDForTask": [
"6760E"
],
"taskList": [
{
"devID": "6760E",
"msgObj": {
"dataArray": [
{
"Status": "Success"
}
],
"isFSS": false,
"msgs": [
{
"msg": "general_output_successful",
"code": "0x00000000",
"params": []
}
],
"dataObj": {
"Status": "Success"
}
},
"refParam": {},
"cmdParam": {
"ip": "172.26.112.63"
},
"ignoreFail": false,
"success": true,
"failed": false,
"cmdKey": "showCheckNTP",
"config": {},
"refReturn": {},
"status": "success"
}
],
"failed": false,
"message": "[\"general_output_successful\",[]]",
"status": "success"
}
],
"isSuccess": true
}
}
}
],
"isRevertSuccess": true,
"isConnectionFailed": false,
"status": "success"
}
```
:::
### New Respone
::: spoiler grpc respone error
```jsonld=
{
"revertObjects":
[],
"objects":
[
{
"8D6783":
{
"abc_8D6783":
{
"JobStatus": "failed",
"JobStdOutput":
[
{
"message": "0xffff",
"code": "0xffff",
"params":
[],
"dataArray": null
}
],
"JobCompList":
[
{
"msgObj":
{
"isFSS": true,
"dataArray": null,
"msgs":
[
{
"msg": "0xffff",
"code": "0xffff",
"params":
[]
}
]
},
"code": "",
"message": "",
"devIDForTask":
[
"8D6783"
],
"taskList":
[
{
"devID": "8D6783",
"msgObj":
{
"isFSS": true,
"dataArray": null,
"msgs":
[
{
"msg": "0xffff",
"code": "0xffff",
"params":
[]
}
]
},
"success": false,
"failed": true,
"status": "failed"
}
],
"success": false,
"failed": true,
"status": "failed"
}
],
"isSuccess": false
}
},
"index": 0,
"stage": "abc"
}
],
"isRevertSuccess": true,
"isConnectionFailed": false,
"status": "failed"
}
```
:::
::: spoiler Succesful (2個相同 stage 同台)
```jsonld=
{
"revertObjects":
[],
"objects":
[
{
"8D6783":
{
"abc_8D6783_0":
{
"JobStatus": "done",
"JobStdOutput":
[
{
"message": "0x0000",
"code": "0x0000",
"params":
[],
"dataArray":
[
{
"$controller$": "SlotB",
"version": "2.3.155"
},
{
"$controller$": "SlotA",
"version": "2.3.155"
}
]
}
],
"JobCompList":
[
{
"msgObj":
{
"isFSS": true,
"dataArray":
[
{
"$controller$": "SlotB",
"version": "2.3.155"
},
{
"$controller$": "SlotA",
"version": "2.3.155"
}
],
"msgs":
[
{
"msg": "0x0000",
"code": "0x0000",
"params":
[]
}
]
},
"code": "",
"message": "",
"devIDForTask":
[
"8D6783"
],
"taskList":
[
{
"devID": "8D6783",
"msgObj":
{
"isFSS": true,
"dataArray":
[
{
"$controller$": "SlotB",
"version": "2.3.155"
},
{
"$controller$": "SlotA",
"version": "2.3.155"
}
],
"msgs":
[
{
"msg": "0x0000",
"code": "0x0000",
"params":
[]
}
]
},
"success": true,
"failed": false,
"status": "success"
}
],
"success": true,
"failed": false,
"status": "success"
}
],
"isSuccess": true
}
}
},
{
"8D6783":
{
"abc2_8D6783_1":
{
"JobStatus": "done",
"JobStdOutput":
[
{
"message": "0x0000",
"code": "0x0000",
"params":
[],
"dataArray":
[
{
"$controller$": "SlotB",
"version": "2.3.155"
},
{
"$controller$": "SlotA",
"version": "2.3.155"
}
]
}
],
"JobCompList":
[
{
"msgObj":
{
"isFSS": true,
"dataArray":
[
{
"$controller$": "SlotB",
"version": "2.3.155"
},
{
"$controller$": "SlotA",
"version": "2.3.155"
}
],
"msgs":
[
{
"msg": "0x0000",
"code": "0x0000",
"params":
[]
}
]
},
"code": "",
"message": "",
"devIDForTask":
[
"8D6783"
],
"taskList":
[
{
"devID": "8D6783",
"msgObj":
{
"isFSS": true,
"dataArray":
[
{
"$controller$": "SlotB",
"version": "2.3.155"
},
{
"$controller$": "SlotA",
"version": "2.3.155"
}
],
"msgs":
[
{
"msg": "0x0000",
"code": "0x0000",
"params":
[]
}
]
},
"success": true,
"failed": false,
"status": "success"
}
],
"success": true,
"failed": false,
"status": "success"
}
],
"isSuccess": true
}
}
}
],
"isRevertSuccess": true,
"isConnectionFailed": false,
"status": "success"
}
```
:::
:::spoiler GRPC success
```jsonld=
{
"revertObjects":
[],
"objects":
[
{
"8D6783":
{
"stage1_8D6783_0":
{
"JobStatus": "done",
"JobStdOutput":
[
{
"message": "0x0000",
"code": "0x0000",
"params":
[],
"dataArray":
[
{
"$controller$": "SlotB",
"version": "2.3.155"
},
{
"$controller$": "SlotA",
"version": "2.3.155"
}
]
}
],
"JobCompList":
[
{
"msgObj":
{
"isFSS": true,
"dataArray":
[
{
"$controller$": "SlotB",
"version": "2.3.155"
},
{
"$controller$": "SlotA",
"version": "2.3.155"
}
],
"msgs":
[
{
"msg": "0x0000",
"code": "0x0000",
"params":
[]
}
]
},
"code": "",
"message": "",
"devIDForTask":
[
"8D6783"
],
"taskList":
[
{
"devID": "8D6783",
"msgObj":
{
"isFSS": true,
"dataArray":
[
{
"$controller$": "SlotB",
"version": "2.3.155"
},
{
"$controller$": "SlotA",
"version": "2.3.155"
}
],
"msgs":
[
{
"msg": "0x0000",
"code": "0x0000",
"params":
[]
}
]
},
"success": true,
"failed": false,
"status": "success"
}
],
"success": true,
"failed": false,
"status": "success"
}
],
"isSuccess": true
}
},
"remote":
{
"stage1_remote_0":
{
"JobStatus": "done",
"JobStdOutput":
[
{
"message": "0x0000",
"code": "0x0000",
"params":
[],
"dataArray":
[
{
"$controller$": "SlotB",
"version": "2.3.155"
},
{
"$controller$": "SlotA",
"version": "2.3.155"
}
]
}
],
"JobCompList":
[
{
"msgObj":
{
"isFSS": true,
"dataArray":
[
{
"$controller$": "SlotB",
"version": "2.3.155"
},
{
"$controller$": "SlotA",
"version": "2.3.155"
}
],
"msgs":
[
{
"msg": "0x0000",
"code": "0x0000",
"params":
[]
}
]
},
"code": "",
"message": "",
"devIDForTask":
[
"remote"
],
"taskList":
[
{
"devID": "remote",
"msgObj":
{
"isFSS": true,
"dataArray":
[
{
"$controller$": "SlotB",
"version": "2.3.155"
},
{
"$controller$": "SlotA",
"version": "2.3.155"
}
],
"msgs":
[
{
"msg": "0x0000",
"code": "0x0000",
"params":
[]
}
]
},
"success": true,
"failed": false,
"status": "success"
}
],
"success": true,
"failed": false,
"status": "success"
}
],
"isSuccess": true
}
}
}
],
"isRevertSuccess": true,
"isConnectionFailed": false,
"status": "success"
}
```
:::
:::spoiler GRPC failed
```jsonld=
{
"revertObjects":
[],
"objects":
[
{
"8D6783":
{
"stage1_8D6783_0":
{
"JobStatus": "done",
"JobStdOutput":
[
{
"message": "0x0000",
"code": "0x0000",
"params":
[],
"dataArray":
[
{
"$controller$": "SlotB",
"version": "2.3.155"
},
{
"$controller$": "SlotA",
"version": "2.3.155"
}
]
}
],
"JobCompList":
[
{
"msgObj":
{
"isFSS": true,
"dataArray":
[
{
"$controller$": "SlotB",
"version": "2.3.155"
},
{
"$controller$": "SlotA",
"version": "2.3.155"
}
],
"msgs":
[
{
"msg": "0x0000",
"code": "0x0000",
"params":
[]
}
]
},
"code": "",
"message": "",
"devIDForTask":
[
"8D6783"
],
"taskList":
[
{
"devID": "8D6783",
"msgObj":
{
"isFSS": true,
"dataArray":
[
{
"$controller$": "SlotB",
"version": "2.3.155"
},
{
"$controller$": "SlotA",
"version": "2.3.155"
}
],
"msgs":
[
{
"msg": "0x0000",
"code": "0x0000",
"params":
[]
}
]
},
"success": true,
"failed": false,
"status": "success"
}
],
"success": true,
"failed": false,
"status": "success"
}
],
"isSuccess": true
}
},
"remote":
{
"stage1_remote_0":
{
"JobStatus": "failed",
"JobStdOutput":
[
{
"message": "0x0004",
"code": "0x0004",
"params":
[],
"dataArray":
[]
}
],
"JobCompList":
[
{
"msgObj":
{
"isFSS": true,
"dataArray":
[],
"msgs":
[
{
"msg": "0x0004",
"code": "0x0004",
"params":
[]
}
]
},
"code": "",
"message": "",
"devIDForTask":
[
"remote"
],
"taskList":
[
{
"devID": "remote",
"msgObj":
{
"isFSS": true,
"dataArray":
[],
"msgs":
[
{
"msg": "0x0004",
"code": "0x0004",
"params":
[]
}
]
},
"success": false,
"failed": true,
"status": "failed"
}
],
"success": false,
"failed": true,
"status": "failed"
}
],
"isSuccess": false
}
}
}
],
"isRevertSuccess": true,
"isConnectionFailed": false,
"status": "failed"
}
```
:::
:::spoiler GRPC stage1 錯誤 cmd, stage2 正常 cmd (不會有 stage2 資訊)
```jsonld=
{
"revertObjects":
[],
"objects":
[
{
"remote":
{
"stage1_remote_0":
{
"JobStatus": "failed",
"JobStdOutput":
[
{
"message": "0x0004",
"code": "0x0004",
"params":
[],
"dataArray":
[]
}
],
"JobCompList":
[
{
"msgObj":
{
"isFSS": true,
"dataArray":
[],
"msgs":
[
{
"msg": "0x0004",
"code": "0x0004",
"params":
[]
}
]
},
"code": "",
"message": "",
"devIDForTask":
[
"remote"
],
"taskList":
[
{
"devID": "remote",
"msgObj":
{
"isFSS": true,
"dataArray":
[],
"msgs":
[
{
"msg": "0x0004",
"code": "0x0004",
"params":
[]
}
]
},
"success": false,
"failed": true,
"status": "failed"
}
],
"success": false,
"failed": true,
"status": "failed"
}
],
"isSuccess": false
}
}
}
],
"isRevertSuccess": true,
"isConnectionFailed": false,
"status": "failed"
}
```
:::