|
@@ -100,19 +100,33 @@ public class DefaultExamSprintReportApplicationService implements ExamSprintRepo
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
public CreateExamSprintReportWithUrlResponse createOutlookReportSync(JsonNode payload) {
|
|
public CreateExamSprintReportWithUrlResponse createOutlookReportSync(JsonNode payload) {
|
|
|
- logReceivedPayload(ReportType.OUTLOOK, "sync", payload);
|
|
|
|
|
|
|
+ SyncPreparationTiming timing = startSyncPreparation(ReportType.OUTLOOK, payload);
|
|
|
validateOutlookPayload(payload);
|
|
validateOutlookPayload(payload);
|
|
|
|
|
+ timing.markValidationCompleted();
|
|
|
JsonNode normalizedPayload = normalizeOutlookPayload(payload);
|
|
JsonNode normalizedPayload = normalizeOutlookPayload(payload);
|
|
|
- return submitReportGenerationSync(ReportType.OUTLOOK, new UnmodeledReportContent(ReportType.OUTLOOK, normalizedPayload));
|
|
|
|
|
|
|
+ ReportContent content = new UnmodeledReportContent(ReportType.OUTLOOK, normalizedPayload);
|
|
|
|
|
+ timing.markContentMappingCompleted();
|
|
|
|
|
+ timing.logCompleted();
|
|
|
|
|
+ return submitReportGenerationSync(ReportType.OUTLOOK, content);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
public CreateExamSprintReportWithUrlResponse createAchievementReportSync(JsonNode payload) {
|
|
public CreateExamSprintReportWithUrlResponse createAchievementReportSync(JsonNode payload) {
|
|
|
- logReceivedPayload(ReportType.ACHIEVEMENT, "sync", payload);
|
|
|
|
|
|
|
+ SyncPreparationTiming timing = startSyncPreparation(ReportType.ACHIEVEMENT, payload);
|
|
|
AchievementReportContent content = validateAchievementPayload(payload);
|
|
AchievementReportContent content = validateAchievementPayload(payload);
|
|
|
|
|
+ timing.markValidationCompleted();
|
|
|
|
|
+ timing.markContentMappingCompleted();
|
|
|
|
|
+ timing.logCompleted();
|
|
|
return submitReportGenerationSync(ReportType.ACHIEVEMENT, content);
|
|
return submitReportGenerationSync(ReportType.ACHIEVEMENT, content);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ private SyncPreparationTiming startSyncPreparation(ReportType reportType, JsonNode payload) {
|
|
|
|
|
+ SyncPreparationTiming timing = new SyncPreparationTiming(reportType);
|
|
|
|
|
+ logReceivedPayload(reportType, "sync", payload);
|
|
|
|
|
+ timing.markPayloadSummaryCompleted();
|
|
|
|
|
+ return timing;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
private void logReceivedPayload(ReportType reportType, String mode, JsonNode payload) {
|
|
private void logReceivedPayload(ReportType reportType, String mode, JsonNode payload) {
|
|
|
log.info(
|
|
log.info(
|
|
|
"exam_sprint_report_payload_received reportType={} mode={} payload={}",
|
|
"exam_sprint_report_payload_received reportType={} mode={} payload={}",
|
|
@@ -296,6 +310,40 @@ public class DefaultExamSprintReportApplicationService implements ExamSprintRepo
|
|
|
downloadUrl);
|
|
downloadUrl);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ private final class SyncPreparationTiming {
|
|
|
|
|
+ private final ReportType reportType;
|
|
|
|
|
+ private final long startedNanos = System.nanoTime();
|
|
|
|
|
+ private long payloadSummaryDurationMs;
|
|
|
|
|
+ private long validationDurationMs;
|
|
|
|
|
+ private long contentMappingDurationMs;
|
|
|
|
|
+
|
|
|
|
|
+ private SyncPreparationTiming(ReportType reportType) {
|
|
|
|
|
+ this.reportType = reportType;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private void markPayloadSummaryCompleted() {
|
|
|
|
|
+ payloadSummaryDurationMs = elapsedMillis(startedNanos);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private void markValidationCompleted() {
|
|
|
|
|
+ validationDurationMs = elapsedMillis(startedNanos) - payloadSummaryDurationMs;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private void markContentMappingCompleted() {
|
|
|
|
|
+ contentMappingDurationMs = elapsedMillis(startedNanos) - payloadSummaryDurationMs - validationDurationMs;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private void logCompleted() {
|
|
|
|
|
+ log.info(
|
|
|
|
|
+ "exam_sprint_report_sync_stage_completed reportType={} stage=prepare_content durationMs={} payloadSummaryDurationMs={} validationDurationMs={} contentMappingDurationMs={}",
|
|
|
|
|
+ reportType,
|
|
|
|
|
+ elapsedMillis(startedNanos),
|
|
|
|
|
+ payloadSummaryDurationMs,
|
|
|
|
|
+ validationDurationMs,
|
|
|
|
|
+ contentMappingDurationMs);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
@Override
|
|
@Override
|
|
|
public ExamSprintReportDetailResponse getReport(String reportId) {
|
|
public ExamSprintReportDetailResponse getReport(String reportId) {
|
|
|
Instant now = clock.instant();
|
|
Instant now = clock.instant();
|