Skip to content

Commit 0fc16cd

Browse files
authored
Add closeTimeMs to history group events (#910)
1 parent 00c1683 commit 0fc16cd

17 files changed

+154
-10
lines changed

src/views/workflow-history/helpers/__tests__/get-common-history-group-fields.test.ts

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,18 @@ describe('getCommonHistoryGroupFields', () => {
8080
);
8181
});
8282

83+
it('should return group with closeTimeMs equal to closeEvent timeMs', () => {
84+
const group = setup({
85+
closeEvent: fireTimerTaskEvent,
86+
});
87+
expect(group.closeTimeMs).toEqual(1725748470005.1672);
88+
});
89+
90+
it('should return group with closeTimeMs equal to null if no closeEvent is passed', () => {
91+
const group = setup({});
92+
expect(group.closeTimeMs).toEqual(null);
93+
});
94+
8395
const groupFieldsExtractedFromEventsMetadaTests: {
8496
name: string;
8597
groupField: 'events' | 'eventsMetadata' | 'status' | 'timeMs' | 'timeLabel';
@@ -121,13 +133,15 @@ function setup({
121133
eventToTimeLabelPrefixMap = {},
122134
eventToLabel,
123135
eventToStatus,
136+
closeEvent,
124137
}: {
125138
events?: TimerHistoryEvent[];
126139
eventToStatus?: HistoryGroupEventToStatusMap<TimerHistoryGroup>;
127140
eventToLabel?: HistoryGroupEventToStringMap<TimerHistoryGroup>;
128141
eventToTimeLabelPrefixMap?: Partial<
129142
HistoryGroupEventToStringMap<TimerHistoryGroup>
130143
>;
144+
closeEvent?: TimerHistoryEvent;
131145
}) {
132146
const mockEvents: TimerHistoryEvent[] = events || [
133147
startTimerTaskEvent,
@@ -150,6 +164,7 @@ function setup({
150164
mockEvents,
151165
mockedEventToStatus,
152166
mockedEventToLabel,
153-
eventToTimeLabelPrefixMap
167+
eventToTimeLabelPrefixMap,
168+
closeEvent
154169
);
155170
}

src/views/workflow-history/helpers/get-common-history-group-fields.ts

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,16 @@ export default function getCommonHistoryGroupFields<
1414
events: GroupT['events'],
1515
HistoryGroupEventToStatusMap: HistoryGroupEventToStatusMap<GroupT>,
1616
eventToLabelMap: HistoryGroupEventToStringMap<GroupT>,
17-
eventToTimeLabelPrefixMap: Partial<HistoryGroupEventToStringMap<GroupT>>
17+
eventToTimeLabelPrefixMap: Partial<HistoryGroupEventToStringMap<GroupT>>,
18+
closeEvent: GroupT['events'][number] | null | undefined
1819
): Pick<
1920
GroupT,
20-
'eventsMetadata' | 'events' | 'status' | 'timeMs' | 'timeLabel'
21+
| 'eventsMetadata'
22+
| 'events'
23+
| 'status'
24+
| 'timeMs'
25+
| 'timeLabel'
26+
| 'closeTimeMs'
2127
> {
2228
const eventsMetadata = events.map((event, index) => {
2329
const attrs = event.attributes as GroupT['events'][number]['attributes'];
@@ -30,6 +36,7 @@ export default function getCommonHistoryGroupFields<
3036
const prefix = eventToTimeLabelPrefixMap.hasOwnProperty(attrs)
3137
? eventToTimeLabelPrefixMap[attrs]
3238
: `${eventToLabelMap[attrs]} at`;
39+
3340
return {
3441
label: eventToLabelMap[attrs],
3542
status: eventStatus,
@@ -41,12 +48,16 @@ export default function getCommonHistoryGroupFields<
4148
const groupStatus = eventsMetadata[eventsMetadata.length - 1].status;
4249
const groupTimeMs = eventsMetadata[eventsMetadata.length - 1].timeMs;
4350
const groupTimeLabel = eventsMetadata[eventsMetadata.length - 1].timeLabel;
51+
const groupCloseTimeMs = closeEvent?.eventTime
52+
? parseGrpcTimestamp(closeEvent.eventTime)
53+
: null;
4454

4555
return {
4656
eventsMetadata,
4757
events,
4858
status: groupStatus,
4959
timeMs: groupTimeMs,
60+
closeTimeMs: groupCloseTimeMs,
5061
timeLabel: groupTimeLabel,
5162
};
5263
}

src/views/workflow-history/helpers/get-history-group-from-events/__tests__/get-activity-group-from-events.test.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,4 +232,26 @@ describe('getActivityGroupFromEvents', () => {
232232
/^Last started at/
233233
);
234234
});
235+
236+
it('should return group with closeTimeMs equal to closeEvent or timeoutEvent timeMs', () => {
237+
const group = getActivityGroupFromEvents([
238+
scheduleActivityTaskEvent,
239+
startActivityTaskEvent,
240+
completeActivityTaskEvent,
241+
]);
242+
expect(group.closeTimeMs).toEqual(1725747370632.0728);
243+
244+
const groupWithTimeoutEvent = getActivityGroupFromEvents([
245+
scheduleActivityTaskEvent,
246+
startActivityTaskEvent,
247+
timeoutActivityTaskEvent,
248+
]);
249+
expect(groupWithTimeoutEvent.closeTimeMs).toEqual(1725747370632.0728);
250+
251+
const groupWithMissingCloseEvent = getActivityGroupFromEvents([
252+
scheduleActivityTaskEvent,
253+
startActivityTaskEvent,
254+
]);
255+
expect(groupWithMissingCloseEvent.closeTimeMs).toEqual(null);
256+
});
235257
});

src/views/workflow-history/helpers/get-history-group-from-events/__tests__/get-child-workflow-execution-group-from-events.test.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,4 +208,24 @@ describe('getChildWorkflowExecutionGroupFromEvents', () => {
208208
'Canceled at 08 Sep, 04:27:55 UTC',
209209
]);
210210
});
211+
212+
it('should return group with closeTimeMs equal to closeEvent or startFailedEvent timeMs', () => {
213+
const group = getChildWorkflowExecutionGroupFromEvents([
214+
initiateChildWorkflowEvent,
215+
startChildWorkflowEvent,
216+
completeChildWorkflowEvent,
217+
]);
218+
expect(group.closeTimeMs).toEqual(1725769674218.1462);
219+
220+
const groupWithStartFailedEvent = getChildWorkflowExecutionGroupFromEvents([
221+
initiateChildWorkflowEvent,
222+
initiateFailureChildWorkflowEvent,
223+
]);
224+
expect(groupWithStartFailedEvent.closeTimeMs).toEqual(1725769672830.1233);
225+
226+
const groupWithMissingCloseEvent = getChildWorkflowExecutionGroupFromEvents(
227+
[initiateChildWorkflowEvent, startChildWorkflowEvent]
228+
);
229+
expect(groupWithMissingCloseEvent.closeTimeMs).toEqual(null);
230+
});
211231
});

src/views/workflow-history/helpers/get-history-group-from-events/__tests__/get-decision-group-from-events.test.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,4 +289,25 @@ describe('getDecisionGroupFromEvents', () => {
289289
const group = getDecisionGroupFromEvents(events);
290290
expect(group.resetToDecisionEventId).toBe(timeoutDecisionTaskEvent.eventId);
291291
});
292+
293+
it('should return group with closeTimeMs equal to closeEvent or timeoutEvent timeMs', () => {
294+
const group = getDecisionGroupFromEvents([
295+
scheduleDecisionTaskEvent,
296+
startDecisionTaskEvent,
297+
completeDecisionTaskEvent,
298+
]);
299+
expect(group.closeTimeMs).toEqual(1725747370599.273);
300+
301+
const groupWithTimeoutEvent = getDecisionGroupFromEvents([
302+
scheduleDecisionTaskEvent,
303+
timeoutDecisionTaskEvent,
304+
]);
305+
expect(groupWithTimeoutEvent.closeTimeMs).toEqual(1725747370599.273);
306+
307+
const groupWithMissingCloseEvent = getDecisionGroupFromEvents([
308+
scheduleDecisionTaskEvent,
309+
startDecisionTaskEvent,
310+
]);
311+
expect(groupWithMissingCloseEvent.closeTimeMs).toEqual(null);
312+
});
292313
});

src/views/workflow-history/helpers/get-history-group-from-events/__tests__/get-request-cancel-external-workflow-execution-group-from-events.test.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,4 +114,18 @@ describe('getRequestCancelExternalWorkflowExecutionGroupFromEvents', () => {
114114
'Requested at 07 Sep, 22:52:50 UTC',
115115
]);
116116
});
117+
118+
it('should return group with closeTimeMs equal to closeEvent timeMs', () => {
119+
const group = getRequestCancelExternalWorkflowExecutionGroupFromEvents([
120+
initiateRequestCancelExternalWorkflowEvent,
121+
requestCancelExternalWorkflowEvent,
122+
]);
123+
expect(group.closeTimeMs).toEqual(1725749570927.7693);
124+
125+
const groupWithMissingCloseEvent =
126+
getRequestCancelExternalWorkflowExecutionGroupFromEvents([
127+
initiateRequestCancelExternalWorkflowEvent,
128+
]);
129+
expect(groupWithMissingCloseEvent.closeTimeMs).toEqual(null);
130+
});
117131
});

src/views/workflow-history/helpers/get-history-group-from-events/__tests__/get-signal-external-workflow-execution-group-from-events.test.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,4 +124,17 @@ describe('getSignalExternalWorkflowExecutionGroupFromEvents', () => {
124124
'Signaled at 08 Sep, 04:26:10 UTC',
125125
]);
126126
});
127+
128+
it('should return group with closeTimeMs equal to closeEvent timeMs', () => {
129+
const group = getSignalExternalWorkflowExecutionGroupFromEvents([
130+
initiateSignalExternalWorkflowEvent,
131+
signalExternalWorkflowEvent,
132+
]);
133+
expect(group.closeTimeMs).toEqual(1725769570375.7908);
134+
const groupWithMissingCloseEvent =
135+
getSignalExternalWorkflowExecutionGroupFromEvents([
136+
initiateSignalExternalWorkflowEvent,
137+
]);
138+
expect(groupWithMissingCloseEvent.closeTimeMs).toEqual(null);
139+
});
127140
});

src/views/workflow-history/helpers/get-history-group-from-events/__tests__/get-single-event-group-from-events.test.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,4 +131,11 @@ describe('getSingleEventGroupFromEvents', () => {
131131
);
132132
}
133133
});
134+
135+
it('should return group with closeTimeMs equal to null', () => {
136+
for (const event of events) {
137+
const group = getSingleEventGroupFromEvents([event]);
138+
expect(group.closeTimeMs).toEqual(null);
139+
}
140+
});
134141
});

src/views/workflow-history/helpers/get-history-group-from-events/__tests__/get-timer-group-from-events.test.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,4 +114,17 @@ describe('getTimerGroupFromEvents', () => {
114114
'Fired at 07 Sep, 22:34:30 UTC',
115115
]);
116116
});
117+
118+
it('should return group with closeTimeMs equal to closeEvent timeMs', () => {
119+
const group = getTimerGroupFromEvents([
120+
startTimerTaskEvent,
121+
fireTimerTaskEvent,
122+
]);
123+
expect(group.closeTimeMs).toEqual(1725748470005.1672);
124+
125+
const groupWithMissingCloseEvent = getTimerGroupFromEvents([
126+
startTimerTaskEvent,
127+
]);
128+
expect(groupWithMissingCloseEvent.closeTimeMs).toEqual(null);
129+
});
117130
});

src/views/workflow-history/helpers/get-history-group-from-events/get-activity-group-from-events.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,8 @@ export default function getActivityGroupFromEvents(
104104
events,
105105
eventToStatus,
106106
eventToLabel,
107-
{ pendingActivityTaskStartEventAttributes: pendingStartEventTimePrefix }
107+
{ pendingActivityTaskStartEventAttributes: pendingStartEventTimePrefix },
108+
closeEvent || timeoutEvent
108109
),
109110
};
110111
}

0 commit comments

Comments
 (0)