@things-factory/integration-ui 9.0.0-beta.27 → 9.0.0-beta.29

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.
Files changed (120) hide show
  1. package/dist-client/analysis/graph-data.d.ts +36 -0
  2. package/dist-client/analysis/graph-data.js +2 -0
  3. package/dist-client/analysis/graph-data.js.map +1 -0
  4. package/dist-client/analysis/graph-viewer-style.d.ts +1 -0
  5. package/dist-client/analysis/graph-viewer-style.js +121 -0
  6. package/dist-client/analysis/graph-viewer-style.js.map +1 -0
  7. package/dist-client/analysis/graph-viewer.d.ts +36 -0
  8. package/dist-client/analysis/graph-viewer.js +294 -0
  9. package/dist-client/analysis/graph-viewer.js.map +1 -0
  10. package/dist-client/analysis/node.d.ts +4 -0
  11. package/dist-client/analysis/node.js +59 -0
  12. package/dist-client/analysis/node.js.map +1 -0
  13. package/dist-client/analysis/relationship.d.ts +4 -0
  14. package/dist-client/analysis/relationship.js +13 -0
  15. package/dist-client/analysis/relationship.js.map +1 -0
  16. package/dist-client/analysis/utils.d.ts +20 -0
  17. package/dist-client/analysis/utils.js +31 -0
  18. package/dist-client/analysis/utils.js.map +1 -0
  19. package/dist-client/bootstrap.d.ts +3 -0
  20. package/dist-client/bootstrap.js +30 -0
  21. package/dist-client/bootstrap.js.map +1 -0
  22. package/dist-client/editors/entity-editor.d.ts +10 -0
  23. package/dist-client/editors/entity-editor.js +46 -0
  24. package/dist-client/editors/entity-editor.js.map +1 -0
  25. package/dist-client/editors/entity-selector.d.ts +31 -0
  26. package/dist-client/editors/entity-selector.js +301 -0
  27. package/dist-client/editors/entity-selector.js.map +1 -0
  28. package/dist-client/editors/property-editor.d.ts +30 -0
  29. package/dist-client/editors/property-editor.js +105 -0
  30. package/dist-client/editors/property-editor.js.map +1 -0
  31. package/dist-client/editors/things-editor-db-procedure.d.ts +52 -0
  32. package/dist-client/editors/things-editor-db-procedure.js +495 -0
  33. package/dist-client/editors/things-editor-db-procedure.js.map +1 -0
  34. package/dist-client/editors/things-editor-entity-selector.d.ts +15 -0
  35. package/dist-client/editors/things-editor-entity-selector.js +94 -0
  36. package/dist-client/editors/things-editor-entity-selector.js.map +1 -0
  37. package/dist-client/editors/things-editor-http-body.d.ts +22 -0
  38. package/dist-client/editors/things-editor-http-body.js +137 -0
  39. package/dist-client/editors/things-editor-http-body.js.map +1 -0
  40. package/dist-client/editors/things-editor-http-headers.d.ts +29 -0
  41. package/dist-client/editors/things-editor-http-headers.js +167 -0
  42. package/dist-client/editors/things-editor-http-headers.js.map +1 -0
  43. package/dist-client/editors/things-editor-http-parameters.d.ts +29 -0
  44. package/dist-client/editors/things-editor-http-parameters.js +167 -0
  45. package/dist-client/editors/things-editor-http-parameters.js.map +1 -0
  46. package/dist-client/editors/things-editor-tag-scenarios.d.ts +32 -0
  47. package/dist-client/editors/things-editor-tag-scenarios.js +226 -0
  48. package/dist-client/editors/things-editor-tag-scenarios.js.map +1 -0
  49. package/dist-client/grist/connection-selector.d.ts +4 -0
  50. package/dist-client/grist/connection-selector.js +30 -0
  51. package/dist-client/grist/connection-selector.js.map +1 -0
  52. package/dist-client/grist/connector-selector.d.ts +4 -0
  53. package/dist-client/grist/connector-selector.js +30 -0
  54. package/dist-client/grist/connector-selector.js.map +1 -0
  55. package/dist-client/grist/dynamic-selector.d.ts +10 -0
  56. package/dist-client/grist/dynamic-selector.js +32 -0
  57. package/dist-client/grist/dynamic-selector.js.map +1 -0
  58. package/dist-client/grist/task-type-selector.d.ts +7 -0
  59. package/dist-client/grist/task-type-selector.js +58 -0
  60. package/dist-client/grist/task-type-selector.js.map +1 -0
  61. package/dist-client/index.d.ts +2 -0
  62. package/dist-client/index.js +3 -0
  63. package/dist-client/index.js.map +1 -0
  64. package/dist-client/pages/connection-importer.d.ts +10 -0
  65. package/dist-client/pages/connection-importer.js +102 -0
  66. package/dist-client/pages/connection-importer.js.map +1 -0
  67. package/dist-client/pages/connection.d.ts +64 -0
  68. package/dist-client/pages/connection.js +478 -0
  69. package/dist-client/pages/connection.js.map +1 -0
  70. package/dist-client/pages/integration-analysis.d.ts +24 -0
  71. package/dist-client/pages/integration-analysis.js +238 -0
  72. package/dist-client/pages/integration-analysis.js.map +1 -0
  73. package/dist-client/pages/integration-monitor.d.ts +28 -0
  74. package/dist-client/pages/integration-monitor.js +343 -0
  75. package/dist-client/pages/integration-monitor.js.map +1 -0
  76. package/dist-client/pages/scenario-detail.d.ts +2 -0
  77. package/dist-client/pages/scenario-detail.js +298 -0
  78. package/dist-client/pages/scenario-detail.js.map +1 -0
  79. package/dist-client/pages/scenario-importer.d.ts +10 -0
  80. package/dist-client/pages/scenario-importer.js +108 -0
  81. package/dist-client/pages/scenario-importer.js.map +1 -0
  82. package/dist-client/pages/scenario.d.ts +69 -0
  83. package/dist-client/pages/scenario.js +632 -0
  84. package/dist-client/pages/scenario.js.map +1 -0
  85. package/dist-client/pages/state-register.d.ts +50 -0
  86. package/dist-client/pages/state-register.js +278 -0
  87. package/dist-client/pages/state-register.js.map +1 -0
  88. package/dist-client/route.d.ts +1 -0
  89. package/dist-client/route.js +20 -0
  90. package/dist-client/route.js.map +1 -0
  91. package/dist-client/tsconfig.tsbuildinfo +1 -0
  92. package/dist-client/viewparts/connections-monitor.d.ts +10 -0
  93. package/dist-client/viewparts/connections-monitor.js +172 -0
  94. package/dist-client/viewparts/connections-monitor.js.map +1 -0
  95. package/dist-client/viewparts/monitoring-summary.d.ts +13 -0
  96. package/dist-client/viewparts/monitoring-summary.js +142 -0
  97. package/dist-client/viewparts/monitoring-summary.js.map +1 -0
  98. package/dist-client/viewparts/pending-q-monitor.d.ts +18 -0
  99. package/dist-client/viewparts/pending-q-monitor.js +248 -0
  100. package/dist-client/viewparts/pending-q-monitor.js.map +1 -0
  101. package/dist-client/viewparts/scenario-instance-log-view.d.ts +24 -0
  102. package/dist-client/viewparts/scenario-instance-log-view.js +141 -0
  103. package/dist-client/viewparts/scenario-instance-log-view.js.map +1 -0
  104. package/dist-client/viewparts/scenario-instance-monitor.d.ts +15 -0
  105. package/dist-client/viewparts/scenario-instance-monitor.js +173 -0
  106. package/dist-client/viewparts/scenario-instance-monitor.js.map +1 -0
  107. package/dist-client/viewparts/scenario-instance-view.d.ts +29 -0
  108. package/dist-client/viewparts/scenario-instance-view.js +263 -0
  109. package/dist-client/viewparts/scenario-instance-view.js.map +1 -0
  110. package/dist-client/viewparts/scenario-monitor.d.ts +16 -0
  111. package/dist-client/viewparts/scenario-monitor.js +285 -0
  112. package/dist-client/viewparts/scenario-monitor.js.map +1 -0
  113. package/dist-client/viewparts/scenarios-monitor.d.ts +16 -0
  114. package/dist-client/viewparts/scenarios-monitor.js +170 -0
  115. package/dist-client/viewparts/scenarios-monitor.js.map +1 -0
  116. package/dist-server/index.d.ts +0 -0
  117. package/dist-server/index.js +1 -0
  118. package/dist-server/index.js.map +1 -0
  119. package/dist-server/tsconfig.tsbuildinfo +1 -0
  120. package/package.json +6 -6
@@ -0,0 +1,141 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import '@material/web/icon/icon.js';
3
+ import '@material/web/fab/fab.js';
4
+ import gql from 'graphql-tag';
5
+ import { css, html, LitElement, nothing } from 'lit';
6
+ import { customElement, property } from 'lit/decorators.js';
7
+ import { connect } from 'pwa-helpers/connect-mixin.js';
8
+ import { subscribe } from '@operato/graphql';
9
+ import { store } from '@operato/shell';
10
+ import { ScrollbarStyles } from '@operato/styles';
11
+ let ScenarioInstanceLogView = class ScenarioInstanceLogView extends connect(store)(LitElement) {
12
+ constructor() {
13
+ super(...arguments);
14
+ this.startable = false;
15
+ }
16
+ firstUpdated() {
17
+ this.logs = [];
18
+ this.startSubscribe();
19
+ }
20
+ disconnectedCallback() {
21
+ super.disconnectedCallback();
22
+ this.stopSubscribe();
23
+ }
24
+ render() {
25
+ const logs = this.logs || [];
26
+ return html `
27
+ <div options></div>
28
+ <div content>
29
+ ${logs.map(({ timestamp, message, level }) => html `
30
+ <div class="${level}">
31
+ <span>${new Date(timestamp).toLocaleString()}</span> <strong>${level}</strong> ${message}
32
+ </div>
33
+ `)}
34
+ </div>
35
+ ${this.startable
36
+ ? html `<md-fab id="start" title="start" @click=${() => this.dispatchEvent(new CustomEvent('start'))}>
37
+ <md-icon slot="icon">play_arrow</md-icon>
38
+ </md-fab>`
39
+ : nothing}
40
+ `;
41
+ }
42
+ async startSubscribe() {
43
+ this.subscription = await subscribe({
44
+ query: gql `
45
+ subscription ($instanceName: String, $scenarioName: String, $level: String) {
46
+ log: scenarioInstanceLog(instanceName: $instanceName, scenarioName: $scenarioName, level: $level) {
47
+ level
48
+ message
49
+ timestamp
50
+ }
51
+ }
52
+ `,
53
+ variables: {
54
+ instanceName: this.instanceName,
55
+ scenarioName: this.scenarioName
56
+ }
57
+ }, {
58
+ next: async ({ data }) => {
59
+ var wasBottom = this.scrollHeight - this.scrollTop === this.clientHeight;
60
+ this.logs.push(data.log);
61
+ this.logs.length > 100 && this.logs.shift();
62
+ this.requestUpdate();
63
+ if (wasBottom) {
64
+ /* this is not proved yet - to keep bottom scroll position */
65
+ await this.updateComplete;
66
+ this.scrollTop = this.scrollHeight - this.clientHeight;
67
+ }
68
+ }
69
+ });
70
+ }
71
+ async stopSubscribe() {
72
+ var _a;
73
+ await ((_a = this.subscription) === null || _a === void 0 ? void 0 : _a.unsubscribe());
74
+ delete this.subscription;
75
+ }
76
+ };
77
+ ScenarioInstanceLogView.styles = [
78
+ ScrollbarStyles,
79
+ css `
80
+ :host {
81
+ display: flex;
82
+ flex-direction: column;
83
+ background-color: var(--md-sys-color-surface);
84
+ padding: var(--spacing-large);
85
+ }
86
+
87
+ :host([active]) {
88
+ padding: 0;
89
+ }
90
+
91
+ [content] {
92
+ flex: 1;
93
+
94
+ display: flex;
95
+ flex-direction: column;
96
+ overflow: auto;
97
+
98
+ font-size: var(--fontsize-small);
99
+ }
100
+
101
+ div.error {
102
+ color: #8b0000;
103
+ }
104
+
105
+ div.warn {
106
+ color: #ff6b6b;
107
+ }
108
+
109
+ span {
110
+ color: var(--md-sys-color-primary);
111
+ }
112
+
113
+ #start {
114
+ position: absolute;
115
+ bottom: 15px;
116
+ right: 16px;
117
+ text-decoration: auto;
118
+ }
119
+ `
120
+ ];
121
+ __decorate([
122
+ property({ type: String }),
123
+ __metadata("design:type", String)
124
+ ], ScenarioInstanceLogView.prototype, "scenarioName", void 0);
125
+ __decorate([
126
+ property({ type: String }),
127
+ __metadata("design:type", String)
128
+ ], ScenarioInstanceLogView.prototype, "instanceName", void 0);
129
+ __decorate([
130
+ property({ type: Array }),
131
+ __metadata("design:type", Object)
132
+ ], ScenarioInstanceLogView.prototype, "logs", void 0);
133
+ __decorate([
134
+ property({ type: Boolean }),
135
+ __metadata("design:type", Boolean)
136
+ ], ScenarioInstanceLogView.prototype, "startable", void 0);
137
+ ScenarioInstanceLogView = __decorate([
138
+ customElement('scenario-instance-log-view')
139
+ ], ScenarioInstanceLogView);
140
+ export { ScenarioInstanceLogView };
141
+ //# sourceMappingURL=scenario-instance-log-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scenario-instance-log-view.js","sourceRoot":"","sources":["../../client/viewparts/scenario-instance-log-view.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\nimport '@material/web/fab/fab.js'\n\nimport gql from 'graphql-tag'\n\nimport { css, html, LitElement, nothing } from 'lit'\nimport { customElement, property, query } from 'lit/decorators.js'\nimport { connect } from 'pwa-helpers/connect-mixin.js'\n\nimport { subscribe } from '@operato/graphql'\nimport { store } from '@operato/shell'\nimport { ScrollbarStyles } from '@operato/styles'\n\n@customElement('scenario-instance-log-view')\nexport class ScenarioInstanceLogView extends connect(store)(LitElement) {\n static styles = [\n ScrollbarStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n background-color: var(--md-sys-color-surface);\n padding: var(--spacing-large);\n }\n\n :host([active]) {\n padding: 0;\n }\n\n [content] {\n flex: 1;\n\n display: flex;\n flex-direction: column;\n overflow: auto;\n\n font-size: var(--fontsize-small);\n }\n\n div.error {\n color: #8b0000;\n }\n\n div.warn {\n color: #ff6b6b;\n }\n\n span {\n color: var(--md-sys-color-primary);\n }\n\n #start {\n position: absolute;\n bottom: 15px;\n right: 16px;\n text-decoration: auto;\n }\n `\n ]\n\n @property({ type: String }) scenarioName?: string\n @property({ type: String }) instanceName?: string\n @property({ type: Array }) logs: any\n @property({ type: Boolean }) startable: boolean = false\n\n subscription: any\n\n firstUpdated() {\n this.logs = []\n this.startSubscribe()\n }\n\n disconnectedCallback() {\n super.disconnectedCallback()\n this.stopSubscribe()\n }\n\n render() {\n const logs = this.logs || []\n\n return html`\n <div options></div>\n <div content>\n ${logs.map(\n ({ timestamp, message, level }) => html`\n <div class=\"${level}\">\n <span>${new Date(timestamp).toLocaleString()}</span> <strong>${level}</strong> ${message}\n </div>\n `\n )}\n </div>\n ${this.startable\n ? html`<md-fab id=\"start\" title=\"start\" @click=${() => this.dispatchEvent(new CustomEvent('start'))}>\n <md-icon slot=\"icon\">play_arrow</md-icon>\n </md-fab>`\n : nothing}\n `\n }\n\n async startSubscribe() {\n this.subscription = await subscribe(\n {\n query: gql`\n subscription ($instanceName: String, $scenarioName: String, $level: String) {\n log: scenarioInstanceLog(instanceName: $instanceName, scenarioName: $scenarioName, level: $level) {\n level\n message\n timestamp\n }\n }\n `,\n variables: {\n instanceName: this.instanceName,\n scenarioName: this.scenarioName\n }\n },\n {\n next: async ({ data }) => {\n var wasBottom = this.scrollHeight - this.scrollTop === this.clientHeight\n\n this.logs.push(data.log)\n this.logs.length > 100 && this.logs.shift()\n this.requestUpdate()\n\n if (wasBottom) {\n /* this is not proved yet - to keep bottom scroll position */\n await this.updateComplete\n this.scrollTop = this.scrollHeight - this.clientHeight\n }\n }\n }\n )\n }\n\n async stopSubscribe() {\n await this.subscription?.unsubscribe()\n delete this.subscription\n }\n}\n"]}
@@ -0,0 +1,15 @@
1
+ import '@material/web/icon/icon.js';
2
+ import '@operato/data-grist';
3
+ import './scenario-instance-view.js';
4
+ import { LitElement } from 'lit';
5
+ declare const ScenarioInstanceMonitor_base: (new (...args: any[]) => LitElement) & typeof LitElement;
6
+ export declare class ScenarioInstanceMonitor extends ScenarioInstanceMonitor_base {
7
+ static styles: import("lit").CSSResult[];
8
+ instance: any;
9
+ color?: string;
10
+ render(): import("lit-html").TemplateResult<1>;
11
+ startScenario(instance: any): Promise<void>;
12
+ stopScenario(instance: any): Promise<void>;
13
+ showInstanceDetail(): Promise<void>;
14
+ }
15
+ export {};
@@ -0,0 +1,173 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import '@material/web/icon/icon.js';
3
+ import '@operato/data-grist';
4
+ import './scenario-instance-view.js';
5
+ import gql from 'graphql-tag';
6
+ import { css, html, LitElement } from 'lit';
7
+ import { customElement, property } from 'lit/decorators.js';
8
+ import { client } from '@operato/graphql';
9
+ import { i18next, localize } from '@operato/i18n';
10
+ import { notify, openPopup } from '@operato/layout';
11
+ import { ScrollbarStyles } from '@operato/styles';
12
+ function IS_SCENARIO_RUNNING(state) {
13
+ return state && state !== 'UNLOADED';
14
+ }
15
+ let ScenarioInstanceMonitor = class ScenarioInstanceMonitor extends localize(i18next)(LitElement) {
16
+ render() {
17
+ var instance = this.instance;
18
+ const { instanceName, progress, message, state } = instance;
19
+ const { rate = 0, steps = 0, step = 0, rounds = 0 } = progress || {};
20
+ const running = IS_SCENARIO_RUNNING(state);
21
+ return html `
22
+ <div name>${instanceName}</div>
23
+ <div progress-wrap>
24
+ <div progress>
25
+ <div id="progressbar" .style="width:${rate}%;background-color:${this.color};"></div>
26
+ </div>
27
+ <div steps>${step}/${steps}</div>
28
+ </div>
29
+ <div buttons>
30
+ <span><strong>${rounds}</strong> round</span>
31
+ <md-icon @click=${e => this.showInstanceDetail()}>wysiwyg</md-icon>
32
+ <md-icon @click=${e => (running ? this.stopScenario(instance) : this.startScenario(instance))}
33
+ >${running ? 'pause' : 'play_arrow'}</md-icon
34
+ >
35
+ </div>
36
+ `;
37
+ }
38
+ async startScenario(instance) {
39
+ var response = await client.mutate({
40
+ mutation: gql `
41
+ mutation ($scenarioName: String!, $instanceName: String) {
42
+ startScenario(scenarioName: $scenarioName, instanceName: $instanceName) {
43
+ state
44
+ }
45
+ }
46
+ `,
47
+ variables: {
48
+ scenarioName: instance.scenarioName,
49
+ instanceName: instance.instanceName
50
+ }
51
+ });
52
+ notify({
53
+ level: 'info',
54
+ message: `${IS_SCENARIO_RUNNING(response.data.startScenario.state) ? 'success' : 'fail'} to start scenario : ${instance.scenarioName}`
55
+ });
56
+ }
57
+ async stopScenario(instance) {
58
+ var response = await client.mutate({
59
+ mutation: gql `
60
+ mutation ($instanceName: String!) {
61
+ stopScenario(instanceName: $instanceName) {
62
+ state
63
+ }
64
+ }
65
+ `,
66
+ variables: {
67
+ instanceName: instance.instanceName
68
+ }
69
+ });
70
+ notify({
71
+ level: 'info',
72
+ message: `${IS_SCENARIO_RUNNING(response.data.stopScenario.state) ? 'fail' : 'success'} to stop instance : ${instance.instanceName}`
73
+ });
74
+ }
75
+ async showInstanceDetail() {
76
+ const { instanceName, scenarioName } = this.instance;
77
+ openPopup(html `
78
+ <scenario-instance-view .instanceName=${instanceName} .scenarioName=${scenarioName}></scenario-instance-view>
79
+ `, {
80
+ size: 'large',
81
+ title: `${i18next.t('title.scenario-instance')}`
82
+ });
83
+ }
84
+ };
85
+ ScenarioInstanceMonitor.styles = [
86
+ ScrollbarStyles,
87
+ css `
88
+ :host {
89
+ display: block;
90
+ overflow: hidden;
91
+ position: relative;
92
+ padding: var(--spacing-small);
93
+ color: var(--md-sys-color-secondary);
94
+ }
95
+
96
+ [running] {
97
+ background-color: lightgreen;
98
+ }
99
+
100
+ [name] {
101
+ font-size: var(--fontsize-default);
102
+ font-weight: bold;
103
+ }
104
+
105
+ [progress] {
106
+ display: block;
107
+ position: relative;
108
+
109
+ width: 100%;
110
+ margin: 2px;
111
+ padding: 2px;
112
+ box-sizing: border-box;
113
+
114
+ border: var(--border-dim-color);
115
+ border-radius: 10px;
116
+ background-color: var(--md-sys-color-surface);
117
+ }
118
+ [progress-wrap] {
119
+ display: flex;
120
+ flex-direction: row;
121
+ margin: 4px 0;
122
+ }
123
+
124
+ [running] [progress] {
125
+ background-color: var(--md-sys-color-surface-variant);
126
+ }
127
+
128
+ [steps] {
129
+ padding: 0 0 0 var(--spacing-small);
130
+ }
131
+
132
+ #progressbar {
133
+ height: 100%;
134
+ text-align: left;
135
+ border-radius: 5px;
136
+ animation: width 1s linear ease-out;
137
+ }
138
+
139
+ [buttons] {
140
+ --md-icon-size: 18px;
141
+
142
+ border-top: var(--border-dim-color);
143
+ padding: var(--spacing-small) 0 0 0;
144
+ text-align: right;
145
+ }
146
+
147
+ [buttons] md-icon {
148
+ color: var(--md-sys-color-primary);
149
+ }
150
+
151
+ @keyframes width {
152
+ 0% {
153
+ width: 0;
154
+ }
155
+ 100% {
156
+ width: auto;
157
+ }
158
+ }
159
+ `
160
+ ];
161
+ __decorate([
162
+ property({ type: Object }),
163
+ __metadata("design:type", Object)
164
+ ], ScenarioInstanceMonitor.prototype, "instance", void 0);
165
+ __decorate([
166
+ property({ type: String }),
167
+ __metadata("design:type", String)
168
+ ], ScenarioInstanceMonitor.prototype, "color", void 0);
169
+ ScenarioInstanceMonitor = __decorate([
170
+ customElement('scenario-instance-monitor')
171
+ ], ScenarioInstanceMonitor);
172
+ export { ScenarioInstanceMonitor };
173
+ //# sourceMappingURL=scenario-instance-monitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scenario-instance-monitor.js","sourceRoot":"","sources":["../../client/viewparts/scenario-instance-monitor.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\nimport '@operato/data-grist'\nimport './scenario-instance-view.js'\n\nimport gql from 'graphql-tag'\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, query } from 'lit/decorators.js'\n\nimport { client } from '@operato/graphql'\nimport { i18next, localize } from '@operato/i18n'\nimport { notify, openPopup } from '@operato/layout'\nimport { ScrollbarStyles } from '@operato/styles'\n\nfunction IS_SCENARIO_RUNNING(state) {\n return state && state !== 'UNLOADED'\n}\n\n@customElement('scenario-instance-monitor')\nexport class ScenarioInstanceMonitor extends localize(i18next)(LitElement) {\n static styles = [\n ScrollbarStyles,\n css`\n :host {\n display: block;\n overflow: hidden;\n position: relative;\n padding: var(--spacing-small);\n color: var(--md-sys-color-secondary);\n }\n\n [running] {\n background-color: lightgreen;\n }\n\n [name] {\n font-size: var(--fontsize-default);\n font-weight: bold;\n }\n\n [progress] {\n display: block;\n position: relative;\n\n width: 100%;\n margin: 2px;\n padding: 2px;\n box-sizing: border-box;\n\n border: var(--border-dim-color);\n border-radius: 10px;\n background-color: var(--md-sys-color-surface);\n }\n [progress-wrap] {\n display: flex;\n flex-direction: row;\n margin: 4px 0;\n }\n\n [running] [progress] {\n background-color: var(--md-sys-color-surface-variant);\n }\n\n [steps] {\n padding: 0 0 0 var(--spacing-small);\n }\n\n #progressbar {\n height: 100%;\n text-align: left;\n border-radius: 5px;\n animation: width 1s linear ease-out;\n }\n\n [buttons] {\n --md-icon-size: 18px;\n\n border-top: var(--border-dim-color);\n padding: var(--spacing-small) 0 0 0;\n text-align: right;\n }\n\n [buttons] md-icon {\n color: var(--md-sys-color-primary);\n }\n\n @keyframes width {\n 0% {\n width: 0;\n }\n 100% {\n width: auto;\n }\n }\n `\n ]\n\n @property({ type: Object }) instance: any\n @property({ type: String }) color?: string\n\n render() {\n var instance = this.instance\n const { instanceName, progress, message, state } = instance\n const { rate = 0, steps = 0, step = 0, rounds = 0 } = progress || {}\n\n const running = IS_SCENARIO_RUNNING(state)\n\n return html`\n <div name>${instanceName}</div>\n <div progress-wrap>\n <div progress>\n <div id=\"progressbar\" .style=\"width:${rate}%;background-color:${this.color};\"></div>\n </div>\n <div steps>${step}/${steps}</div>\n </div>\n <div buttons>\n <span><strong>${rounds}</strong> round</span>\n <md-icon @click=${e => this.showInstanceDetail()}>wysiwyg</md-icon>\n <md-icon @click=${e => (running ? this.stopScenario(instance) : this.startScenario(instance))}\n >${running ? 'pause' : 'play_arrow'}</md-icon\n >\n </div>\n `\n }\n\n async startScenario(instance) {\n var response = await client.mutate({\n mutation: gql`\n mutation ($scenarioName: String!, $instanceName: String) {\n startScenario(scenarioName: $scenarioName, instanceName: $instanceName) {\n state\n }\n }\n `,\n variables: {\n scenarioName: instance.scenarioName,\n instanceName: instance.instanceName\n }\n })\n\n notify({\n level: 'info',\n message: `${IS_SCENARIO_RUNNING(response.data.startScenario.state) ? 'success' : 'fail'} to start scenario : ${instance.scenarioName}`\n })\n }\n\n async stopScenario(instance) {\n var response = await client.mutate({\n mutation: gql`\n mutation ($instanceName: String!) {\n stopScenario(instanceName: $instanceName) {\n state\n }\n }\n `,\n variables: {\n instanceName: instance.instanceName\n }\n })\n\n notify({\n level: 'info',\n message: `${IS_SCENARIO_RUNNING(response.data.stopScenario.state) ? 'fail' : 'success'} to stop instance : ${instance.instanceName}`\n })\n }\n\n async showInstanceDetail() {\n const { instanceName, scenarioName } = this.instance\n openPopup(\n html`\n <scenario-instance-view .instanceName=${instanceName} .scenarioName=${scenarioName}></scenario-instance-view>\n `,\n {\n size: 'large',\n title: `${i18next.t('title.scenario-instance')}`\n }\n )\n }\n}\n"]}
@@ -0,0 +1,29 @@
1
+ import './scenario-instance-log-view.js';
2
+ import { LitElement } from 'lit';
3
+ declare const ScenarioInstanceView_base: (new (...args: any[]) => {
4
+ _storeUnsubscribe: import("redux").Unsubscribe;
5
+ connectedCallback(): void;
6
+ disconnectedCallback(): void;
7
+ stateChanged(_state: unknown): void;
8
+ readonly isConnected: boolean;
9
+ }) & typeof LitElement;
10
+ export declare class ScenarioInstanceView extends ScenarioInstanceView_base {
11
+ static styles: import("lit").CSSResult[];
12
+ scenarioName?: string;
13
+ instanceName?: string;
14
+ instance?: any;
15
+ tab?: string;
16
+ step?: string;
17
+ key?: string;
18
+ contextPath?: string;
19
+ subscription: any;
20
+ render(): import("lit-html").TemplateResult<1>;
21
+ firstUpdated(): void;
22
+ disconnectedCallback(): void;
23
+ stateChanged(state: any): void;
24
+ renderDataObject(data: any): import("lit-html").TemplateResult<1>;
25
+ renderVariableObject(data: any): import("lit-html").TemplateResult<1>;
26
+ startSubscribe(): Promise<void>;
27
+ stopSubscribe(): Promise<void>;
28
+ }
29
+ export {};
@@ -0,0 +1,263 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import './scenario-instance-log-view.js';
3
+ import gql from 'graphql-tag';
4
+ import { css, html, LitElement } from 'lit';
5
+ import { customElement, property } from 'lit/decorators.js';
6
+ import { connect } from 'pwa-helpers/connect-mixin.js';
7
+ import { subscribe } from '@operato/graphql';
8
+ import { store } from '@operato/shell';
9
+ import { ScrollbarStyles } from '@operato/styles';
10
+ let ScenarioInstanceView = class ScenarioInstanceView extends connect(store)(LitElement) {
11
+ render() {
12
+ const tab = this.tab || 'info';
13
+ const { scenarioName, instanceName, description, state, progress, variables, data, message } = this.instance || {};
14
+ const { rate = 0, steps = 0, step = 0, rounds = 0 } = progress || {};
15
+ const diagram = `${this.contextPath || ''}/scenario-view/${this.scenarioName}`;
16
+ return html `
17
+ <div content>
18
+ <div tab>
19
+ <span @click=${e => (this.tab = 'info')} ?active=${tab == 'info'}>info</span>
20
+ <span @click=${e => (this.tab = 'variables')} ?active=${tab == 'variables'}>variables</span>
21
+ <span @click=${e => (this.tab = 'data')} ?active=${tab == 'data'}>data</span>
22
+ <span @click=${e => (this.tab = 'log')} ?active=${tab == 'log'}>log</span>
23
+ </div>
24
+ <div detail>
25
+ <div info ?active=${tab == 'info'}>
26
+ <ul>
27
+ <li>scenario name : <strong>${scenarioName}</strong></li>
28
+ <li>instance name : ${instanceName}</li>
29
+ <li>description : ${description}</li>
30
+ <li>state : ${state}</li>
31
+ <li>total steps : ${steps}</li>
32
+ <li>current step : ${step}</li>
33
+ <li>rounds : ${rounds}</li>
34
+ <li>messge : ${message}</li>
35
+ </ul>
36
+ <iframe diagram src="${diagram}"></iframe>
37
+ </div>
38
+ <div variables ?active=${tab == 'variables'}>${this.renderVariableObject(variables)}</div>
39
+ <div data ?active=${tab == 'data'}>${this.renderDataObject(data)}</div>
40
+ <scenario-instance-log-view
41
+ log
42
+ ?active=${tab == 'log'}
43
+ .scenarioName=${this.scenarioName}
44
+ .instanceName=${this.instanceName}
45
+ ></scenario-instance-log-view>
46
+ </div>
47
+ </div>
48
+ `;
49
+ }
50
+ firstUpdated() {
51
+ this.startSubscribe();
52
+ }
53
+ disconnectedCallback() {
54
+ super.disconnectedCallback();
55
+ this.stopSubscribe();
56
+ }
57
+ stateChanged(state) {
58
+ this.contextPath = state.app.contextPath;
59
+ }
60
+ renderDataObject(data) {
61
+ const keys = Object.keys(data || {});
62
+ if (keys.length == 0) {
63
+ return html `<pre>no data</pre>`;
64
+ }
65
+ const currentStep = this.step || keys[0];
66
+ return html `
67
+ <ul keys>
68
+ ${keys.map(step => html `<li @click=${e => (this.step = step)} ?active=${currentStep == step}>${step}</li>`)}
69
+ </ul>
70
+ <div value>
71
+ <pre>${data[currentStep] ? JSON.stringify(data[currentStep], null, 2) : ''}</pre>
72
+ </div>
73
+ `;
74
+ }
75
+ renderVariableObject(data) {
76
+ const keys = Object.keys(data || {});
77
+ if (keys.length == 0) {
78
+ return html `<pre>no data</pre>`;
79
+ }
80
+ const currentKey = this.key || keys[0];
81
+ return html `
82
+ <ul keys>
83
+ ${keys.map(key => html `<li @click=${e => (this.key = key)} ?active=${currentKey == key}>${key}</li>`)}
84
+ </ul>
85
+ <div value>
86
+ <pre>${data[currentKey] ? JSON.stringify(data[currentKey], null, 2) : ''}</pre>
87
+ </div>
88
+ `;
89
+ }
90
+ async startSubscribe() {
91
+ this.subscription = await subscribe({
92
+ query: gql `
93
+ subscription ($instanceName: String, $scenarioName: String) {
94
+ scenarioInstanceState(instanceName: $instanceName, scenarioName: $scenarioName) {
95
+ instanceName
96
+ scenarioName
97
+ state
98
+ progress {
99
+ rate
100
+ steps
101
+ step
102
+ rounds
103
+ }
104
+ variables
105
+ data
106
+ }
107
+ }
108
+ `,
109
+ variables: {
110
+ instanceName: this.instanceName,
111
+ scenarioName: this.scenarioName
112
+ }
113
+ }, {
114
+ next: async ({ data }) => {
115
+ data && (this.instance = data.scenarioInstanceState);
116
+ }
117
+ });
118
+ }
119
+ async stopSubscribe() {
120
+ var _a;
121
+ await ((_a = this.subscription) === null || _a === void 0 ? void 0 : _a.unsubscribe());
122
+ delete this.subscription;
123
+ }
124
+ };
125
+ ScenarioInstanceView.styles = [
126
+ ScrollbarStyles,
127
+ css `
128
+ :host {
129
+ display: flex;
130
+ flex-direction: column;
131
+ background-color: var(--md-sys-color-background);
132
+ }
133
+
134
+ [diagram] {
135
+ flex: 1;
136
+ height: 100%;
137
+ border: none;
138
+ }
139
+
140
+ [content] {
141
+ flex: 1;
142
+
143
+ display: flex;
144
+ flex-direction: column;
145
+ overflow: hidden;
146
+ }
147
+
148
+ [tab] {
149
+ display: flex;
150
+ }
151
+
152
+ [tab] span {
153
+ display: inline;
154
+ padding: var(--spacing-large) var(--spacing-large) var(--spacing-small) var(--spacing-large);
155
+ border-bottom: 3px solid transparent;
156
+ color: var(--md-sys-color-secondary);
157
+ text-transform: capitalize;
158
+ }
159
+
160
+ [tab] span[active] {
161
+ border-color: var(--md-sys-color-primary);
162
+ font-weight: bold;
163
+ }
164
+
165
+ [detail] {
166
+ flex: 1;
167
+ background-color: var(--md-sys-color-surface);
168
+ border-top: var(--border-dim-color);
169
+ overflow: hidden;
170
+ padding: var(--spacing-large);
171
+ }
172
+
173
+ [detail] > * {
174
+ display: none;
175
+ width: 100%;
176
+ height: 100%;
177
+ color: var(--md-sys-color-secondary);
178
+ }
179
+
180
+ [detail] > [active] {
181
+ display: flex;
182
+ overflow: auto;
183
+ }
184
+
185
+ pre {
186
+ margin: 0;
187
+ }
188
+
189
+ [detail] ul {
190
+ margin: 0;
191
+ padding: 0;
192
+ flex: 1;
193
+ list-style: inside '- ';
194
+ }
195
+ [detail] li {
196
+ padding: var(--spacing-medium) var(--spacing-small) var(--spacing-small) var(--spacing-small);
197
+ border-bottom: var(--border-dim-color);
198
+ }
199
+
200
+ li[active] {
201
+ font-weight: bold;
202
+ }
203
+
204
+ [value] {
205
+ flex: 1;
206
+ overflow: auto;
207
+ padding: var(--spacing-large);
208
+ }
209
+ scenario-instance-log-view [active] {
210
+ padding: 0;
211
+ }
212
+
213
+ @media only screen and (max-width: 460px) {
214
+ [info][active] {
215
+ display: block;
216
+ }
217
+ [detail] {
218
+ padding: var(--spacing-medium);
219
+ overflow: auto;
220
+ }
221
+ [detail] > * {
222
+ height: auto;
223
+ }
224
+ [diagram] {
225
+ width: 100%;
226
+ min-height: 500px;
227
+ }
228
+ }
229
+ `
230
+ ];
231
+ __decorate([
232
+ property({ type: String }),
233
+ __metadata("design:type", String)
234
+ ], ScenarioInstanceView.prototype, "scenarioName", void 0);
235
+ __decorate([
236
+ property({ type: String }),
237
+ __metadata("design:type", String)
238
+ ], ScenarioInstanceView.prototype, "instanceName", void 0);
239
+ __decorate([
240
+ property({ type: Object }),
241
+ __metadata("design:type", Object)
242
+ ], ScenarioInstanceView.prototype, "instance", void 0);
243
+ __decorate([
244
+ property({ type: String }),
245
+ __metadata("design:type", String)
246
+ ], ScenarioInstanceView.prototype, "tab", void 0);
247
+ __decorate([
248
+ property({ type: String }),
249
+ __metadata("design:type", String)
250
+ ], ScenarioInstanceView.prototype, "step", void 0);
251
+ __decorate([
252
+ property({ type: String }),
253
+ __metadata("design:type", String)
254
+ ], ScenarioInstanceView.prototype, "key", void 0);
255
+ __decorate([
256
+ property({ type: String }),
257
+ __metadata("design:type", String)
258
+ ], ScenarioInstanceView.prototype, "contextPath", void 0);
259
+ ScenarioInstanceView = __decorate([
260
+ customElement('scenario-instance-view')
261
+ ], ScenarioInstanceView);
262
+ export { ScenarioInstanceView };
263
+ //# sourceMappingURL=scenario-instance-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scenario-instance-view.js","sourceRoot":"","sources":["../../client/viewparts/scenario-instance-view.ts"],"names":[],"mappings":"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","sourcesContent":["import './scenario-instance-log-view.js'\n\nimport gql from 'graphql-tag'\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, query } from 'lit/decorators.js'\nimport { connect } from 'pwa-helpers/connect-mixin.js'\n\nimport { subscribe } from '@operato/graphql'\nimport { store } from '@operato/shell'\nimport { ScrollbarStyles } from '@operato/styles'\n\n@customElement('scenario-instance-view')\nexport class ScenarioInstanceView extends connect(store)(LitElement) {\n static styles = [\n ScrollbarStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n background-color: var(--md-sys-color-background);\n }\n\n [diagram] {\n flex: 1;\n height: 100%;\n border: none;\n }\n\n [content] {\n flex: 1;\n\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n\n [tab] {\n display: flex;\n }\n\n [tab] span {\n display: inline;\n padding: var(--spacing-large) var(--spacing-large) var(--spacing-small) var(--spacing-large);\n border-bottom: 3px solid transparent;\n color: var(--md-sys-color-secondary);\n text-transform: capitalize;\n }\n\n [tab] span[active] {\n border-color: var(--md-sys-color-primary);\n font-weight: bold;\n }\n\n [detail] {\n flex: 1;\n background-color: var(--md-sys-color-surface);\n border-top: var(--border-dim-color);\n overflow: hidden;\n padding: var(--spacing-large);\n }\n\n [detail] > * {\n display: none;\n width: 100%;\n height: 100%;\n color: var(--md-sys-color-secondary);\n }\n\n [detail] > [active] {\n display: flex;\n overflow: auto;\n }\n\n pre {\n margin: 0;\n }\n\n [detail] ul {\n margin: 0;\n padding: 0;\n flex: 1;\n list-style: inside '- ';\n }\n [detail] li {\n padding: var(--spacing-medium) var(--spacing-small) var(--spacing-small) var(--spacing-small);\n border-bottom: var(--border-dim-color);\n }\n\n li[active] {\n font-weight: bold;\n }\n\n [value] {\n flex: 1;\n overflow: auto;\n padding: var(--spacing-large);\n }\n scenario-instance-log-view [active] {\n padding: 0;\n }\n\n @media only screen and (max-width: 460px) {\n [info][active] {\n display: block;\n }\n [detail] {\n padding: var(--spacing-medium);\n overflow: auto;\n }\n [detail] > * {\n height: auto;\n }\n [diagram] {\n width: 100%;\n min-height: 500px;\n }\n }\n `\n ]\n\n @property({ type: String }) scenarioName?: string\n @property({ type: String }) instanceName?: string\n @property({ type: Object }) instance?: any\n @property({ type: String }) tab?: string\n @property({ type: String }) step?: string\n @property({ type: String }) key?: string\n @property({ type: String }) contextPath?: string\n\n subscription: any\n\n render() {\n const tab = this.tab || 'info'\n const { scenarioName, instanceName, description, state, progress, variables, data, message } = this.instance || {}\n const { rate = 0, steps = 0, step = 0, rounds = 0 } = progress || {}\n const diagram = `${this.contextPath || ''}/scenario-view/${this.scenarioName}`\n\n return html`\n <div content>\n <div tab>\n <span @click=${e => (this.tab = 'info')} ?active=${tab == 'info'}>info</span>\n <span @click=${e => (this.tab = 'variables')} ?active=${tab == 'variables'}>variables</span>\n <span @click=${e => (this.tab = 'data')} ?active=${tab == 'data'}>data</span>\n <span @click=${e => (this.tab = 'log')} ?active=${tab == 'log'}>log</span>\n </div>\n <div detail>\n <div info ?active=${tab == 'info'}>\n <ul>\n <li>scenario name : <strong>${scenarioName}</strong></li>\n <li>instance name : ${instanceName}</li>\n <li>description : ${description}</li>\n <li>state : ${state}</li>\n <li>total steps : ${steps}</li>\n <li>current step : ${step}</li>\n <li>rounds : ${rounds}</li>\n <li>messge : ${message}</li>\n </ul>\n <iframe diagram src=\"${diagram}\"></iframe>\n </div>\n <div variables ?active=${tab == 'variables'}>${this.renderVariableObject(variables)}</div>\n <div data ?active=${tab == 'data'}>${this.renderDataObject(data)}</div>\n <scenario-instance-log-view\n log\n ?active=${tab == 'log'}\n .scenarioName=${this.scenarioName}\n .instanceName=${this.instanceName}\n ></scenario-instance-log-view>\n </div>\n </div>\n `\n }\n\n firstUpdated() {\n this.startSubscribe()\n }\n\n disconnectedCallback() {\n super.disconnectedCallback()\n this.stopSubscribe()\n }\n\n stateChanged(state) {\n this.contextPath = state.app.contextPath\n }\n\n renderDataObject(data) {\n const keys = Object.keys(data || {})\n\n if (keys.length == 0) {\n return html`<pre>no data</pre>`\n }\n\n const currentStep = this.step || keys[0]\n\n return html`\n <ul keys>\n ${keys.map(step => html`<li @click=${e => (this.step = step)} ?active=${currentStep == step}>${step}</li>`)}\n </ul>\n <div value>\n <pre>${data[currentStep] ? JSON.stringify(data[currentStep], null, 2) : ''}</pre>\n </div>\n `\n }\n\n renderVariableObject(data) {\n const keys = Object.keys(data || {})\n\n if (keys.length == 0) {\n return html`<pre>no data</pre>`\n }\n\n const currentKey = this.key || keys[0]\n\n return html`\n <ul keys>\n ${keys.map(key => html`<li @click=${e => (this.key = key)} ?active=${currentKey == key}>${key}</li>`)}\n </ul>\n <div value>\n <pre>${data[currentKey] ? JSON.stringify(data[currentKey], null, 2) : ''}</pre>\n </div>\n `\n }\n\n async startSubscribe() {\n this.subscription = await subscribe(\n {\n query: gql`\n subscription ($instanceName: String, $scenarioName: String) {\n scenarioInstanceState(instanceName: $instanceName, scenarioName: $scenarioName) {\n instanceName\n scenarioName\n state\n progress {\n rate\n steps\n step\n rounds\n }\n variables\n data\n }\n }\n `,\n variables: {\n instanceName: this.instanceName,\n scenarioName: this.scenarioName\n }\n },\n {\n next: async ({ data }) => {\n data && (this.instance = data.scenarioInstanceState)\n }\n }\n )\n }\n\n async stopSubscribe() {\n await this.subscription?.unsubscribe()\n delete this.subscription\n }\n}\n"]}