Skip to content

Commit 3acaae4

Browse files
committed
WIP adding in timers for student orchestrator.
1 parent b2647fc commit 3acaae4

File tree

2 files changed

+69
-0
lines changed

2 files changed

+69
-0
lines changed

api/src/main/java/ca/bc/gov/educ/penreg/api/orchestrator/PenReqBatchStudentOrchestrator.java

+44
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,14 @@
2929
import ca.bc.gov.educ.penreg.api.struct.PenRequestBatchStudentSagaData;
3030
import ca.bc.gov.educ.penreg.api.struct.PenRequestValidationIssue;
3131
import ca.bc.gov.educ.penreg.api.util.JsonUtil;
32+
import ca.bc.gov.educ.penreg.api.util.Stopwatch;
3233
import com.fasterxml.jackson.core.JsonProcessingException;
3334
import com.fasterxml.jackson.core.type.TypeReference;
3435
import com.fasterxml.jackson.databind.ObjectMapper;
3536
import java.io.IOException;
3637
import java.util.List;
3738
import java.util.Optional;
39+
import java.util.UUID;
3840
import java.util.concurrent.TimeoutException;
3941
import java.util.stream.Collectors;
4042
import lombok.Getter;
@@ -111,12 +113,18 @@ public void populateStepsToExecuteMap() {
111113
* @throws JsonProcessingException the json processing exception
112114
*/
113115
protected void validateStudentDemographics(final Event event, final Saga saga, final PenRequestBatchStudentSagaData penRequestBatchStudentSagaData) throws IOException, InterruptedException, TimeoutException {
116+
UUID sagaId = saga.getSagaId();
117+
Stopwatch validateStudentDemographics = new Stopwatch("validateStudentDemographics", sagaId);
118+
Stopwatch updateAttachedSagaWithEvents = new Stopwatch("updateAttachedSagaWithEvents", sagaId);
119+
validateStudentDemographics.start();
114120
final var scrubbedSagaData = this.getPenRequestBatchStudentOrchestratorService()
115121
.scrubPayload(penRequestBatchStudentSagaData);
116122
final SagaEvent eventStates = this.createEventState(saga, event.getEventType(), event.getEventOutcome(), event.getEventPayload());
117123
saga.setSagaState(VALIDATE_STUDENT_DEMOGRAPHICS.toString());
118124
saga.setPayload(JsonUtil.getJsonStringFromObject(scrubbedSagaData)); // update the payload with scrubbed values to use it in the saga process...
125+
updateAttachedSagaWithEvents.start();
119126
this.getSagaService().updateAttachedSagaWithEvents(saga, eventStates);
127+
updateAttachedSagaWithEvents.stop();
120128
final var validationPayload = validationMapper.toStudentDemogValidationPayload(scrubbedSagaData);
121129

122130
validationPayload.setTransactionID(saga.getSagaId().toString());
@@ -133,6 +141,8 @@ protected void validateStudentDemographics(final Event event, final Saga saga, f
133141
log.error("event payload is not present this should not have happened. :: {}", saga.getSagaId());
134142
}
135143

144+
validateStudentDemographics.stop();
145+
136146
}
137147

138148
/**
@@ -148,6 +158,12 @@ protected void validateStudentDemographics(final Event event, final Saga saga, f
148158
* @throws TimeoutException the timeout exception
149159
*/
150160
protected void processPenMatchResults(final Event event, final Saga saga, final PenRequestBatchStudentSagaData penRequestBatchStudentSagaData) throws IOException, InterruptedException, TimeoutException {
161+
UUID sagaId = saga.getSagaId();
162+
Stopwatch processPenMatchResults = new Stopwatch("processPenMatchResults", sagaId);
163+
Stopwatch updateAttachedSaga = new Stopwatch("updateAttachedSagaWithEvents", sagaId);
164+
Stopwatch updateAttachedEntityDuringSaga = new Stopwatch("updateAttachedEntityDuringSagaProcess", sagaId);
165+
processPenMatchResults.start();
166+
151167
final Optional<Event> eventOptional;
152168
if (penRequestBatchStudentSagaData.getIsPENMatchResultsProcessed() == null || !penRequestBatchStudentSagaData.getIsPENMatchResultsProcessed()) {
153169
// this is necessary to check, to avoid duplicate execution during replay process.
@@ -156,13 +172,19 @@ protected void processPenMatchResults(final Event event, final Saga saga, final
156172
final var penMatchResult = JsonUtil.getJsonObjectFromString(PenMatchResult.class, event.getEventPayload());
157173
penRequestBatchStudentSagaData.setPenMatchResult(penMatchResult); // update the original payload with response from PEN_MATCH_API
158174
saga.setPayload(JsonUtil.getJsonStringFromObject(penRequestBatchStudentSagaData)); // save the updated payload to DB...
175+
176+
updateAttachedSaga.start();
159177
this.getSagaService().updateAttachedSagaWithEvents(saga, eventStates);
178+
updateAttachedSaga.stop();
160179

161180
eventOptional = this.getPenRequestBatchStudentOrchestratorService().processPenMatchResult(saga, penRequestBatchStudentSagaData, penMatchResult);
162181

163182
penRequestBatchStudentSagaData.setIsPENMatchResultsProcessed(true);
164183
saga.setPayload(JsonUtil.getJsonStringFromObject(penRequestBatchStudentSagaData)); // save the updated payload to DB...
184+
185+
updateAttachedEntityDuringSaga.start();
165186
this.getSagaService().updateAttachedEntityDuringSagaProcess(saga);
187+
updateAttachedEntityDuringSaga.stop();
166188
} else {
167189
eventOptional = Optional.of(Event.builder().sagaId(saga.getSagaId())
168190
.eventType(PROCESS_PEN_MATCH_RESULTS).eventOutcome(PEN_MATCH_RESULTS_PROCESSED).eventPayload(penRequestBatchStudentSagaData.getPenMatchResult().getPenStatus())
@@ -177,6 +199,8 @@ protected void processPenMatchResults(final Event event, final Saga saga, final
177199
.build());
178200
}
179201

202+
processPenMatchResults.stop();
203+
180204
}
181205

182206

@@ -188,11 +212,21 @@ protected void processPenMatchResults(final Event event, final Saga saga, final
188212
* @param penRequestBatchStudentSagaData the pen request batch student saga data
189213
*/
190214
protected void processPenMatch(final Event event, final Saga saga, final PenRequestBatchStudentSagaData penRequestBatchStudentSagaData) {
215+
UUID sagaId = saga.getSagaId();
216+
Stopwatch processPenMatch = new Stopwatch("processPenMatch", sagaId);
217+
Stopwatch updateAttachedSagaWithEvents = new Stopwatch("updateAttachedSagaWithEvents", sagaId);
218+
Stopwatch saveDemogValidationResults = new Stopwatch("saveDemogValidationResults", sagaId);
219+
processPenMatch.start();
220+
191221
final SagaEvent eventStates = this.createEventState(saga, event.getEventType(), event.getEventOutcome(), event.getEventPayload());
192222
saga.setSagaState(PROCESS_PEN_MATCH.toString());
223+
updateAttachedSagaWithEvents.start();
193224
this.getSagaService().updateAttachedSagaWithEvents(saga, eventStates);
225+
updateAttachedSagaWithEvents.stop();
194226
// need to persist the validation warnings from response payload.
227+
saveDemogValidationResults.start();
195228
this.saveDemogValidationResults(event, penRequestBatchStudentSagaData);
229+
saveDemogValidationResults.stop();
196230
final var eventPayload = JsonUtil.getJsonString(penMatchSagaMapper.toPenMatchStudent(penRequestBatchStudentSagaData));
197231
if (eventPayload.isPresent()) {
198232
final Event nextEvent = Event.builder().sagaId(saga.getSagaId())
@@ -206,6 +240,8 @@ protected void processPenMatch(final Event event, final Saga saga, final PenRequ
206240
log.error("event payload is not present this should not have happened. :: {}", saga.getSagaId());
207241
}
208242

243+
processPenMatch.stop();
244+
209245
}
210246

211247
/**
@@ -226,6 +262,10 @@ private void completePenRequestBatchStudentSaga(final Event event, final Saga sa
226262
* @param sagaData the saga data
227263
*/
228264
protected void saveDemogValidationResults(final Event event, final PenRequestBatchStudentSagaData sagaData) {
265+
UUID sagaId = event.getSagaId();
266+
Stopwatch saveDemogValidationResults = new Stopwatch("saveDemogValidationResults", sagaId);
267+
Stopwatch saveDemogValidationResultsAndUpdateStudentStatus = new Stopwatch("saveDemogValidationResultsAndUpdateStudentStatus", sagaId);
268+
saveDemogValidationResults.start();
229269
if (event.getEventType() == VALIDATE_STUDENT_DEMOGRAPHICS
230270
&& StringUtils.isNotBlank(event.getEventPayload())
231271
&& !StringUtils.equalsIgnoreCase(VALIDATION_SUCCESS_NO_ERROR_WARNING.toString(), event.getEventPayload())) {
@@ -241,11 +281,15 @@ protected void saveDemogValidationResults(final Event event, final PenRequestBat
241281
final var validationResults = new ObjectMapper().readValue(event.getEventPayload(), responseType);
242282
if (!validationResults.isEmpty()) {
243283
final var mappedEntities = validationResults.stream().map(issueMapper::toModel).collect(Collectors.toList());
284+
saveDemogValidationResultsAndUpdateStudentStatus.start();
244285
this.getPenRequestBatchStudentOrchestratorService().saveDemogValidationResultsAndUpdateStudentStatus(mappedEntities, statusCode, sagaData.getPenRequestBatchStudentID());
286+
saveDemogValidationResultsAndUpdateStudentStatus.stop();
245287
}
246288
} catch (final JsonProcessingException ex) {
247289
log.error("json exception for :: {} {}", event.getSagaId().toString(), ex);
248290
}
291+
292+
saveDemogValidationResults.stop();
249293
}
250294
}
251295
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package ca.bc.gov.educ.penreg.api.util;
2+
3+
import java.util.UUID;
4+
import lombok.extern.slf4j.Slf4j;
5+
6+
@Slf4j
7+
public class Stopwatch {
8+
private long startTime;
9+
private final String functionName;
10+
private final UUID sagaId;
11+
12+
public Stopwatch(String functionName, UUID sagaId) {
13+
this.functionName = functionName;
14+
this.sagaId = sagaId;
15+
}
16+
17+
public void start() {
18+
startTime = System.nanoTime();
19+
}
20+
21+
public void stop() {
22+
long endTime = System.nanoTime();
23+
log.info("function :: {} took {} milliseconds for sagaId {}", this.functionName, (endTime - this.startTime) / 10000000, this.sagaId);
24+
}
25+
}

0 commit comments

Comments
 (0)