Skip to content

Commit c342fe8

Browse files
authored
Merge pull request #127 from manv6/add_job_status_query_ii
Add job status query ii
2 parents 4773252 + 5823788 commit c342fe8

6 files changed

Lines changed: 37 additions & 9 deletions

File tree

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@testerloop/server",
3-
"version": "0.1.22",
3+
"version": "0.1.23",
44
"devDependencies": {
55
"@graphql-codegen/cli": "^2.16.4",
66
"@graphql-codegen/typescript": "^2.8.7",

src/S3Service.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,22 @@ class S3Service {
7777
return objects || [];
7878
}
7979

80+
async listObjectsWithDate(bucketName: string, prefix: string) {
81+
const command = new ListObjectsV2Command({
82+
Bucket: bucketName,
83+
Prefix: prefix,
84+
});
85+
const response = await this.s3.send(command);
86+
const objects = response.Contents?.filter(
87+
(object) => object.Key !== undefined || object.Key !== '',
88+
).map((object) => ({
89+
fileName: object.Key || '',
90+
lastRun: object.LastModified || '',
91+
}));
92+
93+
return objects || [];
94+
}
95+
8096
async getSignedUrl(
8197
bucketName: string,
8298
key: string,

src/resolvers/JobStatus.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { JobStatusResolvers } from './types/generated.js';
33
const resolvers: JobStatusResolvers = {
44
fileName: ({ fileName }) => fileName,
55
status: ({ status }) => status,
6+
lastRun: ({ lastRun }) => lastRun,
67
};
78

89
export default resolvers;

src/resolvers/types/generated.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -430,6 +430,7 @@ export type IntervalEvent = {
430430
export type JobStatus = {
431431
readonly __typename: 'JobStatus';
432432
readonly fileName: Scalars['String'];
433+
readonly lastRun: Scalars['String'];
433434
readonly status: Scalars['String'];
434435
};
435436

@@ -1344,6 +1345,7 @@ export type IntervalEventResolvers<ContextType = Context, ParentType extends Res
13441345

13451346
export type JobStatusResolvers<ContextType = Context, ParentType extends ResolversParentTypes['JobStatus'] = ResolversParentTypes['JobStatus']> = {
13461347
fileName: Resolver<ResolversTypes['String'], ParentType, ContextType>;
1348+
lastRun: Resolver<ResolversTypes['String'], ParentType, ContextType>;
13471349
status: Resolver<ResolversTypes['String'], ParentType, ContextType>;
13481350
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
13491351
};

src/schema/JobStatus.graphql

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
type JobStatus {
22
fileName: String!
33
status: String!
4+
lastRun: String!
45
}
56

67
type Query {

src/util/jobStatus.ts

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,24 @@ import S3Service from '../S3Service.js';
44
const bucketName = config.AWS_BUCKET_NAME;
55

66
export const getAllStatuses = async () => {
7-
const results = await S3Service.listObjects(bucketName, 'job_status/');
7+
const results = await S3Service.listObjectsWithDate(
8+
bucketName,
9+
'job_status/',
10+
);
811

912
const jobData = await Promise.all(
10-
results.map(async (key) => {
11-
return {
12-
__typename: 'JobStatus',
13-
fileName: key.split('/')[1].split('.')[0],
14-
status: key.split('/')[1].split('.')[1],
15-
};
16-
}),
13+
results
14+
.filter(
15+
(object) => object.fileName.split('/')[1].split('.')[0] !== '',
16+
)
17+
.map(async (elem) => {
18+
return {
19+
__typename: 'JobStatus',
20+
fileName: elem.fileName.split('/')[1].split('.')[0],
21+
status: elem.fileName.split('/')[1].split('.')[1],
22+
lastRun: elem.lastRun,
23+
};
24+
}),
1725
);
1826

1927
return JSON.stringify(jobData);

0 commit comments

Comments
 (0)