Forráskód Böngészése

feat(临考突击报告): 细拆展望报告校验耗时日志

金逸霄 1 hete
szülő
commit
0fde343e4c

+ 16 - 0
abilities/exam-sprint/application/src/main/java/cn/yunzhixue/ability/center/examsprint/application/report/DefaultExamSprintReportApplicationService.java

@@ -523,13 +523,29 @@ public class DefaultExamSprintReportApplicationService implements ExamSprintRepo
     }
 
     private void validateOutlookPayload(JsonNode payload) {
+        long startedNanos = System.nanoTime();
         validateOutlookStudentNameFields(payload);
+        long studentNameDurationMs = elapsedMillis(startedNanos);
         validateOutlookPayloadShape(payload);
+        long shapeDurationMs = elapsedMillis(startedNanos) - studentNameDurationMs;
         OutlookExamSprintReportPayload reportPayload = readPayload(
                 outlookPayloadForValidation(payload),
                 OutlookExamSprintReportPayload.class,
                 OUTLOOK_REPORT_NAME);
+        long deserializationDurationMs = elapsedMillis(startedNanos) - studentNameDurationMs - shapeDurationMs;
         validatePayload(reportPayload, OUTLOOK_REPORT_NAME, this::toOutlookFieldPath);
+        long beanValidationDurationMs = elapsedMillis(startedNanos)
+                - studentNameDurationMs
+                - shapeDurationMs
+                - deserializationDurationMs;
+        log.info(
+                "exam_sprint_report_validation_stage_completed reportType={} stage=validate_payload durationMs={} studentNameDurationMs={} shapeDurationMs={} deserializationDurationMs={} beanValidationDurationMs={}",
+                ReportType.OUTLOOK,
+                elapsedMillis(startedNanos),
+                studentNameDurationMs,
+                shapeDurationMs,
+                deserializationDurationMs,
+                beanValidationDurationMs);
     }
 
     private void validateOutlookStudentNameFields(JsonNode payload) {

+ 23 - 0
abilities/exam-sprint/application/src/test/java/cn/yunzhixue/ability/center/examsprint/application/report/ExamSprintReportApplicationServiceTest.java

@@ -674,6 +674,29 @@ class ExamSprintReportApplicationServiceTest {
                 .contains("contentMappingDurationMs=");
     }
 
+    /** 覆盖同步展望报告校验观测场景,应拆分 StudentName、shape、反序列化和 Bean Validation 耗时。 */
+    @Test
+    void createOutlookReportSyncLogsOutlookValidationStageDurations(CapturedOutput output) {
+        DefaultExamSprintReportApplicationService service = service(
+                new TestRepository(),
+                reportId -> {
+                    throw new IllegalStateException("sync create must not dispatch async generation");
+                },
+                new TestStorage());
+
+        service.createOutlookReportSync(validOutlookPayload());
+
+        assertThat(output.getAll())
+                .contains("exam_sprint_report_validation_stage_completed")
+                .contains("reportType=OUTLOOK")
+                .contains("stage=validate_payload")
+                .contains("durationMs=")
+                .contains("studentNameDurationMs=")
+                .contains("shapeDurationMs=")
+                .contains("deserializationDurationMs=")
+                .contains("beanValidationDurationMs=");
+    }
+
     /** 覆盖同步展望报告下载地址生成失败场景,当存储层抛错时,应转换为下载不可用且日志不泄露异常消息。 */
     @Test
     void createOutlookReportSyncConvertsDownloadUrlGenerationFailureWithoutSensitiveLog(CapturedOutput output) {