1
0
Fork 0
mirror of https://github.com/imjasonh/gcp-metrics-action synced 2026-07-20 21:09:56 +00:00

Merge pull request #2 from imjasonh/job-duration

always report job duration, even when job is not done yet
This commit is contained in:
Jason Hall 2025-11-05 15:29:53 -05:00 committed by GitHub
commit 6cbadacc27
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 51 additions and 45 deletions

24
dist/index.js vendored
View file

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

36
dist/post/index.js vendored
View file

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

View file

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

View file

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