@things-factory/integration-base 6.1.129 → 6.1.141
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-server/engine/task/database-query.js +2 -1
- package/dist-server/engine/task/database-query.js.map +1 -1
- package/dist-server/engine/task/graphql-mutate.js +2 -1
- package/dist-server/engine/task/graphql-mutate.js.map +1 -1
- package/dist-server/engine/task/graphql-query.js +2 -1
- package/dist-server/engine/task/graphql-query.js.map +1 -1
- package/dist-server/engine/task/http-get.js +2 -1
- package/dist-server/engine/task/http-get.js.map +1 -1
- package/dist-server/engine/task/http-post.js +2 -1
- package/dist-server/engine/task/http-post.js.map +1 -1
- package/dist-server/engine/task/local-graphql-mutate.js +8 -5
- package/dist-server/engine/task/local-graphql-mutate.js.map +1 -1
- package/dist-server/engine/task/local-graphql-query.js +8 -5
- package/dist-server/engine/task/local-graphql-query.js.map +1 -1
- package/dist-server/engine/task/log.js +2 -1
- package/dist-server/engine/task/log.js.map +1 -1
- package/dist-server/engine/task/oracle-procedure.js +3 -3
- package/dist-server/engine/task/oracle-procedure.js.map +1 -1
- package/dist-server/engine/task/script.js +3 -2
- package/dist-server/engine/task/script.js.map +1 -1
- package/dist-server/engine/types.js.map +1 -1
- package/dist-server/routers/scenario-schedule-callback-router.js +7 -2
- package/dist-server/routers/scenario-schedule-callback-router.js.map +1 -1
- package/dist-server/service/scenario/scenario-type.js +1 -1
- package/dist-server/service/scenario/scenario-type.js.map +1 -1
- package/dist-server/service/scenario-instance/scenario-instance-mutation.js +2 -2
- package/dist-server/service/scenario-instance/scenario-instance-mutation.js.map +1 -1
- package/dist-server/service/scenario-instance/scenario-instance-type.js +9 -1
- package/dist-server/service/scenario-instance/scenario-instance-type.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/helps/integration/task/oracle-procedure.ja.md +46 -46
- package/helps/integration/task/oracle-procedure.ko.md +4 -5
- package/helps/integration/task/oracle-procedure.md +42 -43
- package/helps/integration/task/oracle-procedure.ms.md +46 -47
- package/helps/integration/task/oracle-procedure.zh.md +43 -44
- package/package.json +8 -8
- package/server/engine/task/database-query.ts +2 -1
- package/server/engine/task/graphql-mutate.ts +2 -1
- package/server/engine/task/graphql-query.ts +2 -1
- package/server/engine/task/http-get.ts +2 -1
- package/server/engine/task/http-post.ts +2 -1
- package/server/engine/task/local-graphql-mutate.ts +8 -5
- package/server/engine/task/local-graphql-query.ts +8 -5
- package/server/engine/task/log.ts +2 -1
- package/server/engine/task/oracle-procedure.ts +3 -4
- package/server/engine/task/script.ts +3 -2
- package/server/engine/types.ts +1 -0
- package/server/routers/scenario-schedule-callback-router.ts +6 -2
- package/server/service/scenario/scenario-type.ts +1 -1
- package/server/service/scenario-instance/scenario-instance-mutation.ts +2 -2
- package/server/service/scenario-instance/scenario-instance-type.ts +9 -1
@@ -1,61 +1,65 @@
|
|
1
1
|
# Oracle 存储过程任务
|
2
2
|
|
3
|
-
|
3
|
+
这个任务涉及调用存储在 Oracle 数据库中的存储过程。根据不同的数据类型,它可以返回数据列表或特定数据类型的值。
|
4
4
|
|
5
5
|
## 参数
|
6
6
|
|
7
7
|
### 存储过程代码
|
8
8
|
|
9
|
-
-
|
10
|
-
-
|
11
|
-
|
12
|
-
|
13
|
-
|
9
|
+
- 存储过程代码是根据*存储过程名称*和*参数*自动生成的代码,用户无需手动输入。
|
10
|
+
- 例如,如果存储过程的名称是*mcs.myproc*,参数是*id*和*out_name*,则应表示如下:
|
11
|
+
|
12
|
+
```text
|
13
|
+
mcs.myproc(:id, :out_name);
|
14
|
+
```
|
14
15
|
|
15
16
|
### 存储过程名称
|
16
17
|
|
17
18
|
- 指定存储过程的名称。
|
18
|
-
-
|
19
|
-
-
|
20
|
-
|
21
|
-
|
22
|
-
|
19
|
+
- 如果需要按包或用户名称区分存储过程,请使用句点(.)进行分隔。
|
20
|
+
- 示例:
|
21
|
+
|
22
|
+
```text
|
23
|
+
mcs.myproc
|
24
|
+
```
|
23
25
|
|
24
26
|
### 参数
|
25
27
|
|
26
|
-
-
|
28
|
+
- 参数由以下元素组成:
|
27
29
|
- 参数名称
|
28
|
-
-
|
29
|
-
-
|
30
|
-
-
|
31
|
-
-
|
30
|
+
- 方向:IN、INOUT、OUT
|
31
|
+
- 数据类型:String、Number、Date、Cursor
|
32
|
+
- 值:对于输入变量,是相应的值
|
33
|
+
- 最大大小:对于数据类型为 String 或 Buffer 的变量,指定变量的最大大小。
|
32
34
|
|
33
35
|
#### 参数名称
|
34
36
|
|
35
|
-
|
37
|
+
参数名称指定存储过程中使用的参数的名称。在上面的示例中,'id'和'out_name'是参数名称。
|
36
38
|
|
37
|
-
###
|
39
|
+
### 方向
|
38
40
|
|
39
|
-
指定变量是输入(IN)还是输出(OUT
|
41
|
+
指定变量是输入(IN)还是输出(OUT)变量。
|
40
42
|
|
41
|
-
###
|
43
|
+
### 数据类型
|
42
44
|
|
43
|
-
|
45
|
+
指定参数的数据类型。数据类型应与创建存储过程时命名的数据类型完全一致。
|
44
46
|
|
45
|
-
|
47
|
+
例如,如果存储过程实现如下:
|
46
48
|
|
47
49
|
```sql
|
48
50
|
CREATE OR REPLACE NONEDITIONABLE PROCEDURE myproc (in_id IN VARCHAR2, out_name OUT VARCHAR2) AS
|
49
51
|
BEGIN
|
50
|
-
SELECT name INTO out_name FROM
|
51
|
-
|
52
|
-
MCS.FMB_USERS WHERE id = in_id;
|
52
|
+
SELECT name INTO out_name FROM MCS.FMB_USERS WHERE id = in_id ;
|
53
53
|
END;
|
54
54
|
```
|
55
55
|
|
56
|
-
|
56
|
+
第一个和第二个参数都是 VARCHAR2 类型。
|
57
57
|
|
58
|
-
|
58
|
+
在调用这样的存储过程时,应将参数类型指定为 String,并且对于输出,还应指定最大大小。
|
59
|
+
|
60
|
+
以下是如何
|
61
|
+
|
62
|
+
指定的示例:
|
59
63
|
|
60
64
|

|
61
65
|
|
@@ -63,30 +67,25 @@ END;
|
|
63
67
|
|
64
68
|
配置遵循[JSONATA 文档](http://docs.jsonata.org/overview.html)。
|
65
69
|
|
66
|
-
|
67
|
-
|
68
|
-
如果下面的“值”设置是“常量”,那么可以将访问器设置视为“变量”。
|
69
|
-
|
70
|
-
访问器配置优先于下面的“值”设置。换句话说,如果设置了“值”,则它将作为存储过程的参数值优先考虑。这是因为当设置访问器时,通常将配置的“值”理解为用于测试目的的值,而不是主要用途的值。
|
70
|
+
如果指定了“访问器”,则该访问器生成的值将用作参数值。如果“访问器”操作没有结果,则使用“值(val)”设置。
|
71
71
|
|
72
|
-
###
|
72
|
+
### 值(val)
|
73
73
|
|
74
|
-
如果参数是输入(IN
|
75
|
-
直接在此字段中输入“常量”值。
|
74
|
+
如果参数是输入(IN),则在此字段中指定值。直接为此字段输入“常数”值。
|
76
75
|
|
77
|
-
|
76
|
+
在前面提到的示例中,如果将“ID”指定为“id”参数的输入值,则应将 ID 任务返回的值用作输入值。
|
78
77
|
|
79
|
-
|
78
|
+
如果“访问器”设置没有结果,将使用“值”中设置的值。
|
80
79
|
|
81
80
|
### 最大大小
|
82
81
|
|
83
|
-
|
82
|
+
对于数据类型为 String 或 Buffer 的参数,指定最大大小。对于其他数据类型,请忽略此设置。
|
84
83
|
|
85
84
|
## 任务结果
|
86
85
|
|
87
|
-
|
86
|
+
调用存储过程的结果以对象格式返回,指定为输出的参数名称变为键,其对应的值返回。
|
88
87
|
|
89
|
-
|
88
|
+
例如,在上述任务中,结果值将如下所示:
|
90
89
|
|
91
90
|
```javascript
|
92
91
|
{
|
@@ -94,9 +93,9 @@ END;
|
|
94
93
|
}
|
95
94
|
```
|
96
95
|
|
97
|
-
##
|
96
|
+
## 另一个示例(游标)
|
98
97
|
|
99
|
-
###
|
98
|
+
### 存储过程实施示例
|
100
99
|
|
101
100
|
```sql
|
102
101
|
CREATE OR REPLACE NONEDITIONABLE PROCEDURE PROCEDURE1(out_cursor OUT SYS_REFCURSOR) AS
|
@@ -108,11 +107,11 @@ BEGIN
|
|
108
107
|
END PROCEDURE1;
|
109
108
|
```
|
110
109
|
|
111
|
-
###
|
110
|
+
### 调用存储过程示例
|
112
111
|
|
113
112
|

|
114
113
|
|
115
|
-
###
|
114
|
+
### 存储过程调用的任务结果
|
116
115
|
|
117
116
|
```javascript
|
118
117
|
{
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@things-factory/integration-base",
|
3
|
-
"version": "6.1.
|
3
|
+
"version": "6.1.141",
|
4
4
|
"main": "dist-server/index.js",
|
5
5
|
"browser": "client/index.js",
|
6
6
|
"things-factory": true,
|
@@ -26,12 +26,12 @@
|
|
26
26
|
},
|
27
27
|
"dependencies": {
|
28
28
|
"@apollo/client": "^3.6.9",
|
29
|
-
"@things-factory/api": "^6.1.
|
30
|
-
"@things-factory/auth-base": "^6.1.
|
31
|
-
"@things-factory/env": "^6.1.
|
32
|
-
"@things-factory/oauth2-client": "^6.1.
|
33
|
-
"@things-factory/scheduler-client": "^6.1.
|
34
|
-
"@things-factory/shell": "^6.1.
|
29
|
+
"@things-factory/api": "^6.1.141",
|
30
|
+
"@things-factory/auth-base": "^6.1.141",
|
31
|
+
"@things-factory/env": "^6.1.141",
|
32
|
+
"@things-factory/oauth2-client": "^6.1.141",
|
33
|
+
"@things-factory/scheduler-client": "^6.1.141",
|
34
|
+
"@things-factory/shell": "^6.1.141",
|
35
35
|
"async-mqtt": "^2.5.0",
|
36
36
|
"chance": "^1.1.11",
|
37
37
|
"cross-fetch": "^3.0.4",
|
@@ -46,5 +46,5 @@
|
|
46
46
|
"devDependencies": {
|
47
47
|
"@types/cron": "^2.0.1"
|
48
48
|
},
|
49
|
-
"gitHead": "
|
49
|
+
"gitHead": "e3d3ba0a80acd94b85b4ee881c5e9374fc3ee04d"
|
50
50
|
}
|
@@ -3,7 +3,7 @@ import { ConnectionManager } from '../connection-manager'
|
|
3
3
|
import { TaskRegistry } from '../task-registry'
|
4
4
|
|
5
5
|
async function DatabaseQuery(step, context) {
|
6
|
-
var { domain, data, variables } = context
|
6
|
+
var { domain, user, data, variables } = context
|
7
7
|
var {
|
8
8
|
connection: connectionName,
|
9
9
|
params: { query }
|
@@ -14,6 +14,7 @@ async function DatabaseQuery(step, context) {
|
|
14
14
|
const vm = new VM({
|
15
15
|
sandbox: {
|
16
16
|
domain,
|
17
|
+
user,
|
17
18
|
data,
|
18
19
|
variables
|
19
20
|
}
|
@@ -10,11 +10,12 @@ async function GraphqlMutate(step, context) {
|
|
10
10
|
var { connection: connectionName, params: stepOptions } = step
|
11
11
|
var { mutation, variables: variablesAccessorMap, headers } = stepOptions || {}
|
12
12
|
|
13
|
-
var { domain, data, variables } = context
|
13
|
+
var { domain, user, data, variables } = context
|
14
14
|
|
15
15
|
const vm = new VM({
|
16
16
|
sandbox: {
|
17
17
|
domain,
|
18
|
+
user,
|
18
19
|
data,
|
19
20
|
variables
|
20
21
|
}
|
@@ -9,11 +9,12 @@ import { TaskRegistry } from '../task-registry'
|
|
9
9
|
async function GraphqlQuery(step, context) {
|
10
10
|
var { connection: connectionName, params: stepOptions } = step
|
11
11
|
var { query, variables: variablesAccessorMap, headers } = stepOptions || {}
|
12
|
-
var { domain, data, variables } = context
|
12
|
+
var { domain, user, data, variables } = context
|
13
13
|
|
14
14
|
const vm = new VM({
|
15
15
|
sandbox: {
|
16
16
|
domain,
|
17
|
+
user,
|
17
18
|
data,
|
18
19
|
variables
|
19
20
|
}
|
@@ -6,7 +6,7 @@ import { TaskRegistry } from '../task-registry'
|
|
6
6
|
import { ConnectionManager } from '../connection-manager'
|
7
7
|
import { substitute } from './utils/substitute'
|
8
8
|
|
9
|
-
async function HttpGet(step, { logger, data, domain, variables }) {
|
9
|
+
async function HttpGet(step, { logger, data, domain, user, variables }) {
|
10
10
|
var { connection: connectionName, params: stepOptions } = step
|
11
11
|
var { headers: requestHeaders, searchParams = {}, path } = stepOptions || {}
|
12
12
|
var connection = ConnectionManager.getConnectionInstanceByName(domain, connectionName)
|
@@ -20,6 +20,7 @@ async function HttpGet(step, { logger, data, domain, variables }) {
|
|
20
20
|
const vm = new VM({
|
21
21
|
sandbox: {
|
22
22
|
domain,
|
23
|
+
user,
|
23
24
|
data,
|
24
25
|
variables
|
25
26
|
}
|
@@ -6,7 +6,7 @@ import { TaskRegistry } from '../task-registry'
|
|
6
6
|
import { ConnectionManager } from '../connection-manager'
|
7
7
|
import https from 'https'
|
8
8
|
|
9
|
-
async function HttpPost(step, { logger, data, domain, variables }) {
|
9
|
+
async function HttpPost(step, { logger, data, domain, user, variables }) {
|
10
10
|
var { connection: connectionName, params: stepOptions } = step
|
11
11
|
var { headers: requestHeaders, contentType, path, accessor } = stepOptions || {}
|
12
12
|
|
@@ -21,6 +21,7 @@ async function HttpPost(step, { logger, data, domain, variables }) {
|
|
21
21
|
const vm = new VM({
|
22
22
|
sandbox: {
|
23
23
|
domain,
|
24
|
+
user,
|
24
25
|
data,
|
25
26
|
variables
|
26
27
|
}
|
@@ -10,16 +10,19 @@ import { TaskRegistry } from '../task-registry'
|
|
10
10
|
async function LocalGraphqlMutate(step, context) {
|
11
11
|
var { params, updaterId } = step
|
12
12
|
var { mutation, variables: variablesAccessorMap, headers } = params || {}
|
13
|
-
var { client, domain, data, variables } = context
|
13
|
+
var { client, domain, user, data, variables } = context
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
15
|
+
user =
|
16
|
+
user ||
|
17
|
+
(await getRepository(User).findOne({
|
18
|
+
where: { id: updaterId },
|
19
|
+
relations: ['domains']
|
20
|
+
}))
|
19
21
|
|
20
22
|
const vm = new VM({
|
21
23
|
sandbox: {
|
22
24
|
domain,
|
25
|
+
user,
|
23
26
|
data,
|
24
27
|
variables
|
25
28
|
}
|
@@ -10,16 +10,19 @@ import { TaskRegistry } from '../task-registry'
|
|
10
10
|
async function LocalGraphqlQuery(step, context) {
|
11
11
|
var { params, updaterId } = step
|
12
12
|
var { query, variables: variablesAccessorMap, headers } = params || {}
|
13
|
-
var { client, domain, data, variables } = context
|
13
|
+
var { client, domain, user, data, variables } = context
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
15
|
+
user =
|
16
|
+
user ||
|
17
|
+
(await getRepository(User).findOne({
|
18
|
+
where: { id: updaterId },
|
19
|
+
relations: ['domains']
|
20
|
+
}))
|
19
21
|
|
20
22
|
const vm = new VM({
|
21
23
|
sandbox: {
|
22
24
|
domain,
|
25
|
+
user,
|
23
26
|
data,
|
24
27
|
variables
|
25
28
|
}
|
@@ -2,7 +2,7 @@ import { access, hasTemplateExpression } from '@things-factory/utils'
|
|
2
2
|
import { VM } from 'vm2'
|
3
3
|
import { TaskRegistry } from '../task-registry'
|
4
4
|
|
5
|
-
async function Log(step, { logger, data, variables, domain }) {
|
5
|
+
async function Log(step, { logger, data, variables, domain, user }) {
|
6
6
|
var {
|
7
7
|
params: { message, accessor, level = 'info' }
|
8
8
|
} = step
|
@@ -11,6 +11,7 @@ async function Log(step, { logger, data, variables, domain }) {
|
|
11
11
|
const vm = new VM({
|
12
12
|
sandbox: {
|
13
13
|
domain,
|
14
|
+
user,
|
14
15
|
data,
|
15
16
|
variables
|
16
17
|
}
|
@@ -42,7 +42,7 @@ const DIR = {
|
|
42
42
|
}
|
43
43
|
|
44
44
|
async function OracleProcedure(step, context) {
|
45
|
-
var { domain, data, variables } = context
|
45
|
+
var { domain, user, data, variables } = context
|
46
46
|
var { connection: connectionName, params } = step
|
47
47
|
|
48
48
|
var { code = '', parameters = [] } = params.parameters as ValueType
|
@@ -52,6 +52,7 @@ async function OracleProcedure(step, context) {
|
|
52
52
|
const vm = new VM({
|
53
53
|
sandbox: {
|
54
54
|
domain,
|
55
|
+
user,
|
55
56
|
data,
|
56
57
|
variables
|
57
58
|
}
|
@@ -71,7 +72,7 @@ async function OracleProcedure(step, context) {
|
|
71
72
|
type: TYPES[type]
|
72
73
|
}
|
73
74
|
|
74
|
-
const calculated =
|
75
|
+
const calculated = accessor ? access(accessor, data) || val : val
|
75
76
|
|
76
77
|
if (calculated !== undefined) {
|
77
78
|
sum[name].val =
|
@@ -108,8 +109,6 @@ async function OracleProcedure(step, context) {
|
|
108
109
|
}
|
109
110
|
}
|
110
111
|
|
111
|
-
console.log('taskResult: ', taskResult)
|
112
|
-
|
113
112
|
return {
|
114
113
|
data: taskResult
|
115
114
|
}
|
@@ -6,7 +6,7 @@ async function Script(step, context) {
|
|
6
6
|
params: { script }
|
7
7
|
} = step
|
8
8
|
|
9
|
-
const { domain, data, variables } = context
|
9
|
+
const { domain, user, data, variables, logger } = context
|
10
10
|
|
11
11
|
const vm = new NodeVM({
|
12
12
|
timeout: 5000,
|
@@ -14,12 +14,13 @@ async function Script(step, context) {
|
|
14
14
|
console: 'inherit',
|
15
15
|
sandbox: {
|
16
16
|
domain,
|
17
|
+
user,
|
17
18
|
data,
|
18
19
|
variables
|
19
20
|
}
|
20
21
|
})
|
21
22
|
|
22
|
-
|
23
|
+
var result = await vm.run(`return (async () => {\n${script}\n})()`)
|
23
24
|
|
24
25
|
return {
|
25
26
|
data: result
|
package/server/engine/types.ts
CHANGED
@@ -18,7 +18,7 @@ scenarioScheduleCallbackRouter.post('/callback-schedule-for-scenario', async (co
|
|
18
18
|
// key: scenario.id,
|
19
19
|
// operation: 'start'
|
20
20
|
|
21
|
-
const { domain } = context.state
|
21
|
+
const { domain, user } = context.state
|
22
22
|
|
23
23
|
if (!domain) {
|
24
24
|
throw new Error('cannot identify the current domain.')
|
@@ -58,7 +58,11 @@ scenarioScheduleCallbackRouter.post('/callback-schedule-for-scenario', async (co
|
|
58
58
|
// TODO prepare the secure authentication method
|
59
59
|
context.state.user = scenario.creator
|
60
60
|
|
61
|
-
ScenarioEngine.load(scenario.name, scenario,
|
61
|
+
ScenarioEngine.load(scenario.name, scenario, {
|
62
|
+
domain,
|
63
|
+
user,
|
64
|
+
variables: client.task?.data
|
65
|
+
})
|
62
66
|
|
63
67
|
context.status = 200
|
64
68
|
})
|
@@ -92,7 +92,7 @@ export class Scenario {
|
|
92
92
|
|
93
93
|
async start(instanceName, variables?: any) {
|
94
94
|
try {
|
95
|
-
await ScenarioEngine.load(instanceName || this.name, this, { variables })
|
95
|
+
await ScenarioEngine.load(instanceName || this.name, this, { domain: this.domain, user: this.updater, variables })
|
96
96
|
} catch (ex) {}
|
97
97
|
}
|
98
98
|
|
@@ -71,7 +71,7 @@ export class ScenarioInstanceMutation {
|
|
71
71
|
@Arg('variables', type => ScalarObject, { nullable: true }) variables: any,
|
72
72
|
@Ctx() context: ResolverContext
|
73
73
|
): Promise<ScenarioInstance> {
|
74
|
-
const { domain } = context.state
|
74
|
+
const { domain, user } = context.state
|
75
75
|
|
76
76
|
debug('startScenario', instanceName, scenarioName, variables)
|
77
77
|
|
@@ -86,7 +86,7 @@ export class ScenarioInstanceMutation {
|
|
86
86
|
}
|
87
87
|
|
88
88
|
instanceName = instanceName || scenarioName
|
89
|
-
return await ScenarioEngine.load(instanceName, scenario, { domain, variables })
|
89
|
+
return await ScenarioEngine.load(instanceName, scenario, { domain, user, variables })
|
90
90
|
}
|
91
91
|
|
92
92
|
@Mutation(returns => ScenarioInstance, { nullable: true, description: 'To start new scenario instance' })
|
@@ -7,6 +7,7 @@ import util from 'util'
|
|
7
7
|
import { createLogger, format, transports } from 'winston'
|
8
8
|
|
9
9
|
import { Domain, pubsub, PubSubLogTransport, ScalarObject } from '@things-factory/shell'
|
10
|
+
import { User } from '@things-factory/auth-base'
|
10
11
|
import { sleep } from '@things-factory/utils'
|
11
12
|
|
12
13
|
import { TaskRegistry } from '../../engine'
|
@@ -93,6 +94,9 @@ export class ScenarioInstance {
|
|
93
94
|
@Field({ nullable: true })
|
94
95
|
public domain: Domain
|
95
96
|
|
97
|
+
@Field({ nullable: true })
|
98
|
+
public user: User
|
99
|
+
|
96
100
|
@Field({ nullable: true })
|
97
101
|
public scenarioName: string
|
98
102
|
|
@@ -149,16 +153,18 @@ export class ScenarioInstance {
|
|
149
153
|
}
|
150
154
|
|
151
155
|
constructor(instanceName, { name: scenarioName, steps, domain: scenarioDomain }, context?) {
|
152
|
-
const domain = context
|
156
|
+
const { domain = scenarioDomain, user } = context || {}
|
153
157
|
|
154
158
|
this.instanceName = instanceName
|
155
159
|
this.scenarioName = scenarioName
|
156
160
|
this.steps = orderBy(steps || [], step => step.sequence)
|
157
161
|
this.domain = domain
|
162
|
+
this.user = user
|
158
163
|
this.disposer = context?.disposer
|
159
164
|
|
160
165
|
this.context = {
|
161
166
|
domain,
|
167
|
+
user,
|
162
168
|
logger:
|
163
169
|
context?.logger ||
|
164
170
|
createLogger({
|
@@ -254,6 +260,8 @@ export class ScenarioInstance {
|
|
254
260
|
const message = ex.stack ? ex.stack : ex
|
255
261
|
const { scenarioName, domain } = this
|
256
262
|
|
263
|
+
this.context.logger.error(ex.message ? ex.message : ex)
|
264
|
+
|
257
265
|
debug('failed to run ', `[ Domain: ${domain.name}, Scenario: ${scenarioName} ]\n`, ex)
|
258
266
|
this.setState(
|
259
267
|
ScenarioInstanceStatus.HALTED,
|