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:
commit
6cbadacc27
4 changed files with 51 additions and 45 deletions
24
dist/index.js
vendored
24
dist/index.js
vendored
|
|
@ -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
36
dist/post/index.js
vendored
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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 ||
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue