Skip to content

Commit 13c2a58

Browse files
authored
Allow stacky event rules to listen to new events while providing SFNs targets with the legacy objects (#1044)
* Add in event translations * Listen to workflow version as well * Add in event translation to handle new workflow manager Keeps sfns the same by updating the event targets back to legacy wfm schema
1 parent 01d8db4 commit 13c2a58

File tree

6 files changed

+78
-26
lines changed

6 files changed

+78
-26
lines changed

lib/workload/components/sfn-generate-workflowrunstatechange-ready-event/step_functions_templates/workflowrunstatechange_generate_ready_step_function_template.asl.json

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,12 @@
5858
"portalRunId.$": "$.input_event_detail_draft.portal_run_id",
5959
"timestamp.$": "$$.State.EnteredTime",
6060
"status": "${__ready_status__}",
61-
"workflowName": "${__workflow_name__}",
62-
"workflowVersion": "${__workflow_version__}",
61+
"workflow": {
62+
"name": "${__workflow_name__}",
63+
"version": "${__workflow_version__}"
64+
},
6365
"workflowRunName.$": "$.input_event_detail_draft.workflow_run_name",
64-
"linkedLibraries.$": "$.input_event_detail_draft.linked_libraries",
66+
"libraries.$": "$.input_event_detail_draft.linked_libraries",
6567
"payload": {
6668
"version": "${__payload_version__}",
6769
"data": {

lib/workload/components/sfn-icav2-ready-event-handler/index.ts

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import * as lambda from 'aws-cdk-lib/aws-lambda';
1212
import { Duration } from 'aws-cdk-lib';
1313
import * as secretsmanager from 'aws-cdk-lib/aws-secretsmanager';
1414
import { NagSuppressions } from 'cdk-nag';
15+
import { EventField } from 'aws-cdk-lib/aws-events';
1516

1617
export interface WfmWorkflowStateChangeIcav2ReadyEventHandlerConstructProps {
1718
/* Names of table to write to */
@@ -177,15 +178,28 @@ export class WfmWorkflowStateChangeIcav2ReadyEventHandlerConstruct extends Const
177178
detailType: [props.detailType],
178179
detail: {
179180
status: ['READY'],
180-
workflowName: [{ 'equals-ignore-case': props.workflowName }],
181+
workflow: {
182+
name: [{ 'equals-ignore-case': props.workflowName }],
183+
version: [{ 'equals-ignore-case': props.workflowVersion }],
184+
},
181185
},
182186
},
183187
});
184188

185-
/* Add rule as a target to the state machine */
189+
// Add target of event to be the state machine
190+
// But revert to a legacy event type for the target
186191
rule.addTarget(
187192
new events_targets.SfnStateMachine(this.stateMachineObj, {
188-
input: events.RuleTargetInput.fromEventPath('$.detail'),
193+
input: events.RuleTargetInput.fromObject({
194+
status: EventField.fromPath('$.detail.status'),
195+
timestamp: EventField.fromPath('$.detail.timestamp'),
196+
workflowName: EventField.fromPath('$.detail.workflow.name'),
197+
workflowVersion: EventField.fromPath('$.detail.workflow.version'),
198+
workflowRunName: EventField.fromPath('$.detail.workflowRunName'),
199+
portalRunId: EventField.fromPath('$.detail.portalRunId'),
200+
linkedLibraries: EventField.fromPath('$.detail.libraries'),
201+
payload: EventField.fromPath('$.detail.payload'),
202+
}),
189203
})
190204
);
191205

lib/workload/components/sfn-icav2-state-change-event-handler/step_functions_templates/icav2_get_workflow_status_and_raise_internal_event.asl.json

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -215,10 +215,12 @@
215215
"portalRunId.$": "$.get_event_data_step.portal_run_id",
216216
"timestamp.$": "$.get_event_data_step.timestamp",
217217
"status.$": "$.get_event_data_step.status",
218-
"workflowName.$": "$.get_event_data_step.workflow_name",
219-
"workflowVersion.$": "$.get_event_data_step.workflow_version",
218+
"workflow": {
219+
"name.$": "$.get_event_data_step.workflow_name",
220+
"version.$": "$.get_event_data_step.workflow_version"
221+
},
220222
"workflowRunName.$": "$.get_event_data_step.workflow_run_name",
221-
"linkedLibraries.$": "$.get_event_data_step.linked_libraries",
223+
"libraries.$": "$.get_event_data_step.linked_libraries",
222224
"payload": {
223225
"version": "${__service_version__}",
224226
"data.$": "$.set_data_event_outputs"

lib/workload/stateless/stacks/stacky-mcstackface/glue-constructs/kwik/part_4/push-fastq-list-row-qc-complete-event/index.ts

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { PythonFunction } from '@aws-cdk/aws-lambda-python-alpha';
99
import * as lambda from 'aws-cdk-lib/aws-lambda';
1010
import * as iam from 'aws-cdk-lib/aws-iam';
1111
import { Duration } from 'aws-cdk-lib';
12+
import { EventField } from 'aws-cdk-lib/aws-events';
1213

1314
/*
1415
Part 6
@@ -138,19 +139,29 @@ export class FastqListRowQcCompleteConstruct extends Construct {
138139
detailType: [this.WgtsQcCompleteMap.triggerDetailType],
139140
detail: {
140141
status: [{ 'equals-ignore-case': this.WgtsQcCompleteMap.triggerStatus }],
141-
workflowName: [
142-
{
142+
workflow: {
143+
name: {
143144
'equals-ignore-case': this.WgtsQcCompleteMap.triggerWorkflowName,
144145
},
145-
],
146+
},
146147
},
147148
},
148149
});
149150

150151
// Add target of event to be the state machine
152+
// But revert to a legacy event type for the target
151153
rule.addTarget(
152154
new eventsTargets.SfnStateMachine(qcCompleteSfn, {
153-
input: events.RuleTargetInput.fromEventPath('$.detail'),
155+
input: events.RuleTargetInput.fromObject({
156+
status: EventField.fromPath('$.detail.status'),
157+
timestamp: EventField.fromPath('$.detail.timestamp'),
158+
workflowName: EventField.fromPath('$.detail.workflow.name'),
159+
workflowVersion: EventField.fromPath('$.detail.workflow.version'),
160+
workflowRunName: EventField.fromPath('$.detail.workflowRunName'),
161+
portalRunId: EventField.fromPath('$.detail.portalRunId'),
162+
linkedLibraries: EventField.fromPath('$.detail.libraries'),
163+
payload: EventField.fromPath('$.detail.payload'),
164+
}),
154165
})
155166
);
156167
}

lib/workload/stateless/stacks/stacky-mcstackface/glue-constructs/pva/part_2/tn-complete-to-umccrise-draft/index.ts

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import * as secretsManager from 'aws-cdk-lib/aws-secretsmanager';
1313
import { WorkflowDraftRunStateChangeCommonPreambleConstruct } from '../../../../../../../components/sfn-workflowdraftrunstatechange-common-preamble';
1414
import { GenerateWorkflowRunStateChangeReadyConstruct } from '../../../../../../../components/sfn-generate-workflowrunstatechange-ready-event';
1515
import { NagSuppressions } from 'cdk-nag';
16+
import { EventField } from 'aws-cdk-lib/aws-events';
1617

1718
/*
1819
Part 2
@@ -197,19 +198,28 @@ export class TnCompleteToUmccriseReadyConstruct extends Construct {
197198
detailType: [this.UmccriseReadyMap.triggerDetailType],
198199
detail: {
199200
status: [{ 'equals-ignore-case': this.UmccriseReadyMap.triggerStatus }],
200-
workflowName: [
201-
{
201+
workflow: {
202+
name: {
202203
'equals-ignore-case': this.UmccriseReadyMap.triggerWorkflowName,
203204
},
204-
],
205+
},
205206
},
206207
},
207208
});
208209

209210
// Add target of event to be the state machine
210211
rule.addTarget(
211212
new eventsTargets.SfnStateMachine(qcCompleteToDraftSfn, {
212-
input: events.RuleTargetInput.fromEventPath('$.detail'),
213+
input: events.RuleTargetInput.fromObject({
214+
status: EventField.fromPath('$.detail.status'),
215+
timestamp: EventField.fromPath('$.detail.timestamp'),
216+
workflowName: EventField.fromPath('$.detail.workflow.name'),
217+
workflowVersion: EventField.fromPath('$.detail.workflow.version'),
218+
workflowRunName: EventField.fromPath('$.detail.workflowRunName'),
219+
portalRunId: EventField.fromPath('$.detail.portalRunId'),
220+
linkedLibraries: EventField.fromPath('$.detail.libraries'),
221+
payload: EventField.fromPath('$.detail.payload'),
222+
}),
213223
})
214224
);
215225
}

lib/workload/stateless/stacks/stacky-mcstackface/glue-constructs/roket/part_2/umccrise-and-wts-complete-to-rnasum-draft/index.ts

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import { GetMetadataLambdaConstruct } from '../../../../../../../components/pyth
1515
import { GenerateWorkflowRunStateChangeReadyConstruct } from '../../../../../../../components/sfn-generate-workflowrunstatechange-ready-event';
1616
import { rnasumIcav2PipelineVersion } from '../../../../../../../../../config/constants';
1717
import { NagSuppressions } from 'cdk-nag';
18+
import { EventField } from 'aws-cdk-lib/aws-events';
1819

1920
/*
2021
Part 4
@@ -241,22 +242,34 @@ export class UmccriseAndWtsCompleteToRnasumReadyConstruct extends Construct {
241242
detailType: [this.RnasumDraftMap.triggerDetailType],
242243
detail: {
243244
status: [{ 'equals-ignore-case': this.RnasumDraftMap.triggerStatus }],
244-
workflowName: [
245-
{
246-
'equals-ignore-case': this.RnasumDraftMap.triggerWorkflowName.umccrise,
247-
},
248-
{
249-
'equals-ignore-case': this.RnasumDraftMap.triggerWorkflowName.wts,
250-
},
251-
],
245+
workflow: {
246+
name: [
247+
{
248+
'equals-ignore-case': this.RnasumDraftMap.triggerWorkflowName.umccrise,
249+
},
250+
{
251+
'equals-ignore-case': this.RnasumDraftMap.triggerWorkflowName.wts,
252+
},
253+
],
254+
},
252255
},
253256
},
254257
});
255258

256259
// Add target of event to be the state machine
260+
// But revert to a legacy event type for the target
257261
rule.addTarget(
258262
new eventsTargets.SfnStateMachine(umccriseAndWtsCompleteToDraftSfn, {
259-
input: events.RuleTargetInput.fromEventPath('$.detail'),
263+
input: events.RuleTargetInput.fromObject({
264+
status: EventField.fromPath('$.detail.status'),
265+
timestamp: EventField.fromPath('$.detail.timestamp'),
266+
workflowName: EventField.fromPath('$.detail.workflow.name'),
267+
workflowVersion: EventField.fromPath('$.detail.workflow.version'),
268+
workflowRunName: EventField.fromPath('$.detail.workflowRunName'),
269+
portalRunId: EventField.fromPath('$.detail.portalRunId'),
270+
linkedLibraries: EventField.fromPath('$.detail.libraries'),
271+
payload: EventField.fromPath('$.detail.payload'),
272+
}),
260273
})
261274
);
262275
}

0 commit comments

Comments
 (0)