diff --git a/dist/index.js b/dist/index.js index c4cd5b4..3b9e9e3 100644 --- a/dist/index.js +++ b/dist/index.js @@ -372,21 +372,19 @@ function recordMetrics(meter, metrics, metricPrefix) { }); core.debug(`Created counter metric: ${stepCounterName}`); - // Record job-level metrics - if (metrics.job.durationMs > 0) { - const jobDurationHistogram = meter.createHistogram(`${metricPrefix}.job.duration`, { - description: 'Duration of workflow jobs in milliseconds', - unit: 'ms', - }); + // Record job-level metrics (always record, even if job not completed yet) + const jobDurationHistogram = meter.createHistogram(`${metricPrefix}.job.duration`, { + description: 'Duration of workflow jobs in milliseconds', + unit: 'ms', + }); - jobDurationHistogram.record(metrics.job.durationMs, { - ...baseAttributes, - 'job.status': metrics.job.status, - 'job.conclusion': metrics.job.conclusion || 'unknown', - }); + jobDurationHistogram.record(metrics.job.durationMs, { + ...baseAttributes, + 'job.status': metrics.job.status, + 'job.conclusion': metrics.job.conclusion || 'unknown', + }); - core.info(`Recorded job duration: ${metrics.job.durationMs}ms`); - } + core.info(`Recorded job duration: ${metrics.job.durationMs}ms`); // Record step-level metrics for (const step of metrics.steps) { diff --git a/dist/post/index.js b/dist/post/index.js index 37b75ef..5bcc70f 100644 --- a/dist/post/index.js +++ b/dist/post/index.js @@ -64,9 +64,15 @@ async function collectMetrics(octokit, context) { }); // Calculate job duration - const jobStartedAt = job.started_at ? new Date(job.started_at) : null; - const jobCompletedAt = job.completed_at ? new Date(job.completed_at) : null; - const jobDurationMs = jobStartedAt && jobCompletedAt ? jobCompletedAt - jobStartedAt : 0; + // Post-action runs before job is marked complete, so we estimate + 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`); + } // Extract PR number if this is a pull request event const prNumber = context.payload?.pull_request?.number || @@ -493,21 +499,19 @@ function recordMetrics(meter, metrics, metricPrefix) { }); core.debug(`Created counter metric: ${stepCounterName}`); - // Record job-level metrics - if (metrics.job.durationMs > 0) { - const jobDurationHistogram = meter.createHistogram(`${metricPrefix}.job.duration`, { - description: 'Duration of workflow jobs in milliseconds', - unit: 'ms', - }); + // Record job-level metrics (always record, even if job not completed yet) + const jobDurationHistogram = meter.createHistogram(`${metricPrefix}.job.duration`, { + description: 'Duration of workflow jobs in milliseconds', + unit: 'ms', + }); - jobDurationHistogram.record(metrics.job.durationMs, { - ...baseAttributes, - 'job.status': metrics.job.status, - 'job.conclusion': metrics.job.conclusion || 'unknown', - }); + jobDurationHistogram.record(metrics.job.durationMs, { + ...baseAttributes, + 'job.status': metrics.job.status, + 'job.conclusion': metrics.job.conclusion || 'unknown', + }); - core.info(`Recorded job duration: ${metrics.job.durationMs}ms`); - } + core.info(`Recorded job duration: ${metrics.job.durationMs}ms`); // Record step-level metrics for (const step of metrics.steps) { diff --git a/lib/collector.js b/lib/collector.js index c6a5299..fd08ee8 100644 --- a/lib/collector.js +++ b/lib/collector.js @@ -58,9 +58,15 @@ async function collectMetrics(octokit, context) { }); // Calculate job duration - const jobStartedAt = job.started_at ? new Date(job.started_at) : null; - const jobCompletedAt = job.completed_at ? new Date(job.completed_at) : null; - const jobDurationMs = jobStartedAt && jobCompletedAt ? jobCompletedAt - jobStartedAt : 0; + // Post-action runs before job is marked complete, so we estimate + 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`); + } // Extract PR number if this is a pull request event const prNumber = context.payload?.pull_request?.number || diff --git a/lib/exporter.js b/lib/exporter.js index 97a584c..172883a 100644 --- a/lib/exporter.js +++ b/lib/exporter.js @@ -112,21 +112,19 @@ function recordMetrics(meter, metrics, metricPrefix) { }); core.debug(`Created counter metric: ${stepCounterName}`); - // Record job-level metrics - if (metrics.job.durationMs > 0) { - const jobDurationHistogram = meter.createHistogram(`${metricPrefix}.job.duration`, { - description: 'Duration of workflow jobs in milliseconds', - unit: 'ms', - }); + // Record job-level metrics (always record, even if job not completed yet) + const jobDurationHistogram = meter.createHistogram(`${metricPrefix}.job.duration`, { + description: 'Duration of workflow jobs in milliseconds', + unit: 'ms', + }); - jobDurationHistogram.record(metrics.job.durationMs, { - ...baseAttributes, - 'job.status': metrics.job.status, - 'job.conclusion': metrics.job.conclusion || 'unknown', - }); + jobDurationHistogram.record(metrics.job.durationMs, { + ...baseAttributes, + 'job.status': metrics.job.status, + 'job.conclusion': metrics.job.conclusion || 'unknown', + }); - core.info(`Recorded job duration: ${metrics.job.durationMs}ms`); - } + core.info(`Recorded job duration: ${metrics.job.durationMs}ms`); // Record step-level metrics for (const step of metrics.steps) {