29
29
import ca .bc .gov .educ .penreg .api .struct .PenRequestBatchStudentSagaData ;
30
30
import ca .bc .gov .educ .penreg .api .struct .PenRequestValidationIssue ;
31
31
import ca .bc .gov .educ .penreg .api .util .JsonUtil ;
32
+ import ca .bc .gov .educ .penreg .api .util .Stopwatch ;
32
33
import com .fasterxml .jackson .core .JsonProcessingException ;
33
34
import com .fasterxml .jackson .core .type .TypeReference ;
34
35
import com .fasterxml .jackson .databind .ObjectMapper ;
35
36
import java .io .IOException ;
36
37
import java .util .List ;
37
38
import java .util .Optional ;
39
+ import java .util .UUID ;
38
40
import java .util .concurrent .TimeoutException ;
39
41
import java .util .stream .Collectors ;
40
42
import lombok .Getter ;
@@ -111,12 +113,18 @@ public void populateStepsToExecuteMap() {
111
113
* @throws JsonProcessingException the json processing exception
112
114
*/
113
115
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 ();
114
120
final var scrubbedSagaData = this .getPenRequestBatchStudentOrchestratorService ()
115
121
.scrubPayload (penRequestBatchStudentSagaData );
116
122
final SagaEvent eventStates = this .createEventState (saga , event .getEventType (), event .getEventOutcome (), event .getEventPayload ());
117
123
saga .setSagaState (VALIDATE_STUDENT_DEMOGRAPHICS .toString ());
118
124
saga .setPayload (JsonUtil .getJsonStringFromObject (scrubbedSagaData )); // update the payload with scrubbed values to use it in the saga process...
125
+ updateAttachedSagaWithEvents .start ();
119
126
this .getSagaService ().updateAttachedSagaWithEvents (saga , eventStates );
127
+ updateAttachedSagaWithEvents .stop ();
120
128
final var validationPayload = validationMapper .toStudentDemogValidationPayload (scrubbedSagaData );
121
129
122
130
validationPayload .setTransactionID (saga .getSagaId ().toString ());
@@ -133,6 +141,8 @@ protected void validateStudentDemographics(final Event event, final Saga saga, f
133
141
log .error ("event payload is not present this should not have happened. :: {}" , saga .getSagaId ());
134
142
}
135
143
144
+ validateStudentDemographics .stop ();
145
+
136
146
}
137
147
138
148
/**
@@ -148,6 +158,12 @@ protected void validateStudentDemographics(final Event event, final Saga saga, f
148
158
* @throws TimeoutException the timeout exception
149
159
*/
150
160
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
+
151
167
final Optional <Event > eventOptional ;
152
168
if (penRequestBatchStudentSagaData .getIsPENMatchResultsProcessed () == null || !penRequestBatchStudentSagaData .getIsPENMatchResultsProcessed ()) {
153
169
// 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
156
172
final var penMatchResult = JsonUtil .getJsonObjectFromString (PenMatchResult .class , event .getEventPayload ());
157
173
penRequestBatchStudentSagaData .setPenMatchResult (penMatchResult ); // update the original payload with response from PEN_MATCH_API
158
174
saga .setPayload (JsonUtil .getJsonStringFromObject (penRequestBatchStudentSagaData )); // save the updated payload to DB...
175
+
176
+ updateAttachedSaga .start ();
159
177
this .getSagaService ().updateAttachedSagaWithEvents (saga , eventStates );
178
+ updateAttachedSaga .stop ();
160
179
161
180
eventOptional = this .getPenRequestBatchStudentOrchestratorService ().processPenMatchResult (saga , penRequestBatchStudentSagaData , penMatchResult );
162
181
163
182
penRequestBatchStudentSagaData .setIsPENMatchResultsProcessed (true );
164
183
saga .setPayload (JsonUtil .getJsonStringFromObject (penRequestBatchStudentSagaData )); // save the updated payload to DB...
184
+
185
+ updateAttachedEntityDuringSaga .start ();
165
186
this .getSagaService ().updateAttachedEntityDuringSagaProcess (saga );
187
+ updateAttachedEntityDuringSaga .stop ();
166
188
} else {
167
189
eventOptional = Optional .of (Event .builder ().sagaId (saga .getSagaId ())
168
190
.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
177
199
.build ());
178
200
}
179
201
202
+ processPenMatchResults .stop ();
203
+
180
204
}
181
205
182
206
@@ -188,11 +212,21 @@ protected void processPenMatchResults(final Event event, final Saga saga, final
188
212
* @param penRequestBatchStudentSagaData the pen request batch student saga data
189
213
*/
190
214
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
+
191
221
final SagaEvent eventStates = this .createEventState (saga , event .getEventType (), event .getEventOutcome (), event .getEventPayload ());
192
222
saga .setSagaState (PROCESS_PEN_MATCH .toString ());
223
+ updateAttachedSagaWithEvents .start ();
193
224
this .getSagaService ().updateAttachedSagaWithEvents (saga , eventStates );
225
+ updateAttachedSagaWithEvents .stop ();
194
226
// need to persist the validation warnings from response payload.
227
+ saveDemogValidationResults .start ();
195
228
this .saveDemogValidationResults (event , penRequestBatchStudentSagaData );
229
+ saveDemogValidationResults .stop ();
196
230
final var eventPayload = JsonUtil .getJsonString (penMatchSagaMapper .toPenMatchStudent (penRequestBatchStudentSagaData ));
197
231
if (eventPayload .isPresent ()) {
198
232
final Event nextEvent = Event .builder ().sagaId (saga .getSagaId ())
@@ -206,6 +240,8 @@ protected void processPenMatch(final Event event, final Saga saga, final PenRequ
206
240
log .error ("event payload is not present this should not have happened. :: {}" , saga .getSagaId ());
207
241
}
208
242
243
+ processPenMatch .stop ();
244
+
209
245
}
210
246
211
247
/**
@@ -226,6 +262,10 @@ private void completePenRequestBatchStudentSaga(final Event event, final Saga sa
226
262
* @param sagaData the saga data
227
263
*/
228
264
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 ();
229
269
if (event .getEventType () == VALIDATE_STUDENT_DEMOGRAPHICS
230
270
&& StringUtils .isNotBlank (event .getEventPayload ())
231
271
&& !StringUtils .equalsIgnoreCase (VALIDATION_SUCCESS_NO_ERROR_WARNING .toString (), event .getEventPayload ())) {
@@ -241,11 +281,15 @@ protected void saveDemogValidationResults(final Event event, final PenRequestBat
241
281
final var validationResults = new ObjectMapper ().readValue (event .getEventPayload (), responseType );
242
282
if (!validationResults .isEmpty ()) {
243
283
final var mappedEntities = validationResults .stream ().map (issueMapper ::toModel ).collect (Collectors .toList ());
284
+ saveDemogValidationResultsAndUpdateStudentStatus .start ();
244
285
this .getPenRequestBatchStudentOrchestratorService ().saveDemogValidationResultsAndUpdateStudentStatus (mappedEntities , statusCode , sagaData .getPenRequestBatchStudentID ());
286
+ saveDemogValidationResultsAndUpdateStudentStatus .stop ();
245
287
}
246
288
} catch (final JsonProcessingException ex ) {
247
289
log .error ("json exception for :: {} {}" , event .getSagaId ().toString (), ex );
248
290
}
291
+
292
+ saveDemogValidationResults .stop ();
249
293
}
250
294
}
251
295
}
0 commit comments