Skip to content

Commit b441b78

Browse files
authored
fix: Handle case where no ECS tasks are returned (#146)
1 parent 2e54c29 commit b441b78

File tree

3 files changed

+83
-9
lines changed

3 files changed

+83
-9
lines changed

plugins/ecs/backend/src/service/DefaultAmazonEcsService.test.ts

+59
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,65 @@ describe('DefaultAmazonEcsService', () => {
328328

329329
expect(mockResourceLocator.getResourceArns).toHaveBeenCalledTimes(0);
330330
});
331+
332+
it('handles empty tasks', async () => {
333+
const cluster1 = mockEcsCluster('cluster1');
334+
const service1 = mockEcsService('service1', 'cluster1', 1, 1, 0);
335+
336+
ecsMock
337+
.on(DescribeClustersCommand, {
338+
clusters: ['cluster1'],
339+
})
340+
.resolves({
341+
clusters: [cluster1],
342+
});
343+
344+
ecsMock
345+
.on(DescribeServicesCommand, {
346+
cluster: 'cluster1',
347+
// services: ['service1'],
348+
})
349+
.resolves({
350+
services: [service1],
351+
});
352+
353+
ecsMock
354+
.on(ListTasksCommand, {
355+
cluster: 'cluster1',
356+
serviceName: 'service1',
357+
})
358+
.resolves({
359+
taskArns: [],
360+
});
361+
362+
const service = await configureProvider(
363+
{},
364+
{
365+
metadata: {
366+
annotations: {
367+
[AWS_ECS_SERVICE_ARN_ANNOTATION]:
368+
'arn:aws:ecs:us-west-2:1234567890:service/cluster1/service1',
369+
},
370+
},
371+
},
372+
);
373+
374+
const response = await service.getServicesByEntity({ entityRef });
375+
376+
await expect(response).toMatchObject({
377+
clusters: [
378+
{
379+
cluster: cluster1,
380+
services: [
381+
{
382+
service: service1,
383+
tasks: [],
384+
},
385+
],
386+
},
387+
],
388+
});
389+
});
331390
});
332391

333392
it('throws on missing annotation', async () => {

plugins/ecs/backend/src/service/DefaultAmazonEcsService.ts

+14-7
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import {
1818
DescribeClustersCommand,
1919
ListTasksCommand,
2020
DescribeTasksCommand,
21+
Task,
2122
} from '@aws-sdk/client-ecs';
2223
import { parse } from '@aws-sdk/util-arn-parser';
2324
import { CatalogApi } from '@backstage/catalog-client';
@@ -205,16 +206,22 @@ export class DefaultAmazonEcsService implements AmazonECSService {
205206
}),
206207
);
207208

208-
const describeTasksResp = await client.send(
209-
new DescribeTasksCommand({
210-
cluster,
211-
tasks: listTasksResp.taskArns,
212-
}),
213-
);
209+
let tasks: Task[] = [];
210+
211+
if (listTasksResp.taskArns?.length) {
212+
const describeTasksResp = await client.send(
213+
new DescribeTasksCommand({
214+
cluster,
215+
tasks: listTasksResp.taskArns,
216+
}),
217+
);
218+
219+
tasks = describeTasksResp.tasks || [];
220+
}
214221

215222
serviceResponseObjects.push({
216223
service: serviceResp,
217-
tasks: describeTasksResp.tasks!,
224+
tasks,
218225
});
219226
}
220227
}

plugins/ecs/frontend/src/components/EcsServices/EcsServices.tsx

+10-2
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,11 @@ const ClusterSummary = ({ cluster }: { cluster: ClusterResponse }) => {
230230
spacing={0}
231231
>
232232
<Grid item>
233-
<StatusOK>{runningTasks} running tasks</StatusOK>
233+
{runningTasks > 0 ? (
234+
<StatusOK>{runningTasks} running tasks</StatusOK>
235+
) : (
236+
<StatusOK>No running tasks</StatusOK>
237+
)}
234238
</Grid>
235239
<Grid item>
236240
{pendingTasks > 0 ? (
@@ -279,7 +283,11 @@ const ServiceSummary = ({ service }: { service: Service }) => {
279283
spacing={0}
280284
>
281285
<Grid item>
282-
<StatusOK>{service.runningCount} running tasks</StatusOK>
286+
{service.runningCount! > 0 ? (
287+
<StatusOK>{service.runningCount} running tasks</StatusOK>
288+
) : (
289+
<StatusOK>No running tasks</StatusOK>
290+
)}
283291
</Grid>
284292
<Grid item>
285293
{service.pendingCount! > 0 ? (

0 commit comments

Comments
 (0)