Skip to content

Commit 82d970e

Browse files
authored
FIX: add back metrics runnerLessMinimumTime and runnerFound to scaleDown (#881)
1 parent 787aa4c commit 82d970e

File tree

3 files changed

+67
-30
lines changed

3 files changed

+67
-30
lines changed

terraform-aws-github-runner/modules/runners/lambdas/runners/src/scale-runners/metrics.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -589,6 +589,12 @@ export class ScaleDownMetrics extends Metrics {
589589
this.countEntry(`run.ec2runners.${ec2Runner.runnerType}.notMinTime`);
590590
}
591591

592+
/* istanbul ignore next */
593+
runnerIsRemovable(ec2Runner: RunnerInfo) {
594+
this.countEntry(`run.ec2runners.removable`);
595+
this.countEntry(`run.ec2runners.${ec2Runner.runnerType}.removable`);
596+
}
597+
592598
/* istanbul ignore next */
593599
runnerFound(ec2Runner: RunnerInfo) {
594600
this.countEntry(`run.ec2runners.total`);

terraform-aws-github-runner/modules/runners/lambdas/runners/src/scale-runners/scale-down.test.ts

Lines changed: 34 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -888,32 +888,44 @@ describe('scale-down', () => {
888888
describe('isRunnerRemovable', () => {
889889
describe('ghRunner === undefined', () => {
890890
it('launchTime === undefined', () => {
891-
const response = isRunnerRemovable(undefined, {
892-
instanceId: 'AGDGADUWG113',
893-
launchTime: undefined,
894-
});
891+
const response = isRunnerRemovable(
892+
undefined,
893+
{
894+
instanceId: 'AGDGADUWG113',
895+
launchTime: undefined,
896+
},
897+
metrics,
898+
);
895899
expect(response).toEqual(false);
896900
});
897901

898902
it('exceeded minimum time', () => {
899-
const response = isRunnerRemovable(undefined, {
900-
instanceId: 'AGDGADUWG113',
901-
launchTime: moment(new Date())
902-
.utc()
903-
.subtract(minimumRunningTimeInMinutes + 5, 'minutes')
904-
.toDate(),
905-
});
903+
const response = isRunnerRemovable(
904+
undefined,
905+
{
906+
instanceId: 'AGDGADUWG113',
907+
launchTime: moment(new Date())
908+
.utc()
909+
.subtract(minimumRunningTimeInMinutes + 5, 'minutes')
910+
.toDate(),
911+
},
912+
metrics,
913+
);
906914
expect(response).toEqual(true);
907915
});
908916

909917
it('dont exceeded minimum time', () => {
910-
const response = isRunnerRemovable(undefined, {
911-
instanceId: 'AGDGADUWG113',
912-
launchTime: moment(new Date())
913-
.utc()
914-
.subtract(minimumRunningTimeInMinutes - 5, 'minutes')
915-
.toDate(),
916-
});
918+
const response = isRunnerRemovable(
919+
undefined,
920+
{
921+
instanceId: 'AGDGADUWG113',
922+
launchTime: moment(new Date())
923+
.utc()
924+
.subtract(minimumRunningTimeInMinutes - 5, 'minutes')
925+
.toDate(),
926+
},
927+
metrics,
928+
);
917929
expect(response).toEqual(false);
918930
});
919931
});
@@ -928,6 +940,7 @@ describe('scale-down', () => {
928940
instanceId: 'AGDGADUWG113',
929941
launchTime: undefined,
930942
},
943+
metrics,
931944
);
932945
expect(response).toEqual(false);
933946
});
@@ -941,6 +954,7 @@ describe('scale-down', () => {
941954
instanceId: 'AGDGADUWG113',
942955
launchTime: undefined,
943956
},
957+
metrics,
944958
);
945959
expect(response).toEqual(false);
946960
});
@@ -957,6 +971,7 @@ describe('scale-down', () => {
957971
.subtract(minimumRunningTimeInMinutes + 5, 'minutes')
958972
.toDate(),
959973
},
974+
metrics,
960975
);
961976
expect(response).toEqual(true);
962977
});
@@ -973,6 +988,7 @@ describe('scale-down', () => {
973988
.subtract(minimumRunningTimeInMinutes - 5, 'minutes')
974989
.toDate(),
975990
},
991+
metrics,
976992
);
977993
expect(response).toEqual(false);
978994
});

terraform-aws-github-runner/modules/runners/lambdas/runners/src/scale-runners/scale-down.ts

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -56,22 +56,28 @@ export async function scaleDown(): Promise<void> {
5656
if (ec2runner.repo !== undefined) {
5757
const ghRunner = await getGHRunnerRepo(ec2runner, metrics);
5858
// if configured to repo, don't mess with organization runners
59-
if (!Config.Instance.enableOrganizationRunners && isRunnerRemovable(ghRunner, ec2runner)) {
60-
if (ghRunner === undefined) {
61-
ghRunnersRemovable.unshift([ec2runner, ghRunner]);
62-
} else {
63-
ghRunnersRemovable.push([ec2runner, ghRunner]);
59+
if (!Config.Instance.enableOrganizationRunners) {
60+
metrics.runnerFound(ec2runner);
61+
if (isRunnerRemovable(ghRunner, ec2runner, metrics)) {
62+
if (ghRunner === undefined) {
63+
ghRunnersRemovable.unshift([ec2runner, ghRunner]);
64+
} else {
65+
ghRunnersRemovable.push([ec2runner, ghRunner]);
66+
}
6467
}
6568
}
6669
// ORG assigned runners
6770
} else if (ec2runner.org !== undefined) {
6871
const ghRunner = await getGHRunnerOrg(ec2runner, metrics);
6972
// if configured to org, don't mess with repo runners
70-
if (Config.Instance.enableOrganizationRunners && isRunnerRemovable(ghRunner, ec2runner)) {
71-
if (ghRunner === undefined) {
72-
ghRunnersRemovable.unshift([ec2runner, ghRunner]);
73-
} else {
74-
ghRunnersRemovable.push([ec2runner, ghRunner]);
73+
if (Config.Instance.enableOrganizationRunners) {
74+
metrics.runnerFound(ec2runner);
75+
if (isRunnerRemovable(ghRunner, ec2runner, metrics)) {
76+
if (ghRunner === undefined) {
77+
ghRunnersRemovable.unshift([ec2runner, ghRunner]);
78+
} else {
79+
ghRunnersRemovable.push([ec2runner, ghRunner]);
80+
}
7581
}
7682
}
7783
}
@@ -213,11 +219,20 @@ export async function isEphemeralRunner(ec2runner: RunnerInfo, metrics: ScaleDow
213219
return runnerTypes.get(ec2runner.runnerType)?.is_ephemeral ?? false;
214220
}
215221

216-
export function isRunnerRemovable(ghRunner: GhRunner | undefined, ec2runner: RunnerInfo): boolean {
222+
export function isRunnerRemovable(
223+
ghRunner: GhRunner | undefined,
224+
ec2runner: RunnerInfo,
225+
metrics: ScaleDownMetrics,
226+
): boolean {
217227
if (ghRunner !== undefined && ghRunner.busy) {
218228
return false;
219229
}
220-
return runnerMinimumTimeExceeded(ec2runner);
230+
if (!runnerMinimumTimeExceeded(ec2runner)) {
231+
metrics.runnerLessMinimumTime(ec2runner);
232+
return false;
233+
}
234+
metrics.runnerIsRemovable(ec2runner);
235+
return true;
221236
}
222237

223238
export function runnerMinimumTimeExceeded(runner: RunnerInfo): boolean {

0 commit comments

Comments
 (0)