Przeglądaj źródła

Merge pull request #29076 from overleaf/em-metrics-compile-passes

Add number of passes to compile metrics

GitOrigin-RevId: b9a6b6691f2feb7f376cd1bb94c81ecb7c3bc580
Eric Mc Sween 1 rok temu
rodzic
commit
ee7ccd6be4

+ 33 - 14
services/clsi/app/js/CompileManager.js

@@ -40,6 +40,8 @@ const KNOWN_LATEXMK_RULES = new Set([
   'xelatex',
 ])
 
+const LATEX_PASSES_RULES = new Set(['latex', 'lualatex', 'xelatex', 'pdflatex'])
+
 function getCompileName(projectId, userId) {
   if (userId != null) {
     return `${projectId}-${userId}`
@@ -735,6 +737,35 @@ function _emitMetrics(request, status, stats, timings) {
     }
   }
 
+  const runs = stats.latexmk?.['latexmk-rule-times']
+  let passes = 0
+  if (runs != null) {
+    let cumulativeRuleTimeMs = 0
+    for (const run of runs) {
+      if (LATEX_PASSES_RULES.has(run.rule)) {
+        passes += 1
+      }
+
+      const rule = KNOWN_LATEXMK_RULES.has(run.rule) ? run.rule : 'other'
+      ClsiMetrics.latexmkRuleDurationSeconds.observe(
+        {
+          group: request.compileGroup,
+          rule,
+        },
+        run.time_ms / 1000
+      )
+      cumulativeRuleTimeMs += run.time_ms
+    }
+
+    const totalTimeMs = stats.latexmk?.['latexmk-time']?.total
+    if (totalTimeMs != null) {
+      ClsiMetrics.latexmkRuleDurationSeconds.observe(
+        { group: request.compileGroup, rule: 'overhead' },
+        (totalTimeMs - cumulativeRuleTimeMs) / 1000
+      )
+    }
+  }
+
   ClsiMetrics.compilesTotal.inc({
     status,
     engine: request.compiler,
@@ -743,6 +774,7 @@ function _emitMetrics(request, status, stats, timings) {
     group: request.compileGroup,
     draft: request.draft ? 'true' : 'false',
     stop_on_first_error: request.stopOnFirstError ? 'true' : 'false',
+    passes,
   })
 
   if (timings.sync != null) {
@@ -763,6 +795,7 @@ function _emitMetrics(request, status, stats, timings) {
         engine: request.compiler,
         compile: request.metricsOpts.compile,
         group: request.compileGroup,
+        passes: passes === 0 ? 'none' : passes === 1 ? 'single' : 'multiple',
       },
       timings.compile / 1000
     )
@@ -781,20 +814,6 @@ function _emitMetrics(request, status, stats, timings) {
   if (timings.compileE2E != null) {
     ClsiMetrics.e2eCompileDurationSeconds.observe(timings.compileE2E / 1000)
   }
-
-  const runs = stats.latexmk?.['latexmk-rule-times']
-  if (runs != null) {
-    for (const run of runs) {
-      const rule = KNOWN_LATEXMK_RULES.has(run.rule) ? run.rule : 'other'
-      ClsiMetrics.latexmkRuleDurationSeconds.observe(
-        {
-          group: request.compileGroup,
-          rule,
-        },
-        run.time_ms / 1000
-      )
-    }
-  }
 }
 
 module.exports = {

+ 2 - 1
services/clsi/app/js/Metrics.js

@@ -16,6 +16,7 @@ const compilesTotal = new prom.Counter({
     'image',
     'draft',
     'stop_on_first_error',
+    'passes',
   ],
 })
 
@@ -23,7 +24,7 @@ const compileDurationSeconds = new prom.Histogram({
   name: 'clsi_compile_duration_seconds',
   help: 'Duration of the latexmkrc invocation',
   buckets: COMPILE_TIME_BUCKETS,
-  labelNames: ['status', 'engine', 'compile', 'group'],
+  labelNames: ['status', 'engine', 'compile', 'group', 'passes'],
 })
 
 const e2eCompileDurationSeconds = new prom.Histogram({