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

Add number of passes to compile metrics

GitOrigin-RevId: b9a6b6691f2feb7f376cd1bb94c81ecb7c3bc580
This commit is contained in:
Eric Mc Sween
2025-10-15 08:40:51 -04:00
committed by Copybot
parent 4d39899e7b
commit ee7ccd6be4
2 changed files with 35 additions and 15 deletions

View File

@@ -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 = {

View File

@@ -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({