mirror of
https://github.com/imjasonh/gcp-metrics-action
synced 2026-07-22 15:42:07 +00:00
infer conclusion more better
Signed-off-by: Jason Hall <jason@chainguard.dev>
This commit is contained in:
parent
386e00a262
commit
17b45e09f1
6 changed files with 67 additions and 158 deletions
2
dist/index.js
vendored
2
dist/index.js
vendored
|
|
@ -366,7 +366,7 @@ function recordMetrics(meter, metrics, metricPrefix) {
|
|||
});
|
||||
core.debug(`Created histogram metric: ${stepDurationName}`);
|
||||
|
||||
// Record job-level metrics (always record, even if job not completed yet)
|
||||
// Record job-level metrics (always record, even if job not fully complete)
|
||||
const jobDurationHistogram = meter.createHistogram(`${metricPrefix}.job.duration`, {
|
||||
description: 'Duration of workflow jobs in milliseconds',
|
||||
unit: 'ms',
|
||||
|
|
|
|||
20
dist/post/index.js
vendored
20
dist/post/index.js
vendored
|
|
@ -64,21 +64,23 @@ async function collectMetrics(octokit, context) {
|
|||
});
|
||||
|
||||
// Calculate job duration
|
||||
// Post-action runs before job is marked complete, so we estimate
|
||||
// Post-action runs before job is marked complete, so estimate using current time
|
||||
const jobStartedAt = job.started_at ? new Date(job.started_at) : new Date();
|
||||
const jobCompletedAt = job.completed_at ? new Date(job.completed_at) : new Date();
|
||||
|
||||
const jobDurationMs = jobCompletedAt - jobStartedAt;
|
||||
|
||||
if (!job.completed_at) {
|
||||
core.debug(`Job not marked complete yet, estimating duration using current time: ${jobDurationMs}ms`);
|
||||
core.debug(`Job not marked complete yet, estimating duration: ${jobDurationMs}ms`);
|
||||
}
|
||||
|
||||
// Infer job conclusion from steps if not set (post-action runs before job completes)
|
||||
let jobConclusion = job.conclusion;
|
||||
if (!jobConclusion || jobConclusion === 'unknown') {
|
||||
const hasFailure = steps.some(s => s.conclusion === 'failure');
|
||||
const hasCancelled = steps.some(s => s.conclusion === 'cancelled');
|
||||
// Only look at completed steps (ignore pending/in-progress post-action steps)
|
||||
const completedSteps = steps.filter(s => s.conclusion !== null);
|
||||
|
||||
const hasFailure = completedSteps.some(s => s.conclusion === 'failure');
|
||||
const hasCancelled = completedSteps.some(s => s.conclusion === 'cancelled');
|
||||
|
||||
if (hasFailure) {
|
||||
jobConclusion = 'failure';
|
||||
|
|
@ -86,12 +88,12 @@ async function collectMetrics(octokit, context) {
|
|||
} else if (hasCancelled) {
|
||||
jobConclusion = 'cancelled';
|
||||
core.debug('Inferred job conclusion as "cancelled" based on cancelled steps');
|
||||
} else if (steps.length > 0 && steps.every(s => s.conclusion === 'success' || s.conclusion === 'skipped')) {
|
||||
} else if (completedSteps.length > 0 && completedSteps.every(s => s.conclusion === 'success' || s.conclusion === 'skipped')) {
|
||||
jobConclusion = 'success';
|
||||
core.debug('Inferred job conclusion as "success" based on step results');
|
||||
core.debug(`Inferred job conclusion as "success" based on ${completedSteps.length} completed steps`);
|
||||
} else {
|
||||
jobConclusion = 'unknown';
|
||||
core.debug('Could not infer job conclusion from steps');
|
||||
core.debug(`Could not infer job conclusion from steps (${completedSteps.length} completed steps)`);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -514,7 +516,7 @@ function recordMetrics(meter, metrics, metricPrefix) {
|
|||
});
|
||||
core.debug(`Created histogram metric: ${stepDurationName}`);
|
||||
|
||||
// Record job-level metrics (always record, even if job not completed yet)
|
||||
// Record job-level metrics (always record, even if job not fully complete)
|
||||
const jobDurationHistogram = meter.createHistogram(`${metricPrefix}.job.duration`, {
|
||||
description: 'Duration of workflow jobs in milliseconds',
|
||||
unit: 'ms',
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue