@red-hat-developer-hub/backstage-plugin-orchestrator-backend 4.1.1 → 5.1.0

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 (72) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/dist/service/DataIndexService.cjs.js +2 -4
  3. package/dist/service/DataIndexService.cjs.js.map +1 -1
  4. package/dist/service/DevModeService.cjs.js.map +1 -1
  5. package/dist/service/OrchestratorService.cjs.js +6 -3
  6. package/dist/service/OrchestratorService.cjs.js.map +1 -1
  7. package/dist/service/SonataFlowService.cjs.js +14 -47
  8. package/dist/service/SonataFlowService.cjs.js.map +1 -1
  9. package/dist/service/api/mapping/V2Mappings.cjs.js +0 -1
  10. package/dist/service/api/mapping/V2Mappings.cjs.js.map +1 -1
  11. package/dist/service/api/v2.cjs.js +7 -9
  12. package/dist/service/api/v2.cjs.js.map +1 -1
  13. package/dist/service/router.cjs.js +164 -71
  14. package/dist/service/router.cjs.js.map +1 -1
  15. package/package.json +5 -4
  16. package/static/generated/envelope/combined.bundle.js +1 -0
  17. package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/7B8391DDA1E35A2797E163B741F050D7.cache.js +80 -0
  18. package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/E0FAC72ADB096551A5346E4435AA4F35.cache.js +80 -0
  19. package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/bootstrap-daterangepicker/daterangepicker.css +365 -0
  20. package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/bootstrap-select/css/bootstrap-select.min.css +279 -0
  21. package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/clear.cache.gif +0 -0
  22. package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/compilation-mappings.txt +7 -0
  23. package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/css/animate-3.5.2.min.cache.css +2967 -0
  24. package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/css/bootstrap-3.4.1.min.cache.css +6971 -0
  25. package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/css/bootstrap-datepicker3-1.6.4.min.cache.css +471 -0
  26. package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/css/bootstrap-datetimepicker-2.4.4.min.cache.css +367 -0
  27. package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/css/bootstrap-notify-custom.min.cache.css +9 -0
  28. package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/css/bootstrap-slider-9.2.0.min.cache.css +264 -0
  29. package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/css/bootstrap-theme-3.4.1.min.cache.css +614 -0
  30. package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/css/card-1.0.1.cache.css +89 -0
  31. package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/css/font-awesome-4.7.0.min.cache.css +2335 -0
  32. package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/css/patternfly-additions.min.css +6662 -0
  33. package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/css/patternfly.min.css +10014 -0
  34. package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/css/typeahead-0.10.5.min.cache.css +69 -0
  35. package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/fonts/FontAwesome.otf +0 -0
  36. package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/fonts/OpenSans-Bold-webfont.ttf +0 -0
  37. package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/fonts/OpenSans-BoldItalic-webfont.ttf +0 -0
  38. package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/fonts/OpenSans-ExtraBold-webfont.ttf +0 -0
  39. package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/fonts/OpenSans-ExtraBoldItalic-webfont.ttf +0 -0
  40. package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/fonts/OpenSans-Italic-webfont.ttf +0 -0
  41. package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/fonts/OpenSans-Light-webfont.ttf +0 -0
  42. package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/fonts/OpenSans-LightItalic-webfont.ttf +0 -0
  43. package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/fonts/OpenSans-Regular-webfont.ttf +0 -0
  44. package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/fonts/OpenSans-Semibold-webfont.ttf +0 -0
  45. package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/fonts/OpenSans-SemiboldItalic-webfont.ttf +0 -0
  46. package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/fonts/PatternFlyIcons-webfont.ttf +0 -0
  47. package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/fonts/fontawesome-webfont.eot +0 -0
  48. package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/fonts/fontawesome-webfont.svg +2671 -0
  49. package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/fonts/fontawesome-webfont.ttf +0 -0
  50. package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/fonts/fontawesome-webfont.woff +0 -0
  51. package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/fonts/fontawesome-webfont.woff2 +0 -0
  52. package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/fonts/glyphicons-halflings-regular.eot +0 -0
  53. package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/fonts/glyphicons-halflings-regular.svg +288 -0
  54. package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/fonts/glyphicons-halflings-regular.ttf +0 -0
  55. package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/fonts/glyphicons-halflings-regular.woff +0 -0
  56. package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/fonts/glyphicons-halflings-regular.woff2 +0 -0
  57. package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/jquery-ui/jquery-ui.min.css +879 -0
  58. package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/js/bootstrap-3.4.1.min.cache.js +1498 -0
  59. package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/js/gwtbootstrap3.js +91 -0
  60. package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/js/jquery-1.12.4.min.cache.js +5007 -0
  61. package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/org.kie.workbench.common.stunner.sw.KogitoSWEditor.devmode.js +1 -0
  62. package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/org.kie.workbench.common.stunner.sw.KogitoSWEditor.nocache.js +27 -0
  63. package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/uberfire-patternfly.css +342 -0
  64. package/static/generated/envelope/diagram.bundle.js +1 -0
  65. package/static/generated/envelope/editor.worker.js +1 -0
  66. package/static/generated/envelope/json.worker.js +1 -0
  67. package/static/generated/envelope/monaco-editor.chunk.js +1 -0
  68. package/static/generated/envelope/serverless-workflow-combined-editor-envelope.html +10 -0
  69. package/static/generated/envelope/serverless-workflow-diagram-editor-envelope.html +10 -0
  70. package/static/generated/envelope/serverless-workflow-text-editor-envelope.html +10 -0
  71. package/static/generated/envelope/text.bundle.js +1 -0
  72. package/static/generated/envelope/yaml.worker.worker.js +22 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,44 @@
1
1
  ### Dependencies
2
2
 
3
+ ## 5.1.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 5ab913b: Access can now be managed on a per-workflow basis.
8
+
9
+ ### Patch Changes
10
+
11
+ - 5b90f96: resolve dependency issues
12
+ - Updated dependencies [5b90f96]
13
+ - Updated dependencies [5ab913b]
14
+ - @red-hat-developer-hub/backstage-plugin-orchestrator-common@1.25.0
15
+
16
+ ## 5.0.1
17
+
18
+ ### Patch Changes
19
+
20
+ - 9156260: Fixes the workflow editor
21
+ - 1d4cfa1: update openapi flpath-1893
22
+ - 6a71932: added export-dynamic scripts
23
+ - Updated dependencies [b6cf167]
24
+ - Updated dependencies [1d4cfa1]
25
+ - @red-hat-developer-hub/backstage-plugin-orchestrator-common@1.24.3
26
+
27
+ ## 5.0.0
28
+
29
+ ### Major Changes
30
+
31
+ - 9547093: fix SonataFlowService.ts:fetchWorkflowOverviewBySource to fetch less instances
32
+
33
+ ### Patch Changes
34
+
35
+ - 9f61eb0: execute API should allow no inputs
36
+ - 0703b6a: we fail when workflow has 0 instances
37
+ - bab8daa: The parent assessment link is shown again thanks to fixing passing of the businessKey when "execute" action is trigerred.
38
+ - Updated dependencies [9f61eb0]
39
+ - Updated dependencies [bab8daa]
40
+ - @red-hat-developer-hub/backstage-plugin-orchestrator-common@1.24.2
41
+
3
42
  ## 4.1.1
4
43
 
5
44
  ### Patch Changes
@@ -28,9 +28,7 @@ class DataIndexService {
28
28
  }
29
29
  async initInputProcessDefinitionArgs() {
30
30
  if (this.processDefinitionArguments.length === 0) {
31
- this.processDefinitionArguments = await this.inspectInputArgument(
32
- "ProcessDefinition"
33
- );
31
+ this.processDefinitionArguments = await this.inspectInputArgument("ProcessDefinition");
34
32
  }
35
33
  return this.processDefinitionArguments;
36
34
  }
@@ -284,7 +282,7 @@ class DataIndexService {
284
282
  return processDefinitions[0].source;
285
283
  }
286
284
  async fetchInstancesByDefinitionId(args) {
287
- const graphQlQuery = `{ ProcessInstances(where: {processId: {equal: "${args.definitionId}" } }, pagination: {limit: ${args.limit}, offset: ${args.offset}}) { id, processName, state, start, end } }`;
285
+ const graphQlQuery = `{ ProcessInstances(where: {processId: {equal: "${args.definitionId}" } }, orderBy: {start:DESC}, pagination: {limit: ${args.limit}, offset: ${args.offset}}) { id, processName, state, start, end } }`;
288
286
  const result = await this.client.query(graphQlQuery, {});
289
287
  this.logger.debug(
290
288
  `Fetch workflow instances result: ${JSON.stringify(result)}`
@@ -1 +1 @@
1
- {"version":3,"file":"DataIndexService.cjs.js","sources":["../../src/service/DataIndexService.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { LoggerService } from '@backstage/backend-plugin-api';\n\nimport { Client, fetchExchange, gql } from '@urql/core';\n\nimport {\n Filter,\n fromWorkflowSource,\n getWorkflowCategory,\n IntrospectionField,\n parseWorkflowVariables,\n ProcessInstance,\n WorkflowDefinition,\n WorkflowInfo,\n} from '@red-hat-developer-hub/backstage-plugin-orchestrator-common';\n\nimport { ErrorBuilder } from '../helpers/errorBuilder';\nimport { buildFilterCondition } from '../helpers/filterBuilder';\nimport { buildGraphQlQuery } from '../helpers/queryBuilder';\nimport { Pagination } from '../types/pagination';\nimport { FETCH_PROCESS_INSTANCES_SORT_FIELD } from './constants';\n\nexport class DataIndexService {\n private readonly client: Client;\n public processDefinitionArguments: IntrospectionField[] = [];\n public processInstanceArguments: IntrospectionField[] = [];\n\n public constructor(\n private readonly dataIndexUrl: string,\n private readonly logger: LoggerService,\n ) {\n if (!dataIndexUrl.length) {\n throw ErrorBuilder.GET_NO_DATA_INDEX_URL_ERR();\n }\n\n this.client = this.getNewGraphQLClient();\n }\n\n private getNewGraphQLClient(): Client {\n const diURL = `${this.dataIndexUrl}/graphql`;\n return new Client({\n url: diURL,\n exchanges: [fetchExchange],\n });\n }\n\n public async initInputProcessDefinitionArgs(): Promise<IntrospectionField[]> {\n if (this.processDefinitionArguments.length === 0) {\n this.processDefinitionArguments = await this.inspectInputArgument(\n 'ProcessDefinition',\n );\n }\n return this.processDefinitionArguments; // For testing purposes\n }\n\n public graphQLArgumentQuery(type: string): string {\n return `query ${type}Argument {\n __type(name: \"${type}Argument\") {\n kind\n name\n inputFields {\n name\n type {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n }\n }\n }\n }\n }\n }\n }`;\n }\n\n public async inspectInputArgument(\n type: string,\n ): Promise<IntrospectionField[]> {\n const result = await this.client.query(this.graphQLArgumentQuery(type), {});\n\n this.logger.debug(`Introspection query result: ${JSON.stringify(result)}`);\n\n if (result?.error) {\n this.logger.error(`Error executing introspection query ${result.error}`);\n throw result.error;\n }\n\n const pairs: IntrospectionField[] = [];\n if (result?.data?.__type?.inputFields) {\n for (const field of result.data.__type.inputFields) {\n if (\n field.name !== 'and' &&\n field.name !== 'or' &&\n field.name !== 'not'\n ) {\n pairs.push({\n name: field.name,\n type: {\n name: field.type.name,\n kind: field.type.kind,\n ofType: field.type.ofType,\n },\n });\n }\n }\n }\n return pairs;\n }\n\n public async abortWorkflowInstance(instanceId: string): Promise<void> {\n this.logger.info(`Aborting workflow instance ${instanceId}`);\n const ProcessInstanceAbortMutationDocument = gql`\n mutation ProcessInstanceAbortMutation($id: String) {\n ProcessInstanceAbort(id: $id)\n }\n `;\n\n const result = await this.client.mutation(\n ProcessInstanceAbortMutationDocument,\n { id: instanceId },\n );\n\n this.logger.debug(\n `Abort workflow instance result: ${JSON.stringify(result)}`,\n );\n\n if (result.error) {\n throw new Error(\n `Error aborting workflow instance ${instanceId}: ${result.error}`,\n );\n }\n this.logger.debug(`Successfully aborted workflow instance ${instanceId}`);\n }\n\n public async fetchWorkflowInfo(\n definitionId: string,\n ): Promise<WorkflowInfo | undefined> {\n const graphQlQuery = `{ ProcessDefinitions ( where: {id: {equal: \"${definitionId}\" } } ) { id, name, version, type, endpoint, serviceUrl, source } }`;\n\n const result = await this.client.query(graphQlQuery, {});\n\n this.logger.debug(\n `Get workflow definition result: ${JSON.stringify(result)}`,\n );\n\n if (result.error) {\n this.logger.error(`Error fetching workflow definition ${result.error}`);\n throw result.error;\n }\n\n const processDefinitions = result.data.ProcessDefinitions as WorkflowInfo[];\n\n if (processDefinitions.length === 0) {\n this.logger.info(`No workflow definition found for ${definitionId}`);\n return undefined;\n }\n\n return processDefinitions[0];\n }\n\n public async fetchWorkflowServiceUrls(): Promise<Record<string, string>> {\n const graphQlQuery = `{ ProcessDefinitions { id, serviceUrl } }`;\n\n const result = await this.client.query(graphQlQuery, {});\n\n this.logger.debug(\n `Get workflow service urls result: ${JSON.stringify(result)}`,\n );\n\n if (result.error) {\n this.logger.error(`Error fetching workflow service urls ${result.error}`);\n throw result.error;\n }\n\n const processDefinitions = result.data.ProcessDefinitions as WorkflowInfo[];\n return processDefinitions\n .filter(definition => definition.serviceUrl)\n .map(definition => ({ [definition.id]: definition.serviceUrl! }))\n .reduce((acc, curr) => ({ ...acc, ...curr }), {});\n }\n\n public async fetchWorkflowInfos(args: {\n definitionIds?: string[];\n pagination?: Pagination;\n filter?: Filter;\n }): Promise<WorkflowInfo[]> {\n this.logger.info(`fetchWorkflowInfos() called: ${this.dataIndexUrl}`);\n const { definitionIds, pagination, filter } = args;\n\n const definitionIdsCondition =\n definitionIds !== undefined && definitionIds.length > 0\n ? `id: {in: ${JSON.stringify(definitionIds)}}`\n : undefined;\n\n const filterCondition = filter\n ? buildFilterCondition(\n await this.initInputProcessDefinitionArgs(),\n 'ProcessDefinition',\n filter,\n )\n : undefined;\n\n let whereClause: string | undefined;\n if (definitionIds && filter) {\n whereClause = `and: [{${definitionIdsCondition}}, {${filterCondition}}]`;\n } else if (definitionIdsCondition || filterCondition) {\n whereClause = definitionIdsCondition ?? filterCondition;\n } else {\n whereClause = undefined;\n }\n\n const graphQlQuery = buildGraphQlQuery({\n type: 'ProcessDefinitions',\n queryBody: 'id, name, version, type, endpoint, serviceUrl, source',\n whereClause,\n pagination,\n });\n this.logger.debug(`GraphQL query: ${graphQlQuery}`);\n const result = await this.client.query(graphQlQuery, {});\n this.logger.debug(\n `Get workflow definitions result: ${JSON.stringify(result)}`,\n );\n\n if (result.error) {\n this.logger.error(\n `Error fetching data index swf results ${result.error}`,\n );\n throw result.error;\n }\n\n return result.data.ProcessDefinitions;\n }\n\n public async fetchInstances(args: {\n definitionIds?: string[];\n pagination?: Pagination;\n filter?: Filter;\n }): Promise<ProcessInstance[]> {\n const { pagination, definitionIds, filter } = args;\n if (pagination) pagination.sortField ??= FETCH_PROCESS_INSTANCES_SORT_FIELD;\n\n const processIdNotNullCondition = 'processId: {isNull: false}';\n const definitionIdsCondition = definitionIds\n ? `processId: {in: ${JSON.stringify(definitionIds)}}`\n : undefined;\n const type = 'ProcessInstance';\n const filterCondition = filter\n ? buildFilterCondition(\n await this.inspectInputArgument(type),\n type,\n filter,\n )\n : '';\n\n let whereClause = '';\n const conditions = [];\n\n if (processIdNotNullCondition) {\n conditions.push(`{${processIdNotNullCondition}}`);\n }\n\n if (definitionIdsCondition) {\n conditions.push(`{${definitionIdsCondition}}`);\n }\n\n if (filter) {\n conditions.push(`{${filterCondition}}`);\n }\n\n if (conditions.length === 0) {\n whereClause = processIdNotNullCondition;\n } else if (conditions.length === 1) {\n whereClause = conditions[0].slice(1, -1); // Remove the outer braces\n } else if (conditions.length > 1) {\n whereClause = `and: [${conditions.join(', ')}]`;\n }\n\n const graphQlQuery = buildGraphQlQuery({\n type: 'ProcessInstances',\n queryBody:\n 'id, processName, processId, businessKey, state, start, end, nodes { id }, variables, parentProcessInstance {id, processName, businessKey}',\n whereClause,\n pagination,\n });\n\n this.logger.debug(`GraphQL query: ${graphQlQuery}`);\n\n const result = await this.client.query(graphQlQuery, {});\n\n this.logger.debug(\n `Fetch process instances result: ${JSON.stringify(result)}`,\n );\n\n const processInstancesSrc = result.data\n .ProcessInstances as ProcessInstance[];\n\n const processInstances = await Promise.all(\n processInstancesSrc.map(async instance => {\n return await this.getWorkflowDefinitionFromInstance(instance);\n }),\n );\n return processInstances;\n }\n\n public async fetchInstancesTotalCount(\n definitionIds?: string[],\n filter?: Filter,\n ): Promise<number> {\n const definitionIdsCondition = definitionIds\n ? `processId: {in: ${JSON.stringify(definitionIds)}}`\n : undefined;\n this.initInputProcessDefinitionArgs();\n const filterCondition = filter\n ? buildFilterCondition(\n await this.inspectInputArgument('ProcessInstance'),\n 'ProcessInstance',\n filter,\n )\n : '';\n\n let whereClause: string | undefined;\n if (definitionIds && filter) {\n whereClause = `and: [{${definitionIdsCondition}}, {${filterCondition}}]`;\n } else if (definitionIdsCondition || filterCondition) {\n whereClause = definitionIdsCondition ?? filterCondition;\n }\n\n const graphQlQuery = buildGraphQlQuery({\n type: 'ProcessInstances',\n queryBody: 'id',\n whereClause,\n });\n this.logger.debug(`GraphQL query: ${graphQlQuery}`);\n\n const result = await this.client.query(graphQlQuery, {});\n\n if (result.error) {\n this.logger.error(\n `Error when fetching instances total count: ${result.error}`,\n );\n throw result.error;\n }\n\n const idArr = result.data.ProcessInstances as ProcessInstance[];\n\n return idArr.length;\n }\n\n private async getWorkflowDefinitionFromInstance(instance: ProcessInstance) {\n const workflowInfo = await this.fetchWorkflowInfo(instance.processId);\n if (!workflowInfo?.source) {\n throw new Error(\n `Workflow defintion is required to fetch instance ${instance.id}`,\n );\n }\n const workflowDefinitionSrc: WorkflowDefinition = fromWorkflowSource(\n workflowInfo.source,\n );\n if (workflowInfo) {\n instance.category = getWorkflowCategory(workflowDefinitionSrc);\n instance.description = workflowInfo.description;\n }\n return instance;\n }\n\n public async fetchWorkflowSource(\n definitionId: string,\n ): Promise<string | undefined> {\n const graphQlQuery = `{ ProcessDefinitions ( where: {id: {equal: \"${definitionId}\" } } ) { id, source } }`;\n\n const result = await this.client.query(graphQlQuery, {});\n\n this.logger.debug(\n `Fetch workflow source result: ${JSON.stringify(result)}`,\n );\n\n if (result.error) {\n this.logger.error(`Error when fetching workflow source: ${result.error}`);\n return undefined;\n }\n\n const processDefinitions = result.data.ProcessDefinitions as WorkflowInfo[];\n\n if (processDefinitions.length === 0) {\n this.logger.info(`No workflow source found for ${definitionId}`);\n return undefined;\n }\n\n return processDefinitions[0].source;\n }\n\n public async fetchInstancesByDefinitionId(args: {\n definitionId: string;\n limit: number;\n offset: number;\n }): Promise<ProcessInstance[]> {\n const graphQlQuery = `{ ProcessInstances(where: {processId: {equal: \"${args.definitionId}\" } }, pagination: {limit: ${args.limit}, offset: ${args.offset}}) { id, processName, state, start, end } }`;\n\n const result = await this.client.query(graphQlQuery, {});\n\n this.logger.debug(\n `Fetch workflow instances result: ${JSON.stringify(result)}`,\n );\n\n if (result.error) {\n this.logger.error(\n `Error when fetching workflow instances: ${result.error}`,\n );\n throw result.error;\n }\n\n return result.data.ProcessInstances;\n }\n\n public async fetchInstanceVariables(\n instanceId: string,\n ): Promise<object | undefined> {\n const graphQlQuery = `{ ProcessInstances (where: { id: {equal: \"${instanceId}\" } } ) { variables } }`;\n\n const result = await this.client.query(graphQlQuery, {});\n\n this.logger.debug(\n `Fetch process instance variables result: ${JSON.stringify(result)}`,\n );\n\n if (result.error) {\n this.logger.error(\n `Error when fetching process instance variables: ${result.error}`,\n );\n throw result.error;\n }\n\n const processInstances = result.data.ProcessInstances as ProcessInstance[];\n\n if (processInstances.length === 0) {\n return undefined;\n }\n\n return parseWorkflowVariables(processInstances[0].variables as object);\n }\n\n public async fetchDefinitionIdByInstanceId(\n instanceId: string,\n ): Promise<string | undefined> {\n const graphQlQuery = `{ ProcessInstances (where: { id: {equal: \"${instanceId}\" } } ) { processId } }`;\n\n const result = await this.client.query(graphQlQuery, {});\n\n this.logger.debug(\n `Fetch process id from instance result: ${JSON.stringify(result)}`,\n );\n\n if (result.error) {\n this.logger.error(\n `Error when fetching process id from instance: ${result.error}`,\n );\n throw result.error;\n }\n\n const processInstances = result.data.ProcessInstances as ProcessInstance[];\n\n if (processInstances.length === 0) {\n return undefined;\n }\n\n return processInstances[0].processId;\n }\n\n public async fetchInstance(\n instanceId: string,\n ): Promise<ProcessInstance | undefined> {\n const FindProcessInstanceQuery = gql`\n query FindProcessInstanceQuery($instanceId: String!) {\n ProcessInstances(where: { id: { equal: $instanceId } }) {\n id\n processName\n processId\n serviceUrl\n businessKey\n state\n start\n end\n nodes {\n id\n nodeId\n definitionId\n type\n name\n enter\n exit\n }\n variables\n parentProcessInstance {\n id\n processName\n businessKey\n }\n error {\n nodeDefinitionId\n message\n }\n }\n }\n `;\n\n const result = await this.client.query(FindProcessInstanceQuery, {\n instanceId,\n });\n\n this.logger.debug(\n `Fetch process instance result: ${JSON.stringify(result)}`,\n );\n\n if (result.error) {\n this.logger.error(\n `Error when fetching process instances: ${result.error}`,\n );\n throw result.error;\n }\n\n const processInstances = result.data.ProcessInstances as ProcessInstance[];\n\n if (processInstances.length === 0) {\n return undefined;\n }\n\n const instance = processInstances[0];\n\n const workflowInfo = await this.fetchWorkflowInfo(instance.processId);\n if (!workflowInfo?.source) {\n throw new Error(\n `Workflow defintion is required to fetch instance ${instance.id}`,\n );\n }\n const workflowDefinitionSrc: WorkflowDefinition = fromWorkflowSource(\n workflowInfo.source,\n );\n if (workflowInfo) {\n instance.category = getWorkflowCategory(workflowDefinitionSrc);\n instance.description = workflowDefinitionSrc.description;\n }\n return instance;\n }\n}\n"],"names":["ErrorBuilder","Client","fetchExchange","gql","buildFilterCondition","buildGraphQlQuery","FETCH_PROCESS_INSTANCES_SORT_FIELD","fromWorkflowSource","getWorkflowCategory","parseWorkflowVariables"],"mappings":"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"}
1
+ {"version":3,"file":"DataIndexService.cjs.js","sources":["../../src/service/DataIndexService.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { LoggerService } from '@backstage/backend-plugin-api';\n\nimport { Client, fetchExchange, gql } from '@urql/core';\n\nimport {\n Filter,\n fromWorkflowSource,\n getWorkflowCategory,\n IntrospectionField,\n parseWorkflowVariables,\n ProcessInstance,\n WorkflowDefinition,\n WorkflowInfo,\n} from '@red-hat-developer-hub/backstage-plugin-orchestrator-common';\n\nimport { ErrorBuilder } from '../helpers/errorBuilder';\nimport { buildFilterCondition } from '../helpers/filterBuilder';\nimport { buildGraphQlQuery } from '../helpers/queryBuilder';\nimport { Pagination } from '../types/pagination';\nimport { FETCH_PROCESS_INSTANCES_SORT_FIELD } from './constants';\n\nexport class DataIndexService {\n private readonly client: Client;\n public processDefinitionArguments: IntrospectionField[] = [];\n public processInstanceArguments: IntrospectionField[] = [];\n\n public constructor(\n private readonly dataIndexUrl: string,\n private readonly logger: LoggerService,\n ) {\n if (!dataIndexUrl.length) {\n throw ErrorBuilder.GET_NO_DATA_INDEX_URL_ERR();\n }\n\n this.client = this.getNewGraphQLClient();\n }\n\n private getNewGraphQLClient(): Client {\n const diURL = `${this.dataIndexUrl}/graphql`;\n return new Client({\n url: diURL,\n exchanges: [fetchExchange],\n });\n }\n\n public async initInputProcessDefinitionArgs(): Promise<IntrospectionField[]> {\n if (this.processDefinitionArguments.length === 0) {\n this.processDefinitionArguments =\n await this.inspectInputArgument('ProcessDefinition');\n }\n return this.processDefinitionArguments; // For testing purposes\n }\n\n public graphQLArgumentQuery(type: string): string {\n return `query ${type}Argument {\n __type(name: \"${type}Argument\") {\n kind\n name\n inputFields {\n name\n type {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n }\n }\n }\n }\n }\n }\n }`;\n }\n\n public async inspectInputArgument(\n type: string,\n ): Promise<IntrospectionField[]> {\n const result = await this.client.query(this.graphQLArgumentQuery(type), {});\n\n this.logger.debug(`Introspection query result: ${JSON.stringify(result)}`);\n\n if (result?.error) {\n this.logger.error(`Error executing introspection query ${result.error}`);\n throw result.error;\n }\n\n const pairs: IntrospectionField[] = [];\n if (result?.data?.__type?.inputFields) {\n for (const field of result.data.__type.inputFields) {\n if (\n field.name !== 'and' &&\n field.name !== 'or' &&\n field.name !== 'not'\n ) {\n pairs.push({\n name: field.name,\n type: {\n name: field.type.name,\n kind: field.type.kind,\n ofType: field.type.ofType,\n },\n });\n }\n }\n }\n return pairs;\n }\n\n public async abortWorkflowInstance(instanceId: string): Promise<void> {\n this.logger.info(`Aborting workflow instance ${instanceId}`);\n const ProcessInstanceAbortMutationDocument = gql`\n mutation ProcessInstanceAbortMutation($id: String) {\n ProcessInstanceAbort(id: $id)\n }\n `;\n\n const result = await this.client.mutation(\n ProcessInstanceAbortMutationDocument,\n { id: instanceId },\n );\n\n this.logger.debug(\n `Abort workflow instance result: ${JSON.stringify(result)}`,\n );\n\n if (result.error) {\n throw new Error(\n `Error aborting workflow instance ${instanceId}: ${result.error}`,\n );\n }\n this.logger.debug(`Successfully aborted workflow instance ${instanceId}`);\n }\n\n public async fetchWorkflowInfo(\n definitionId: string,\n ): Promise<WorkflowInfo | undefined> {\n const graphQlQuery = `{ ProcessDefinitions ( where: {id: {equal: \"${definitionId}\" } } ) { id, name, version, type, endpoint, serviceUrl, source } }`;\n\n const result = await this.client.query(graphQlQuery, {});\n\n this.logger.debug(\n `Get workflow definition result: ${JSON.stringify(result)}`,\n );\n\n if (result.error) {\n this.logger.error(`Error fetching workflow definition ${result.error}`);\n throw result.error;\n }\n\n const processDefinitions = result.data.ProcessDefinitions as WorkflowInfo[];\n\n if (processDefinitions.length === 0) {\n this.logger.info(`No workflow definition found for ${definitionId}`);\n return undefined;\n }\n\n return processDefinitions[0];\n }\n\n public async fetchWorkflowServiceUrls(): Promise<Record<string, string>> {\n const graphQlQuery = `{ ProcessDefinitions { id, serviceUrl } }`;\n\n const result = await this.client.query(graphQlQuery, {});\n\n this.logger.debug(\n `Get workflow service urls result: ${JSON.stringify(result)}`,\n );\n\n if (result.error) {\n this.logger.error(`Error fetching workflow service urls ${result.error}`);\n throw result.error;\n }\n\n const processDefinitions = result.data.ProcessDefinitions as WorkflowInfo[];\n return processDefinitions\n .filter(definition => definition.serviceUrl)\n .map(definition => ({ [definition.id]: definition.serviceUrl! }))\n .reduce((acc, curr) => ({ ...acc, ...curr }), {});\n }\n\n public async fetchWorkflowInfos(args: {\n definitionIds?: string[];\n pagination?: Pagination;\n filter?: Filter;\n }): Promise<WorkflowInfo[]> {\n this.logger.info(`fetchWorkflowInfos() called: ${this.dataIndexUrl}`);\n const { definitionIds, pagination, filter } = args;\n\n const definitionIdsCondition =\n definitionIds !== undefined && definitionIds.length > 0\n ? `id: {in: ${JSON.stringify(definitionIds)}}`\n : undefined;\n\n const filterCondition = filter\n ? buildFilterCondition(\n await this.initInputProcessDefinitionArgs(),\n 'ProcessDefinition',\n filter,\n )\n : undefined;\n\n let whereClause: string | undefined;\n if (definitionIds && filter) {\n whereClause = `and: [{${definitionIdsCondition}}, {${filterCondition}}]`;\n } else if (definitionIdsCondition || filterCondition) {\n whereClause = definitionIdsCondition ?? filterCondition;\n } else {\n whereClause = undefined;\n }\n\n const graphQlQuery = buildGraphQlQuery({\n type: 'ProcessDefinitions',\n queryBody: 'id, name, version, type, endpoint, serviceUrl, source',\n whereClause,\n pagination,\n });\n this.logger.debug(`GraphQL query: ${graphQlQuery}`);\n const result = await this.client.query(graphQlQuery, {});\n this.logger.debug(\n `Get workflow definitions result: ${JSON.stringify(result)}`,\n );\n\n if (result.error) {\n this.logger.error(\n `Error fetching data index swf results ${result.error}`,\n );\n throw result.error;\n }\n\n return result.data.ProcessDefinitions;\n }\n\n public async fetchInstances(args: {\n definitionIds?: string[];\n pagination?: Pagination;\n filter?: Filter;\n }): Promise<ProcessInstance[]> {\n const { pagination, definitionIds, filter } = args;\n if (pagination) pagination.sortField ??= FETCH_PROCESS_INSTANCES_SORT_FIELD;\n\n const processIdNotNullCondition = 'processId: {isNull: false}';\n const definitionIdsCondition = definitionIds\n ? `processId: {in: ${JSON.stringify(definitionIds)}}`\n : undefined;\n const type = 'ProcessInstance';\n const filterCondition = filter\n ? buildFilterCondition(\n await this.inspectInputArgument(type),\n type,\n filter,\n )\n : '';\n\n let whereClause = '';\n const conditions = [];\n\n if (processIdNotNullCondition) {\n conditions.push(`{${processIdNotNullCondition}}`);\n }\n\n if (definitionIdsCondition) {\n conditions.push(`{${definitionIdsCondition}}`);\n }\n\n if (filter) {\n conditions.push(`{${filterCondition}}`);\n }\n\n if (conditions.length === 0) {\n whereClause = processIdNotNullCondition;\n } else if (conditions.length === 1) {\n whereClause = conditions[0].slice(1, -1); // Remove the outer braces\n } else if (conditions.length > 1) {\n whereClause = `and: [${conditions.join(', ')}]`;\n }\n\n const graphQlQuery = buildGraphQlQuery({\n type: 'ProcessInstances',\n queryBody:\n 'id, processName, processId, businessKey, state, start, end, nodes { id }, variables, parentProcessInstance {id, processName, businessKey}',\n whereClause,\n pagination,\n });\n\n this.logger.debug(`GraphQL query: ${graphQlQuery}`);\n\n const result = await this.client.query(graphQlQuery, {});\n\n this.logger.debug(\n `Fetch process instances result: ${JSON.stringify(result)}`,\n );\n\n const processInstancesSrc = result.data\n .ProcessInstances as ProcessInstance[];\n\n const processInstances = await Promise.all(\n processInstancesSrc.map(async instance => {\n return await this.getWorkflowDefinitionFromInstance(instance);\n }),\n );\n return processInstances;\n }\n\n public async fetchInstancesTotalCount(\n definitionIds?: string[],\n filter?: Filter,\n ): Promise<number> {\n const definitionIdsCondition = definitionIds\n ? `processId: {in: ${JSON.stringify(definitionIds)}}`\n : undefined;\n this.initInputProcessDefinitionArgs();\n const filterCondition = filter\n ? buildFilterCondition(\n await this.inspectInputArgument('ProcessInstance'),\n 'ProcessInstance',\n filter,\n )\n : '';\n\n let whereClause: string | undefined;\n if (definitionIds && filter) {\n whereClause = `and: [{${definitionIdsCondition}}, {${filterCondition}}]`;\n } else if (definitionIdsCondition || filterCondition) {\n whereClause = definitionIdsCondition ?? filterCondition;\n }\n\n const graphQlQuery = buildGraphQlQuery({\n type: 'ProcessInstances',\n queryBody: 'id',\n whereClause,\n });\n this.logger.debug(`GraphQL query: ${graphQlQuery}`);\n\n const result = await this.client.query(graphQlQuery, {});\n\n if (result.error) {\n this.logger.error(\n `Error when fetching instances total count: ${result.error}`,\n );\n throw result.error;\n }\n\n const idArr = result.data.ProcessInstances as ProcessInstance[];\n\n return idArr.length;\n }\n\n private async getWorkflowDefinitionFromInstance(instance: ProcessInstance) {\n const workflowInfo = await this.fetchWorkflowInfo(instance.processId);\n if (!workflowInfo?.source) {\n throw new Error(\n `Workflow defintion is required to fetch instance ${instance.id}`,\n );\n }\n const workflowDefinitionSrc: WorkflowDefinition = fromWorkflowSource(\n workflowInfo.source,\n );\n if (workflowInfo) {\n instance.category = getWorkflowCategory(workflowDefinitionSrc);\n instance.description = workflowInfo.description;\n }\n return instance;\n }\n\n public async fetchWorkflowSource(\n definitionId: string,\n ): Promise<string | undefined> {\n const graphQlQuery = `{ ProcessDefinitions ( where: {id: {equal: \"${definitionId}\" } } ) { id, source } }`;\n\n const result = await this.client.query(graphQlQuery, {});\n\n this.logger.debug(\n `Fetch workflow source result: ${JSON.stringify(result)}`,\n );\n\n if (result.error) {\n this.logger.error(`Error when fetching workflow source: ${result.error}`);\n return undefined;\n }\n\n const processDefinitions = result.data.ProcessDefinitions as WorkflowInfo[];\n\n if (processDefinitions.length === 0) {\n this.logger.info(`No workflow source found for ${definitionId}`);\n return undefined;\n }\n\n return processDefinitions[0].source;\n }\n\n public async fetchInstancesByDefinitionId(args: {\n definitionId: string;\n limit: number;\n offset: number;\n }): Promise<ProcessInstance[]> {\n const graphQlQuery = `{ ProcessInstances(where: {processId: {equal: \"${args.definitionId}\" } }, orderBy: {start:DESC}, pagination: {limit: ${args.limit}, offset: ${args.offset}}) { id, processName, state, start, end } }`;\n\n const result = await this.client.query(graphQlQuery, {});\n\n this.logger.debug(\n `Fetch workflow instances result: ${JSON.stringify(result)}`,\n );\n\n if (result.error) {\n this.logger.error(\n `Error when fetching workflow instances: ${result.error}`,\n );\n throw result.error;\n }\n\n return result.data.ProcessInstances;\n }\n\n public async fetchInstanceVariables(\n instanceId: string,\n ): Promise<object | undefined> {\n const graphQlQuery = `{ ProcessInstances (where: { id: {equal: \"${instanceId}\" } } ) { variables } }`;\n\n const result = await this.client.query(graphQlQuery, {});\n\n this.logger.debug(\n `Fetch process instance variables result: ${JSON.stringify(result)}`,\n );\n\n if (result.error) {\n this.logger.error(\n `Error when fetching process instance variables: ${result.error}`,\n );\n throw result.error;\n }\n\n const processInstances = result.data.ProcessInstances as ProcessInstance[];\n\n if (processInstances.length === 0) {\n return undefined;\n }\n\n return parseWorkflowVariables(processInstances[0].variables as object);\n }\n\n public async fetchDefinitionIdByInstanceId(\n instanceId: string,\n ): Promise<string | undefined> {\n const graphQlQuery = `{ ProcessInstances (where: { id: {equal: \"${instanceId}\" } } ) { processId } }`;\n\n const result = await this.client.query(graphQlQuery, {});\n\n this.logger.debug(\n `Fetch process id from instance result: ${JSON.stringify(result)}`,\n );\n\n if (result.error) {\n this.logger.error(\n `Error when fetching process id from instance: ${result.error}`,\n );\n throw result.error;\n }\n\n const processInstances = result.data.ProcessInstances as ProcessInstance[];\n\n if (processInstances.length === 0) {\n return undefined;\n }\n\n return processInstances[0].processId;\n }\n\n public async fetchInstance(\n instanceId: string,\n ): Promise<ProcessInstance | undefined> {\n const FindProcessInstanceQuery = gql`\n query FindProcessInstanceQuery($instanceId: String!) {\n ProcessInstances(where: { id: { equal: $instanceId } }) {\n id\n processName\n processId\n serviceUrl\n businessKey\n state\n start\n end\n nodes {\n id\n nodeId\n definitionId\n type\n name\n enter\n exit\n }\n variables\n parentProcessInstance {\n id\n processName\n businessKey\n }\n error {\n nodeDefinitionId\n message\n }\n }\n }\n `;\n\n const result = await this.client.query(FindProcessInstanceQuery, {\n instanceId,\n });\n\n this.logger.debug(\n `Fetch process instance result: ${JSON.stringify(result)}`,\n );\n\n if (result.error) {\n this.logger.error(\n `Error when fetching process instances: ${result.error}`,\n );\n throw result.error;\n }\n\n const processInstances = result.data.ProcessInstances as ProcessInstance[];\n\n if (processInstances.length === 0) {\n return undefined;\n }\n\n const instance = processInstances[0];\n\n const workflowInfo = await this.fetchWorkflowInfo(instance.processId);\n if (!workflowInfo?.source) {\n throw new Error(\n `Workflow defintion is required to fetch instance ${instance.id}`,\n );\n }\n const workflowDefinitionSrc: WorkflowDefinition = fromWorkflowSource(\n workflowInfo.source,\n );\n if (workflowInfo) {\n instance.category = getWorkflowCategory(workflowDefinitionSrc);\n instance.description = workflowDefinitionSrc.description;\n }\n return instance;\n }\n}\n"],"names":["ErrorBuilder","Client","fetchExchange","gql","buildFilterCondition","buildGraphQlQuery","FETCH_PROCESS_INSTANCES_SORT_FIELD","fromWorkflowSource","getWorkflowCategory","parseWorkflowVariables"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"DevModeService.cjs.js","sources":["../../src/service/DevModeService.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport type { LoggerService } from '@backstage/backend-plugin-api';\nimport type { Config } from '@backstage/config';\n\nimport fs from 'fs-extra';\n\nimport {\n DEFAULT_SONATAFLOW_BASE_URL,\n DEFAULT_SONATAFLOW_CONTAINER_IMAGE,\n DEFAULT_SONATAFLOW_PERSISTENCE_PATH,\n DEFAULT_WORKFLOWS_PATH,\n} from '@red-hat-developer-hub/backstage-plugin-orchestrator-common';\n\nimport { spawn } from 'child_process';\nimport { join, resolve } from 'path';\n\nimport { GitService } from './GitService';\nimport { executeWithRetry } from './Helper';\n\nconst SONATA_FLOW_RESOURCES_PATH =\n '/home/kogito/serverless-workflow-project/src/main/resources';\n\ninterface LauncherCommand {\n command: string;\n args: string[];\n}\n\ninterface DevModeConnectionConfig {\n host: string;\n port?: number;\n containerImage: string;\n resourcesPath: string;\n persistencePath: string;\n repoUrl?: string;\n}\n\nexport class DevModeService {\n private readonly connection: DevModeConnectionConfig;\n private readonly gitService;\n\n constructor(config: Config, private readonly logger: LoggerService) {\n this.connection = this.extractConnectionConfig(config);\n this.gitService = new GitService(logger, config);\n }\n\n public get devModeUrl(): string {\n if (!this.connection.port) {\n return this.connection.host;\n }\n return `${this.connection.host}:${this.connection.port}`;\n }\n\n public async launchDevMode(): Promise<boolean> {\n await this.loadDevWorkflows();\n\n const isAlreadyUp = await this.isSonataFlowUp(false, this.devModeUrl);\n if (isAlreadyUp) {\n return true;\n }\n\n this.launchSonataFlow();\n\n return await this.isSonataFlowUp(true, this.devModeUrl);\n }\n\n private async isSonataFlowUp(\n withRetry: boolean,\n endpoint: string,\n ): Promise<boolean> {\n const healthUrl = `${endpoint}/q/health`;\n this.logger.info(`Checking SonataFlow health at: ${healthUrl}`);\n\n try {\n const response = await executeWithRetry(\n () => fetch(healthUrl),\n withRetry ? 15 : 1,\n );\n if (response.ok) {\n this.logger.info('SonataFlow is up and running');\n return true;\n }\n } catch (e) {\n this.logger.error(`Error when checking SonataFlow health: ${e}`);\n }\n return false;\n }\n\n private launchSonataFlow(): void {\n const launcherCmd = this.createLauncherCommand();\n\n this.logger.info(\n `Auto starting SonataFlow through: ${\n launcherCmd.command\n } ${launcherCmd.args.join(' ')}`,\n );\n\n const process = spawn(launcherCmd.command, launcherCmd.args, {\n shell: false,\n });\n\n process.on('close', code => {\n this.logger.info(`SonataFlow process exited with code ${code}`);\n });\n\n process.on('exit', code => {\n this.logger.info(`SonataFlow process exited with code ${code}`);\n });\n\n process.on('error', error => {\n this.logger.error(`SonataFlow process error: ${error}`);\n });\n }\n\n private createLauncherCommand(): LauncherCommand {\n const resourcesAbsPath = resolve(\n join(this.connection.resourcesPath, DEFAULT_WORKFLOWS_PATH),\n );\n\n const launcherArgs = [\n 'run',\n '--name',\n 'backstage-internal-sonataflow',\n '--add-host',\n 'host.docker.internal:host-gateway',\n ];\n\n launcherArgs.push('-e', `QUARKUS_HTTP_PORT=${this.connection.port}`);\n\n launcherArgs.push('-p', `${this.connection.port}:${this.connection.port}`);\n launcherArgs.push('-e', `KOGITO_SERVICE_URL=${this.devModeUrl}`);\n launcherArgs.push(\n '-v',\n `${resourcesAbsPath}:${SONATA_FLOW_RESOURCES_PATH}:Z`,\n );\n launcherArgs.push('-e', 'KOGITO.CODEGEN.PROCESS.FAILONERROR=false');\n launcherArgs.push(\n '-e',\n `QUARKUS_EMBEDDED_POSTGRESQL_DATA_DIR=${this.connection.persistencePath}`,\n );\n\n launcherArgs.push(this.connection.containerImage);\n\n return {\n command: 'docker',\n args: launcherArgs,\n };\n }\n\n private extractConnectionConfig(config: Config): DevModeConnectionConfig {\n const host =\n config.getOptionalString('orchestrator.sonataFlowService.baseUrl') ??\n DEFAULT_SONATAFLOW_BASE_URL;\n const port = config.getOptionalNumber(\n 'orchestrator.sonataFlowService.port',\n );\n\n const resourcesPath =\n config.getOptionalString(\n 'orchestrator.sonataFlowService.workflowsSource.localPath',\n ) ?? '';\n\n const containerImage =\n config.getOptionalString('orchestrator.sonataFlowService.container') ??\n DEFAULT_SONATAFLOW_CONTAINER_IMAGE;\n\n const persistencePath =\n config.getOptionalString(\n 'orchestrator.sonataFlowService.persistence.path',\n ) ?? DEFAULT_SONATAFLOW_PERSISTENCE_PATH;\n\n const repoUrl =\n config.getOptionalString(\n 'orchestrator.sonataFlowService.workflowsSource.gitRepositoryUrl',\n ) ?? '';\n\n return {\n host,\n port,\n containerImage,\n resourcesPath,\n persistencePath,\n repoUrl,\n };\n }\n\n public async loadDevWorkflows() {\n if (!this.connection.repoUrl) {\n this.logger.info(\n 'No Git repository configured. Skipping dev workflows loading.',\n );\n return;\n }\n\n this.logger.info(`Loading dev workflows from ${this.connection.repoUrl}`);\n const localPath = this.connection.resourcesPath;\n if (await fs.pathExists(localPath)) {\n this.logger.info(`Path ${localPath} already exists. Skipping clone.`);\n return;\n }\n\n await this.gitService.clone(this.connection.repoUrl, localPath);\n }\n}\n"],"names":["GitService","executeWithRetry","spawn","resolve","join","DEFAULT_WORKFLOWS_PATH","DEFAULT_SONATAFLOW_BASE_URL","DEFAULT_SONATAFLOW_CONTAINER_IMAGE","DEFAULT_SONATAFLOW_PERSISTENCE_PATH","fs"],"mappings":"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"}
1
+ {"version":3,"file":"DevModeService.cjs.js","sources":["../../src/service/DevModeService.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport type { LoggerService } from '@backstage/backend-plugin-api';\nimport type { Config } from '@backstage/config';\n\nimport fs from 'fs-extra';\n\nimport {\n DEFAULT_SONATAFLOW_BASE_URL,\n DEFAULT_SONATAFLOW_CONTAINER_IMAGE,\n DEFAULT_SONATAFLOW_PERSISTENCE_PATH,\n DEFAULT_WORKFLOWS_PATH,\n} from '@red-hat-developer-hub/backstage-plugin-orchestrator-common';\n\nimport { spawn } from 'child_process';\nimport { join, resolve } from 'path';\n\nimport { GitService } from './GitService';\nimport { executeWithRetry } from './Helper';\n\nconst SONATA_FLOW_RESOURCES_PATH =\n '/home/kogito/serverless-workflow-project/src/main/resources';\n\ninterface LauncherCommand {\n command: string;\n args: string[];\n}\n\ninterface DevModeConnectionConfig {\n host: string;\n port?: number;\n containerImage: string;\n resourcesPath: string;\n persistencePath: string;\n repoUrl?: string;\n}\n\nexport class DevModeService {\n private readonly connection: DevModeConnectionConfig;\n private readonly gitService;\n\n constructor(\n config: Config,\n private readonly logger: LoggerService,\n ) {\n this.connection = this.extractConnectionConfig(config);\n this.gitService = new GitService(logger, config);\n }\n\n public get devModeUrl(): string {\n if (!this.connection.port) {\n return this.connection.host;\n }\n return `${this.connection.host}:${this.connection.port}`;\n }\n\n public async launchDevMode(): Promise<boolean> {\n await this.loadDevWorkflows();\n\n const isAlreadyUp = await this.isSonataFlowUp(false, this.devModeUrl);\n if (isAlreadyUp) {\n return true;\n }\n\n this.launchSonataFlow();\n\n return await this.isSonataFlowUp(true, this.devModeUrl);\n }\n\n private async isSonataFlowUp(\n withRetry: boolean,\n endpoint: string,\n ): Promise<boolean> {\n const healthUrl = `${endpoint}/q/health`;\n this.logger.info(`Checking SonataFlow health at: ${healthUrl}`);\n\n try {\n const response = await executeWithRetry(\n () => fetch(healthUrl),\n withRetry ? 15 : 1,\n );\n if (response.ok) {\n this.logger.info('SonataFlow is up and running');\n return true;\n }\n } catch (e) {\n this.logger.error(`Error when checking SonataFlow health: ${e}`);\n }\n return false;\n }\n\n private launchSonataFlow(): void {\n const launcherCmd = this.createLauncherCommand();\n\n this.logger.info(\n `Auto starting SonataFlow through: ${\n launcherCmd.command\n } ${launcherCmd.args.join(' ')}`,\n );\n\n const process = spawn(launcherCmd.command, launcherCmd.args, {\n shell: false,\n });\n\n process.on('close', code => {\n this.logger.info(`SonataFlow process exited with code ${code}`);\n });\n\n process.on('exit', code => {\n this.logger.info(`SonataFlow process exited with code ${code}`);\n });\n\n process.on('error', error => {\n this.logger.error(`SonataFlow process error: ${error}`);\n });\n }\n\n private createLauncherCommand(): LauncherCommand {\n const resourcesAbsPath = resolve(\n join(this.connection.resourcesPath, DEFAULT_WORKFLOWS_PATH),\n );\n\n const launcherArgs = [\n 'run',\n '--name',\n 'backstage-internal-sonataflow',\n '--add-host',\n 'host.docker.internal:host-gateway',\n ];\n\n launcherArgs.push('-e', `QUARKUS_HTTP_PORT=${this.connection.port}`);\n\n launcherArgs.push('-p', `${this.connection.port}:${this.connection.port}`);\n launcherArgs.push('-e', `KOGITO_SERVICE_URL=${this.devModeUrl}`);\n launcherArgs.push(\n '-v',\n `${resourcesAbsPath}:${SONATA_FLOW_RESOURCES_PATH}:Z`,\n );\n launcherArgs.push('-e', 'KOGITO.CODEGEN.PROCESS.FAILONERROR=false');\n launcherArgs.push(\n '-e',\n `QUARKUS_EMBEDDED_POSTGRESQL_DATA_DIR=${this.connection.persistencePath}`,\n );\n\n launcherArgs.push(this.connection.containerImage);\n\n return {\n command: 'docker',\n args: launcherArgs,\n };\n }\n\n private extractConnectionConfig(config: Config): DevModeConnectionConfig {\n const host =\n config.getOptionalString('orchestrator.sonataFlowService.baseUrl') ??\n DEFAULT_SONATAFLOW_BASE_URL;\n const port = config.getOptionalNumber(\n 'orchestrator.sonataFlowService.port',\n );\n\n const resourcesPath =\n config.getOptionalString(\n 'orchestrator.sonataFlowService.workflowsSource.localPath',\n ) ?? '';\n\n const containerImage =\n config.getOptionalString('orchestrator.sonataFlowService.container') ??\n DEFAULT_SONATAFLOW_CONTAINER_IMAGE;\n\n const persistencePath =\n config.getOptionalString(\n 'orchestrator.sonataFlowService.persistence.path',\n ) ?? DEFAULT_SONATAFLOW_PERSISTENCE_PATH;\n\n const repoUrl =\n config.getOptionalString(\n 'orchestrator.sonataFlowService.workflowsSource.gitRepositoryUrl',\n ) ?? '';\n\n return {\n host,\n port,\n containerImage,\n resourcesPath,\n persistencePath,\n repoUrl,\n };\n }\n\n public async loadDevWorkflows() {\n if (!this.connection.repoUrl) {\n this.logger.info(\n 'No Git repository configured. Skipping dev workflows loading.',\n );\n return;\n }\n\n this.logger.info(`Loading dev workflows from ${this.connection.repoUrl}`);\n const localPath = this.connection.resourcesPath;\n if (await fs.pathExists(localPath)) {\n this.logger.info(`Path ${localPath} already exists. Skipping clone.`);\n return;\n }\n\n await this.gitService.clone(this.connection.repoUrl, localPath);\n }\n}\n"],"names":["GitService","executeWithRetry","spawn","resolve","join","DEFAULT_WORKFLOWS_PATH","DEFAULT_SONATAFLOW_BASE_URL","DEFAULT_SONATAFLOW_CONTAINER_IMAGE","DEFAULT_SONATAFLOW_PERSISTENCE_PATH","fs"],"mappings":"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"}
@@ -7,6 +7,9 @@ class OrchestratorService {
7
7
  this.workflowCacheService = workflowCacheService;
8
8
  }
9
9
  // Data Index Service Wrapper
10
+ getWorkflowIds() {
11
+ return this.workflowCacheService.definitionIds;
12
+ }
10
13
  async abortWorkflowInstance(args) {
11
14
  const { instanceId, cacheHandler } = args;
12
15
  const definitionId = await this.dataIndexService.fetchDefinitionIdByInstanceId(instanceId);
@@ -25,15 +28,15 @@ class OrchestratorService {
25
28
  return isWorkflowAvailable ? await this.dataIndexService.fetchWorkflowInfo(definitionId) : void 0;
26
29
  }
27
30
  async fetchInstances(args) {
28
- const definitionIds = args.workflowId ? [args.workflowId] : this.workflowCacheService.definitionIds;
31
+ const definitionIds = args.workflowIds ? args.workflowIds : this.workflowCacheService.definitionIds;
29
32
  return await this.dataIndexService.fetchInstances({
30
33
  definitionIds,
31
34
  pagination: args.pagination,
32
35
  filter: args.filter
33
36
  });
34
37
  }
35
- async fetchInstancesTotalCount(workflowId, filter) {
36
- const definitionIds = workflowId ? [workflowId] : this.workflowCacheService.definitionIds;
38
+ async fetchInstancesTotalCount(workflowIds, filter) {
39
+ const definitionIds = workflowIds ? workflowIds : this.workflowCacheService.definitionIds;
37
40
  return await this.dataIndexService.fetchInstancesTotalCount(
38
41
  definitionIds,
39
42
  filter
@@ -1 +1 @@
1
- {"version":3,"file":"OrchestratorService.cjs.js","sources":["../../src/service/OrchestratorService.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n Filter,\n ProcessInstance,\n ProcessInstanceVariables,\n WorkflowDefinition,\n WorkflowExecutionResponse,\n WorkflowInfo,\n WorkflowOverview,\n} from '@red-hat-developer-hub/backstage-plugin-orchestrator-common';\n\nimport { Pagination } from '../types/pagination';\nimport { DataIndexService } from './DataIndexService';\nimport { SonataFlowService } from './SonataFlowService';\nimport { CacheHandler, WorkflowCacheService } from './WorkflowCacheService';\n\nexport class OrchestratorService {\n constructor(\n private readonly sonataFlowService: SonataFlowService,\n private readonly dataIndexService: DataIndexService,\n private readonly workflowCacheService: WorkflowCacheService,\n ) {}\n\n // Data Index Service Wrapper\n\n public async abortWorkflowInstance(args: {\n instanceId: string;\n cacheHandler?: CacheHandler;\n }): Promise<void> {\n const { instanceId, cacheHandler } = args;\n const definitionId =\n await this.dataIndexService.fetchDefinitionIdByInstanceId(instanceId);\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.dataIndexService.abortWorkflowInstance(instanceId)\n : undefined;\n }\n\n public async fetchWorkflowInfo(args: {\n definitionId: string;\n cacheHandler?: CacheHandler;\n }): Promise<WorkflowInfo | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.dataIndexService.fetchWorkflowInfo(definitionId)\n : undefined;\n }\n\n public async fetchInstances(args: {\n pagination?: Pagination;\n filter?: Filter;\n workflowId?: string;\n }): Promise<ProcessInstance[]> {\n const definitionIds = args.workflowId\n ? [args.workflowId]\n : this.workflowCacheService.definitionIds;\n return await this.dataIndexService.fetchInstances({\n definitionIds: definitionIds,\n pagination: args.pagination,\n filter: args.filter,\n });\n }\n\n public async fetchInstancesTotalCount(\n workflowId?: string,\n filter?: Filter,\n ): Promise<number> {\n const definitionIds = workflowId\n ? [workflowId]\n : this.workflowCacheService.definitionIds;\n return await this.dataIndexService.fetchInstancesTotalCount(\n definitionIds,\n filter,\n );\n }\n\n public async fetchWorkflowSource(args: {\n definitionId: string;\n cacheHandler?: CacheHandler;\n }): Promise<string | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.dataIndexService.fetchWorkflowSource(definitionId)\n : undefined;\n }\n\n public async fetchInstanceVariables(args: {\n instanceId: string;\n cacheHandler?: CacheHandler;\n }): Promise<object | undefined> {\n const { instanceId, cacheHandler } = args;\n const definitionId =\n await this.dataIndexService.fetchDefinitionIdByInstanceId(instanceId);\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.dataIndexService.fetchInstanceVariables(instanceId)\n : undefined;\n }\n\n public async fetchInstance(args: {\n instanceId: string;\n cacheHandler?: CacheHandler;\n }): Promise<ProcessInstance | undefined> {\n const { instanceId, cacheHandler } = args;\n const instance = await this.dataIndexService.fetchInstance(instanceId);\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n instance?.processId,\n cacheHandler,\n );\n return isWorkflowAvailable ? instance : undefined;\n }\n\n // SonataFlow Service Wrapper\n\n public async fetchWorkflowInfoOnService(args: {\n definitionId: string;\n serviceUrl: string;\n cacheHandler?: CacheHandler;\n }): Promise<WorkflowInfo | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.sonataFlowService.fetchWorkflowInfoOnService(args)\n : undefined;\n }\n\n public async fetchWorkflowDefinition(args: {\n definitionId: string;\n cacheHandler?: CacheHandler;\n }): Promise<WorkflowDefinition | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.sonataFlowService.fetchWorkflowDefinition(definitionId)\n : undefined;\n }\n\n public async fetchWorkflowOverviews(args: {\n pagination?: Pagination;\n filter?: Filter;\n }): Promise<WorkflowOverview[] | undefined> {\n return await this.sonataFlowService.fetchWorkflowOverviews({\n definitionIds: this.workflowCacheService.definitionIds,\n pagination: args.pagination,\n filter: args.filter,\n });\n }\n\n public async executeWorkflow(args: {\n definitionId: string;\n serviceUrl: string;\n inputData: ProcessInstanceVariables;\n businessKey?: string;\n cacheHandler?: CacheHandler;\n }): Promise<WorkflowExecutionResponse | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.sonataFlowService.executeWorkflow(args)\n : undefined;\n }\n\n public async retriggerWorkflow(args: {\n definitionId: string;\n instanceId: string;\n serviceUrl: string;\n cacheHandler?: CacheHandler;\n }): Promise<boolean | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.sonataFlowService.retriggerInstance(args)\n : undefined;\n }\n\n public async fetchWorkflowOverview(args: {\n definitionId: string;\n cacheHandler?: CacheHandler;\n }): Promise<WorkflowOverview | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.sonataFlowService.fetchWorkflowOverview(definitionId)\n : undefined;\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"OrchestratorService.cjs.js","sources":["../../src/service/OrchestratorService.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n Filter,\n ProcessInstance,\n ProcessInstanceVariables,\n WorkflowDefinition,\n WorkflowExecutionResponse,\n WorkflowInfo,\n WorkflowOverview,\n} from '@red-hat-developer-hub/backstage-plugin-orchestrator-common';\n\nimport { Pagination } from '../types/pagination';\nimport { DataIndexService } from './DataIndexService';\nimport { SonataFlowService } from './SonataFlowService';\nimport { CacheHandler, WorkflowCacheService } from './WorkflowCacheService';\n\nexport class OrchestratorService {\n constructor(\n private readonly sonataFlowService: SonataFlowService,\n private readonly dataIndexService: DataIndexService,\n private readonly workflowCacheService: WorkflowCacheService,\n ) {}\n\n // Data Index Service Wrapper\n public getWorkflowIds(): string[] {\n return this.workflowCacheService.definitionIds;\n }\n\n public async abortWorkflowInstance(args: {\n instanceId: string;\n cacheHandler?: CacheHandler;\n }): Promise<void> {\n const { instanceId, cacheHandler } = args;\n const definitionId =\n await this.dataIndexService.fetchDefinitionIdByInstanceId(instanceId);\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.dataIndexService.abortWorkflowInstance(instanceId)\n : undefined;\n }\n\n public async fetchWorkflowInfo(args: {\n definitionId: string;\n cacheHandler?: CacheHandler;\n }): Promise<WorkflowInfo | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.dataIndexService.fetchWorkflowInfo(definitionId)\n : undefined;\n }\n\n public async fetchInstances(args: {\n pagination?: Pagination;\n filter?: Filter;\n workflowIds?: string[];\n }): Promise<ProcessInstance[]> {\n const definitionIds = args.workflowIds\n ? args.workflowIds\n : this.workflowCacheService.definitionIds;\n return await this.dataIndexService.fetchInstances({\n definitionIds: definitionIds,\n pagination: args.pagination,\n filter: args.filter,\n });\n }\n\n public async fetchInstancesTotalCount(\n workflowIds?: string[],\n filter?: Filter,\n ): Promise<number> {\n const definitionIds = workflowIds\n ? workflowIds\n : this.workflowCacheService.definitionIds;\n return await this.dataIndexService.fetchInstancesTotalCount(\n definitionIds,\n filter,\n );\n }\n\n public async fetchWorkflowSource(args: {\n definitionId: string;\n cacheHandler?: CacheHandler;\n }): Promise<string | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.dataIndexService.fetchWorkflowSource(definitionId)\n : undefined;\n }\n\n public async fetchInstanceVariables(args: {\n instanceId: string;\n cacheHandler?: CacheHandler;\n }): Promise<object | undefined> {\n const { instanceId, cacheHandler } = args;\n const definitionId =\n await this.dataIndexService.fetchDefinitionIdByInstanceId(instanceId);\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.dataIndexService.fetchInstanceVariables(instanceId)\n : undefined;\n }\n\n public async fetchInstance(args: {\n instanceId: string;\n cacheHandler?: CacheHandler;\n }): Promise<ProcessInstance | undefined> {\n const { instanceId, cacheHandler } = args;\n const instance = await this.dataIndexService.fetchInstance(instanceId);\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n instance?.processId,\n cacheHandler,\n );\n return isWorkflowAvailable ? instance : undefined;\n }\n\n // SonataFlow Service Wrapper\n\n public async fetchWorkflowInfoOnService(args: {\n definitionId: string;\n serviceUrl: string;\n cacheHandler?: CacheHandler;\n }): Promise<WorkflowInfo | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.sonataFlowService.fetchWorkflowInfoOnService(args)\n : undefined;\n }\n\n public async fetchWorkflowDefinition(args: {\n definitionId: string;\n cacheHandler?: CacheHandler;\n }): Promise<WorkflowDefinition | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.sonataFlowService.fetchWorkflowDefinition(definitionId)\n : undefined;\n }\n\n public async fetchWorkflowOverviews(args: {\n pagination?: Pagination;\n filter?: Filter;\n }): Promise<WorkflowOverview[] | undefined> {\n return await this.sonataFlowService.fetchWorkflowOverviews({\n definitionIds: this.workflowCacheService.definitionIds,\n pagination: args.pagination,\n filter: args.filter,\n });\n }\n\n public async executeWorkflow(args: {\n definitionId: string;\n serviceUrl: string;\n inputData?: ProcessInstanceVariables;\n businessKey?: string;\n cacheHandler?: CacheHandler;\n }): Promise<WorkflowExecutionResponse | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.sonataFlowService.executeWorkflow(args)\n : undefined;\n }\n\n public async retriggerWorkflow(args: {\n definitionId: string;\n instanceId: string;\n serviceUrl: string;\n cacheHandler?: CacheHandler;\n }): Promise<boolean | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.sonataFlowService.retriggerInstance(args)\n : undefined;\n }\n\n public async fetchWorkflowOverview(args: {\n definitionId: string;\n cacheHandler?: CacheHandler;\n }): Promise<WorkflowOverview | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.sonataFlowService.fetchWorkflowOverview(definitionId)\n : undefined;\n }\n}\n"],"names":[],"mappings":"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"}
@@ -20,9 +20,7 @@ class SonataFlowService {
20
20
  );
21
21
  }
22
22
  async fetchWorkflowDefinition(definitionId) {
23
- const source = await this.dataIndexService.fetchWorkflowSource(
24
- definitionId
25
- );
23
+ const source = await this.dataIndexService.fetchWorkflowSource(definitionId);
26
24
  if (source) {
27
25
  return backstagePluginOrchestratorCommon.fromWorkflowSource(source);
28
26
  }
@@ -47,7 +45,7 @@ class SonataFlowService {
47
45
  const urlToFetch = args.businessKey ? `${args.serviceUrl}/${args.definitionId}?businessKey=${args.businessKey}` : `${args.serviceUrl}/${args.definitionId}`;
48
46
  const response = await fetch(urlToFetch, {
49
47
  method: "POST",
50
- body: JSON.stringify(args.inputData),
48
+ body: JSON.stringify(args.inputData || {}),
51
49
  headers: { "content-type": "application/json" }
52
50
  });
53
51
  const json = await response.json();
@@ -92,9 +90,7 @@ class SonataFlowService {
92
90
  return true;
93
91
  }
94
92
  async fetchWorkflowOverview(definitionId) {
95
- const source = await this.dataIndexService.fetchWorkflowSource(
96
- definitionId
97
- );
93
+ const source = await this.dataIndexService.fetchWorkflowSource(definitionId);
98
94
  if (!source) {
99
95
  this.logger.debug(`Workflow source not found: ${definitionId}`);
100
96
  return void 0;
@@ -102,39 +98,21 @@ class SonataFlowService {
102
98
  return await this.fetchWorkflowOverviewBySource(source);
103
99
  }
104
100
  async fetchWorkflowOverviewBySource(source) {
105
- let processInstances = [];
106
- const limit = 10;
107
- let offset = 0;
108
101
  let lastTriggered = /* @__PURE__ */ new Date(0);
109
102
  let lastRunStatus;
110
103
  let lastRunId;
111
- let counter = 0;
112
- let totalDuration = 0;
113
104
  const definition = backstagePluginOrchestratorCommon.fromWorkflowSource(source);
114
- do {
115
- processInstances = await this.dataIndexService.fetchInstancesByDefinitionId({
116
- definitionId: definition.id,
117
- limit,
118
- offset
119
- });
120
- for (const pInstance of processInstances) {
121
- if (!pInstance.start) {
122
- continue;
123
- }
124
- if (new Date(pInstance.start) > lastTriggered) {
125
- lastRunId = pInstance.id;
126
- lastTriggered = new Date(pInstance.start);
127
- lastRunStatus = pInstance.state;
128
- }
129
- if (pInstance.end) {
130
- const start = new Date(pInstance.start);
131
- const end = new Date(pInstance.end);
132
- totalDuration += end.valueOf() - start.valueOf();
133
- counter++;
134
- }
135
- }
136
- offset += limit;
137
- } while (processInstances.length > 0);
105
+ const processInstances = await this.dataIndexService.fetchInstancesByDefinitionId({
106
+ definitionId: definition.id,
107
+ limit: 1,
108
+ offset: 0
109
+ });
110
+ const pInstance = processInstances[0];
111
+ if (pInstance?.start) {
112
+ lastRunId = pInstance.id;
113
+ lastTriggered = new Date(pInstance.start);
114
+ lastRunStatus = pInstance.state;
115
+ }
138
116
  return {
139
117
  workflowId: definition.id,
140
118
  name: definition.name,
@@ -143,7 +121,6 @@ class SonataFlowService {
143
121
  lastTriggeredMs: lastTriggered.getTime(),
144
122
  lastRunStatus,
145
123
  category: backstagePluginOrchestratorCommon.getWorkflowCategory(definition),
146
- avgDurationMs: counter ? totalDuration / counter : void 0,
147
124
  description: definition.description
148
125
  };
149
126
  }
@@ -152,16 +129,6 @@ class SonataFlowService {
152
129
  const response = await fetch(urlToFetch);
153
130
  return response.ok;
154
131
  }
155
- async updateInstanceInputData(args) {
156
- const { definitionId, serviceUrl, instanceId, inputData } = args;
157
- const urlToFetch = `${serviceUrl}/${definitionId}/${instanceId}`;
158
- const response = await fetch(urlToFetch, {
159
- method: "PATCH",
160
- body: JSON.stringify(inputData),
161
- headers: { "content-type": "application/json" }
162
- });
163
- return response.ok;
164
- }
165
132
  async createPrefixFetchErrorMessage(urlToFetch, response, httpMethod = "GET") {
166
133
  const res = await response.json();
167
134
  const errorInfo = [];
@@ -1 +1 @@
1
- {"version":3,"file":"SonataFlowService.cjs.js","sources":["../../src/service/SonataFlowService.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { LoggerService } from '@backstage/backend-plugin-api';\n\nimport {\n extractWorkflowFormat,\n Filter,\n fromWorkflowSource,\n getWorkflowCategory,\n ProcessInstance,\n ProcessInstanceStateValues,\n ProcessInstanceVariables,\n WorkflowDefinition,\n WorkflowExecutionResponse,\n WorkflowInfo,\n WorkflowOverview,\n} from '@red-hat-developer-hub/backstage-plugin-orchestrator-common';\n\nimport { Pagination } from '../types/pagination';\nimport { DataIndexService } from './DataIndexService';\n\nexport class SonataFlowService {\n constructor(\n private readonly dataIndexService: DataIndexService,\n private readonly logger: LoggerService,\n ) {}\n\n public async fetchWorkflowInfoOnService(args: {\n definitionId: string;\n serviceUrl: string;\n }): Promise<WorkflowInfo | undefined> {\n const urlToFetch = `${args.serviceUrl}/management/processes/${args.definitionId}`;\n const response = await fetch(urlToFetch);\n\n if (response.ok) {\n const json = await response.json();\n this.logger.debug(`Fetch workflow info result: ${JSON.stringify(json)}`);\n return json;\n }\n throw new Error(\n await this.createPrefixFetchErrorMessage(urlToFetch, response),\n );\n }\n\n public async fetchWorkflowDefinition(\n definitionId: string,\n ): Promise<WorkflowDefinition | undefined> {\n const source = await this.dataIndexService.fetchWorkflowSource(\n definitionId,\n );\n if (source) {\n return fromWorkflowSource(source);\n }\n return undefined;\n }\n\n public async fetchWorkflowOverviews(args: {\n definitionIds?: string[];\n pagination?: Pagination;\n filter?: Filter;\n }): Promise<WorkflowOverview[] | undefined> {\n const { definitionIds, pagination, filter } = args;\n const workflowInfos = await this.dataIndexService.fetchWorkflowInfos({\n definitionIds,\n pagination,\n filter,\n });\n if (!workflowInfos?.length) {\n return [];\n }\n const items = await Promise.all(\n workflowInfos\n .filter(info => info.source)\n .map(info => this.fetchWorkflowOverviewBySource(info.source!)),\n );\n return items.filter((item): item is WorkflowOverview => !!item);\n }\n\n public async executeWorkflow(args: {\n definitionId: string;\n serviceUrl: string;\n inputData: ProcessInstanceVariables;\n businessKey?: string;\n }): Promise<WorkflowExecutionResponse | undefined> {\n const urlToFetch = args.businessKey\n ? `${args.serviceUrl}/${args.definitionId}?businessKey=${args.businessKey}`\n : `${args.serviceUrl}/${args.definitionId}`;\n\n const response = await fetch(urlToFetch, {\n method: 'POST',\n body: JSON.stringify(args.inputData),\n headers: { 'content-type': 'application/json' },\n });\n\n const json = await response.json();\n if (json.id) {\n this.logger.debug(\n `Execute workflow successful. Response: ${JSON.stringify(json)}`,\n );\n return json;\n } else if (!response.ok) {\n const errorMessage = await this.createPrefixFetchErrorMessage(\n urlToFetch,\n response,\n 'POST',\n );\n this.logger.error(\n `Execute workflow failed. Response: ${JSON.stringify(json)}`,\n );\n throw new Error(errorMessage);\n } else {\n this.logger.error(\n `Execute workflow did not return a workflow instance ID. Response: ${JSON.stringify(\n json,\n )}`,\n );\n throw new Error('Execute workflow did not return a workflow instance ID');\n }\n }\n\n public async retriggerInstance(args: {\n definitionId: string;\n instanceId: string;\n serviceUrl: string;\n }): Promise<boolean> {\n const urlToFetch = `${args.serviceUrl}/management/processes/${args.definitionId}/instances/${args.instanceId}/retrigger`;\n\n const response = await fetch(urlToFetch, {\n method: 'POST',\n });\n\n if (!response.ok) {\n throw new Error(\n `${await this.createPrefixFetchErrorMessage(\n urlToFetch,\n response,\n 'POST',\n )}`,\n );\n }\n\n return true;\n }\n\n public async fetchWorkflowOverview(\n definitionId: string,\n ): Promise<WorkflowOverview | undefined> {\n const source = await this.dataIndexService.fetchWorkflowSource(\n definitionId,\n );\n if (!source) {\n this.logger.debug(`Workflow source not found: ${definitionId}`);\n return undefined;\n }\n return await this.fetchWorkflowOverviewBySource(source);\n }\n\n private async fetchWorkflowOverviewBySource(\n source: string,\n ): Promise<WorkflowOverview | undefined> {\n let processInstances: ProcessInstance[] = [];\n const limit = 10;\n let offset: number = 0;\n\n let lastTriggered: Date = new Date(0);\n let lastRunStatus: ProcessInstanceStateValues | undefined;\n let lastRunId: string | undefined;\n let counter = 0;\n let totalDuration = 0;\n const definition = fromWorkflowSource(source);\n\n do {\n processInstances =\n await this.dataIndexService.fetchInstancesByDefinitionId({\n definitionId: definition.id,\n limit,\n offset,\n });\n\n for (const pInstance of processInstances) {\n if (!pInstance.start) {\n continue;\n }\n if (new Date(pInstance.start) > lastTriggered) {\n lastRunId = pInstance.id;\n lastTriggered = new Date(pInstance.start);\n lastRunStatus = pInstance.state;\n }\n if (pInstance.end) {\n const start: Date = new Date(pInstance.start);\n const end: Date = new Date(pInstance.end);\n totalDuration += end.valueOf() - start.valueOf();\n counter++;\n }\n }\n offset += limit;\n } while (processInstances.length > 0);\n\n return {\n workflowId: definition.id,\n name: definition.name,\n format: extractWorkflowFormat(source),\n lastRunId,\n lastTriggeredMs: lastTriggered.getTime(),\n lastRunStatus,\n category: getWorkflowCategory(definition),\n avgDurationMs: counter ? totalDuration / counter : undefined,\n description: definition.description,\n };\n }\n\n public async pingWorkflowService(args: {\n definitionId: string;\n serviceUrl: string;\n }): Promise<boolean> {\n const urlToFetch = `${args.serviceUrl}/management/processes/${args.definitionId}`;\n const response = await fetch(urlToFetch);\n return response.ok;\n }\n\n public async updateInstanceInputData(args: {\n definitionId: string;\n serviceUrl: string;\n instanceId: string;\n inputData: ProcessInstanceVariables;\n }): Promise<boolean> {\n const { definitionId, serviceUrl, instanceId, inputData } = args;\n const urlToFetch = `${serviceUrl}/${definitionId}/${instanceId}`;\n const response = await fetch(urlToFetch, {\n method: 'PATCH',\n body: JSON.stringify(inputData),\n headers: { 'content-type': 'application/json' },\n });\n return response.ok;\n }\n\n public async createPrefixFetchErrorMessage(\n urlToFetch: string,\n response: Response,\n httpMethod = 'GET',\n ): Promise<string> {\n const res = await response.json();\n const errorInfo = [];\n let errorMsg = `Request ${httpMethod} ${urlToFetch} failed with: StatusCode: ${response.status}`;\n\n if (response.statusText) {\n errorInfo.push(`StatusText: ${response.statusText}`);\n }\n if (res?.details) {\n errorInfo.push(`Details: ${res?.details}`);\n }\n if (res?.stack) {\n errorInfo.push(`Stack: ${res?.stack}`);\n }\n if (errorInfo.length > 0) {\n errorMsg += ` ${errorInfo.join(', ')}`;\n } else {\n errorMsg += ' Unexpected error';\n }\n\n return errorMsg;\n }\n}\n"],"names":["fromWorkflowSource","extractWorkflowFormat","getWorkflowCategory"],"mappings":"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"}
1
+ {"version":3,"file":"SonataFlowService.cjs.js","sources":["../../src/service/SonataFlowService.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { LoggerService } from '@backstage/backend-plugin-api';\n\nimport {\n extractWorkflowFormat,\n Filter,\n fromWorkflowSource,\n getWorkflowCategory,\n ProcessInstanceStateValues,\n ProcessInstanceVariables,\n WorkflowDefinition,\n WorkflowExecutionResponse,\n WorkflowInfo,\n WorkflowOverview,\n} from '@red-hat-developer-hub/backstage-plugin-orchestrator-common';\n\nimport { Pagination } from '../types/pagination';\nimport { DataIndexService } from './DataIndexService';\n\nexport class SonataFlowService {\n constructor(\n private readonly dataIndexService: DataIndexService,\n private readonly logger: LoggerService,\n ) {}\n\n public async fetchWorkflowInfoOnService(args: {\n definitionId: string;\n serviceUrl: string;\n }): Promise<WorkflowInfo | undefined> {\n const urlToFetch = `${args.serviceUrl}/management/processes/${args.definitionId}`;\n const response = await fetch(urlToFetch);\n\n if (response.ok) {\n const json = await response.json();\n this.logger.debug(`Fetch workflow info result: ${JSON.stringify(json)}`);\n return json;\n }\n throw new Error(\n await this.createPrefixFetchErrorMessage(urlToFetch, response),\n );\n }\n\n public async fetchWorkflowDefinition(\n definitionId: string,\n ): Promise<WorkflowDefinition | undefined> {\n const source =\n await this.dataIndexService.fetchWorkflowSource(definitionId);\n if (source) {\n return fromWorkflowSource(source);\n }\n return undefined;\n }\n\n public async fetchWorkflowOverviews(args: {\n definitionIds?: string[];\n pagination?: Pagination;\n filter?: Filter;\n }): Promise<WorkflowOverview[] | undefined> {\n const { definitionIds, pagination, filter } = args;\n const workflowInfos = await this.dataIndexService.fetchWorkflowInfos({\n definitionIds,\n pagination,\n filter,\n });\n if (!workflowInfos?.length) {\n return [];\n }\n const items = await Promise.all(\n workflowInfos\n .filter(info => info.source)\n .map(info => this.fetchWorkflowOverviewBySource(info.source!)),\n );\n return items.filter((item): item is WorkflowOverview => !!item);\n }\n\n public async executeWorkflow(args: {\n definitionId: string;\n serviceUrl: string;\n inputData?: ProcessInstanceVariables;\n businessKey?: string;\n }): Promise<WorkflowExecutionResponse | undefined> {\n const urlToFetch = args.businessKey\n ? `${args.serviceUrl}/${args.definitionId}?businessKey=${args.businessKey}`\n : `${args.serviceUrl}/${args.definitionId}`;\n\n const response = await fetch(urlToFetch, {\n method: 'POST',\n body: JSON.stringify(args.inputData || {}),\n headers: { 'content-type': 'application/json' },\n });\n\n const json = await response.json();\n if (json.id) {\n this.logger.debug(\n `Execute workflow successful. Response: ${JSON.stringify(json)}`,\n );\n return json;\n } else if (!response.ok) {\n const errorMessage = await this.createPrefixFetchErrorMessage(\n urlToFetch,\n response,\n 'POST',\n );\n this.logger.error(\n `Execute workflow failed. Response: ${JSON.stringify(json)}`,\n );\n throw new Error(errorMessage);\n } else {\n this.logger.error(\n `Execute workflow did not return a workflow instance ID. Response: ${JSON.stringify(\n json,\n )}`,\n );\n throw new Error('Execute workflow did not return a workflow instance ID');\n }\n }\n\n public async retriggerInstance(args: {\n definitionId: string;\n instanceId: string;\n serviceUrl: string;\n }): Promise<boolean> {\n const urlToFetch = `${args.serviceUrl}/management/processes/${args.definitionId}/instances/${args.instanceId}/retrigger`;\n\n const response = await fetch(urlToFetch, {\n method: 'POST',\n });\n\n if (!response.ok) {\n throw new Error(\n `${await this.createPrefixFetchErrorMessage(\n urlToFetch,\n response,\n 'POST',\n )}`,\n );\n }\n\n return true;\n }\n\n public async fetchWorkflowOverview(\n definitionId: string,\n ): Promise<WorkflowOverview | undefined> {\n const source =\n await this.dataIndexService.fetchWorkflowSource(definitionId);\n if (!source) {\n this.logger.debug(`Workflow source not found: ${definitionId}`);\n return undefined;\n }\n return await this.fetchWorkflowOverviewBySource(source);\n }\n\n private async fetchWorkflowOverviewBySource(\n source: string,\n ): Promise<WorkflowOverview | undefined> {\n let lastTriggered: Date = new Date(0);\n let lastRunStatus: ProcessInstanceStateValues | undefined;\n let lastRunId: string | undefined;\n const definition = fromWorkflowSource(source);\n\n const processInstances =\n await this.dataIndexService.fetchInstancesByDefinitionId({\n definitionId: definition.id,\n limit: 1,\n offset: 0,\n });\n\n const pInstance = processInstances[0];\n\n if (pInstance?.start) {\n lastRunId = pInstance.id;\n lastTriggered = new Date(pInstance.start);\n lastRunStatus = pInstance.state;\n }\n\n return {\n workflowId: definition.id,\n name: definition.name,\n format: extractWorkflowFormat(source),\n lastRunId,\n lastTriggeredMs: lastTriggered.getTime(),\n lastRunStatus,\n category: getWorkflowCategory(definition),\n description: definition.description,\n };\n }\n\n public async pingWorkflowService(args: {\n definitionId: string;\n serviceUrl: string;\n }): Promise<boolean> {\n const urlToFetch = `${args.serviceUrl}/management/processes/${args.definitionId}`;\n const response = await fetch(urlToFetch);\n return response.ok;\n }\n\n public async createPrefixFetchErrorMessage(\n urlToFetch: string,\n response: Response,\n httpMethod = 'GET',\n ): Promise<string> {\n const res = await response.json();\n const errorInfo = [];\n let errorMsg = `Request ${httpMethod} ${urlToFetch} failed with: StatusCode: ${response.status}`;\n\n if (response.statusText) {\n errorInfo.push(`StatusText: ${response.statusText}`);\n }\n if (res?.details) {\n errorInfo.push(`Details: ${res?.details}`);\n }\n if (res?.stack) {\n errorInfo.push(`Stack: ${res?.stack}`);\n }\n if (errorInfo.length > 0) {\n errorMsg += ` ${errorInfo.join(', ')}`;\n } else {\n errorMsg += ' Unexpected error';\n }\n\n return errorMsg;\n }\n}\n"],"names":["fromWorkflowSource","extractWorkflowFormat","getWorkflowCategory"],"mappings":"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"}
@@ -12,7 +12,6 @@ function mapToWorkflowOverviewDTO(overview) {
12
12
  name: overview.name,
13
13
  format: overview.format,
14
14
  workflowId: overview.workflowId,
15
- avgDurationMs: overview.avgDurationMs,
16
15
  description: overview.description,
17
16
  lastRunId: overview.lastRunId,
18
17
  lastRunStatus: overview.lastRunStatus ? getProcessInstancesStatusDTOFromString(overview.lastRunStatus) : void 0,
@@ -1 +1 @@
1
- {"version":3,"file":"V2Mappings.cjs.js","sources":["../../../../src/service/api/mapping/V2Mappings.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport moment from 'moment';\n\nimport {\n capitalize,\n ExecuteWorkflowResponseDTO,\n extractWorkflowFormat,\n fromWorkflowSource,\n getWorkflowCategory,\n NodeInstance,\n NodeInstanceDTO,\n ProcessInstance,\n ProcessInstanceDTO,\n ProcessInstanceState,\n ProcessInstanceStatusDTO,\n WorkflowCategory,\n WorkflowCategoryDTO,\n WorkflowDefinition,\n WorkflowDTO,\n WorkflowExecutionResponse,\n WorkflowFormatDTO,\n WorkflowOverview,\n WorkflowOverviewDTO,\n WorkflowRunStatusDTO,\n} from '@red-hat-developer-hub/backstage-plugin-orchestrator-common';\n\n// Mapping functions\nexport function mapToWorkflowOverviewDTO(\n overview: WorkflowOverview,\n): WorkflowOverviewDTO {\n return {\n name: overview.name,\n format: overview.format,\n workflowId: overview.workflowId,\n avgDurationMs: overview.avgDurationMs,\n description: overview.description,\n lastRunId: overview.lastRunId,\n lastRunStatus: overview.lastRunStatus\n ? getProcessInstancesStatusDTOFromString(overview.lastRunStatus)\n : undefined,\n lastTriggeredMs: overview.lastTriggeredMs,\n category: mapWorkflowCategoryDTOFromString(overview.category),\n };\n}\n\nexport function mapWorkflowCategoryDTOFromString(\n category?: string,\n): WorkflowCategoryDTO {\n return category?.toLocaleLowerCase() === 'assessment'\n ? 'assessment'\n : 'infrastructure';\n}\n\nexport function getWorkflowCategoryDTO(\n definition: WorkflowDefinition | undefined,\n): WorkflowCategoryDTO {\n return getWorkflowCategory(definition);\n}\n\nexport function getWorkflowFormatDTO(source: string): WorkflowFormatDTO {\n return extractWorkflowFormat(source);\n}\n\nexport function mapToWorkflowDTO(source: string): WorkflowDTO {\n const definition = fromWorkflowSource(source);\n return {\n annotations: definition.annotations,\n category: getWorkflowCategoryDTO(definition),\n description: definition.description,\n name: definition.name,\n format: getWorkflowFormatDTO(source),\n id: definition.id,\n };\n}\n\nexport function mapWorkflowCategoryDTO(\n category?: WorkflowCategory,\n): WorkflowCategoryDTO {\n if (category === WorkflowCategory.ASSESSMENT) {\n return 'assessment';\n }\n return 'infrastructure';\n}\n\nexport function getProcessInstancesStatusDTOFromString(\n state?: string,\n): ProcessInstanceStatusDTO {\n switch (state) {\n case ProcessInstanceState.Active.valueOf():\n return 'Active';\n case ProcessInstanceState.Error.valueOf():\n return 'Error';\n case ProcessInstanceState.Completed.valueOf():\n return 'Completed';\n case ProcessInstanceState.Aborted.valueOf():\n return 'Aborted';\n case ProcessInstanceState.Suspended.valueOf():\n return 'Suspended';\n case ProcessInstanceState.Pending.valueOf():\n return 'Pending';\n default:\n throw new Error(\n `state ${state} is not one of the values of type ProcessInstanceStatusDTO`,\n );\n }\n}\n\nexport function getProcessInstanceStateFromStatusDTOString(\n status?: ProcessInstanceStatusDTO,\n): string {\n switch (status) {\n case 'Active':\n return ProcessInstanceState.Active.valueOf();\n case 'Error':\n return ProcessInstanceState.Error.valueOf();\n case 'Completed':\n return ProcessInstanceState.Completed.valueOf();\n case 'Aborted':\n return ProcessInstanceState.Aborted.valueOf();\n case 'Suspended':\n return ProcessInstanceState.Suspended.valueOf();\n case 'Pending':\n return ProcessInstanceState.Pending.valueOf();\n default:\n throw new Error(\n `status ${status} is not one of the values of type ProcessInstanceState`,\n );\n }\n}\n\nexport function mapToProcessInstanceDTO(\n processInstance: ProcessInstance,\n): ProcessInstanceDTO {\n const start = moment(processInstance.start);\n const end = moment(processInstance.end);\n const duration = processInstance.end\n ? moment.duration(start.diff(end)).humanize()\n : undefined;\n\n let variables: Record<string, unknown> | undefined;\n if (typeof processInstance?.variables === 'string') {\n variables = JSON.parse(processInstance?.variables);\n } else {\n variables = processInstance?.variables;\n }\n\n return {\n id: processInstance.id,\n processId: processInstance.processId,\n processName: processInstance.processName,\n description: processInstance.description,\n serviceUrl: processInstance.serviceUrl,\n businessKey: processInstance.businessKey,\n endpoint: processInstance.endpoint,\n error: processInstance.error,\n category: mapWorkflowCategoryDTO(processInstance.category),\n start: processInstance.start,\n end: processInstance.end,\n duration: duration,\n // @ts-ignore\n workflowdata: variables?.workflowdata,\n status: getProcessInstancesStatusDTOFromString(processInstance.state),\n nodes: processInstance.nodes.map(mapToNodeInstanceDTO),\n };\n}\n\nexport function mapToNodeInstanceDTO(\n nodeInstance: NodeInstance,\n): NodeInstanceDTO {\n return { ...nodeInstance, __typename: 'NodeInstance' };\n}\n\nexport function mapToExecuteWorkflowResponseDTO(\n workflowId: string,\n workflowExecutionResponse: WorkflowExecutionResponse,\n): ExecuteWorkflowResponseDTO {\n if (!workflowExecutionResponse?.id) {\n throw new Error(\n `Error while mapping ExecuteWorkflowResponse to ExecuteWorkflowResponseDTO for workflow with id ${workflowId}`,\n );\n }\n\n return {\n id: workflowExecutionResponse.id,\n };\n}\n\nexport function mapToWorkflowRunStatusDTO(\n status: ProcessInstanceState,\n): WorkflowRunStatusDTO {\n return {\n key: capitalize(status),\n value: status,\n };\n}\n"],"names":["getWorkflowCategory","extractWorkflowFormat","fromWorkflowSource","WorkflowCategory","ProcessInstanceState","moment","capitalize"],"mappings":"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"}
1
+ {"version":3,"file":"V2Mappings.cjs.js","sources":["../../../../src/service/api/mapping/V2Mappings.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport moment from 'moment';\n\nimport {\n capitalize,\n ExecuteWorkflowResponseDTO,\n extractWorkflowFormat,\n fromWorkflowSource,\n getWorkflowCategory,\n NodeInstance,\n NodeInstanceDTO,\n ProcessInstance,\n ProcessInstanceDTO,\n ProcessInstanceState,\n ProcessInstanceStatusDTO,\n WorkflowCategory,\n WorkflowCategoryDTO,\n WorkflowDefinition,\n WorkflowDTO,\n WorkflowExecutionResponse,\n WorkflowFormatDTO,\n WorkflowOverview,\n WorkflowOverviewDTO,\n WorkflowRunStatusDTO,\n} from '@red-hat-developer-hub/backstage-plugin-orchestrator-common';\n\n// Mapping functions\nexport function mapToWorkflowOverviewDTO(\n overview: WorkflowOverview,\n): WorkflowOverviewDTO {\n return {\n name: overview.name,\n format: overview.format,\n workflowId: overview.workflowId,\n description: overview.description,\n lastRunId: overview.lastRunId,\n lastRunStatus: overview.lastRunStatus\n ? getProcessInstancesStatusDTOFromString(overview.lastRunStatus)\n : undefined,\n lastTriggeredMs: overview.lastTriggeredMs,\n category: mapWorkflowCategoryDTOFromString(overview.category),\n };\n}\n\nexport function mapWorkflowCategoryDTOFromString(\n category?: string,\n): WorkflowCategoryDTO {\n return category?.toLocaleLowerCase() === 'assessment'\n ? 'assessment'\n : 'infrastructure';\n}\n\nexport function getWorkflowCategoryDTO(\n definition: WorkflowDefinition | undefined,\n): WorkflowCategoryDTO {\n return getWorkflowCategory(definition);\n}\n\nexport function getWorkflowFormatDTO(source: string): WorkflowFormatDTO {\n return extractWorkflowFormat(source);\n}\n\nexport function mapToWorkflowDTO(source: string): WorkflowDTO {\n const definition = fromWorkflowSource(source);\n return {\n annotations: definition.annotations,\n category: getWorkflowCategoryDTO(definition),\n description: definition.description,\n name: definition.name,\n format: getWorkflowFormatDTO(source),\n id: definition.id,\n };\n}\n\nexport function mapWorkflowCategoryDTO(\n category?: WorkflowCategory,\n): WorkflowCategoryDTO {\n if (category === WorkflowCategory.ASSESSMENT) {\n return 'assessment';\n }\n return 'infrastructure';\n}\n\nexport function getProcessInstancesStatusDTOFromString(\n state?: string,\n): ProcessInstanceStatusDTO {\n switch (state) {\n case ProcessInstanceState.Active.valueOf():\n return 'Active';\n case ProcessInstanceState.Error.valueOf():\n return 'Error';\n case ProcessInstanceState.Completed.valueOf():\n return 'Completed';\n case ProcessInstanceState.Aborted.valueOf():\n return 'Aborted';\n case ProcessInstanceState.Suspended.valueOf():\n return 'Suspended';\n case ProcessInstanceState.Pending.valueOf():\n return 'Pending';\n default:\n throw new Error(\n `state ${state} is not one of the values of type ProcessInstanceStatusDTO`,\n );\n }\n}\n\nexport function getProcessInstanceStateFromStatusDTOString(\n status?: ProcessInstanceStatusDTO,\n): string {\n switch (status) {\n case 'Active':\n return ProcessInstanceState.Active.valueOf();\n case 'Error':\n return ProcessInstanceState.Error.valueOf();\n case 'Completed':\n return ProcessInstanceState.Completed.valueOf();\n case 'Aborted':\n return ProcessInstanceState.Aborted.valueOf();\n case 'Suspended':\n return ProcessInstanceState.Suspended.valueOf();\n case 'Pending':\n return ProcessInstanceState.Pending.valueOf();\n default:\n throw new Error(\n `status ${status} is not one of the values of type ProcessInstanceState`,\n );\n }\n}\n\nexport function mapToProcessInstanceDTO(\n processInstance: ProcessInstance,\n): ProcessInstanceDTO {\n const start = moment(processInstance.start);\n const end = moment(processInstance.end);\n const duration = processInstance.end\n ? moment.duration(start.diff(end)).humanize()\n : undefined;\n\n let variables: Record<string, unknown> | undefined;\n if (typeof processInstance?.variables === 'string') {\n variables = JSON.parse(processInstance?.variables);\n } else {\n variables = processInstance?.variables;\n }\n\n return {\n id: processInstance.id,\n processId: processInstance.processId,\n processName: processInstance.processName,\n description: processInstance.description,\n serviceUrl: processInstance.serviceUrl,\n businessKey: processInstance.businessKey,\n endpoint: processInstance.endpoint,\n error: processInstance.error,\n category: mapWorkflowCategoryDTO(processInstance.category),\n start: processInstance.start,\n end: processInstance.end,\n duration: duration,\n // @ts-ignore\n workflowdata: variables?.workflowdata,\n status: getProcessInstancesStatusDTOFromString(processInstance.state),\n nodes: processInstance.nodes.map(mapToNodeInstanceDTO),\n };\n}\n\nexport function mapToNodeInstanceDTO(\n nodeInstance: NodeInstance,\n): NodeInstanceDTO {\n return { ...nodeInstance, __typename: 'NodeInstance' };\n}\n\nexport function mapToExecuteWorkflowResponseDTO(\n workflowId: string,\n workflowExecutionResponse: WorkflowExecutionResponse,\n): ExecuteWorkflowResponseDTO {\n if (!workflowExecutionResponse?.id) {\n throw new Error(\n `Error while mapping ExecuteWorkflowResponse to ExecuteWorkflowResponseDTO for workflow with id ${workflowId}`,\n );\n }\n\n return {\n id: workflowExecutionResponse.id,\n };\n}\n\nexport function mapToWorkflowRunStatusDTO(\n status: ProcessInstanceState,\n): WorkflowRunStatusDTO {\n return {\n key: capitalize(status),\n value: status,\n };\n}\n"],"names":["getWorkflowCategory","extractWorkflowFormat","fromWorkflowSource","WorkflowCategory","ProcessInstanceState","moment","capitalize"],"mappings":"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"}