Skip to content

Commit

Permalink
Merge pull request #125 from manv6/add_job_status_query
Browse files Browse the repository at this point in the history
Adding query for job statuses
  • Loading branch information
manv6 authored May 7, 2024
2 parents ca41178 + 6c00c0e commit 0544591
Show file tree
Hide file tree
Showing 8 changed files with 63 additions and 3 deletions.
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@testerloop/server",
"version": "0.1.21",
"version": "0.1.22-sony",
"devDependencies": {
"@graphql-codegen/cli": "^2.16.4",
"@graphql-codegen/typescript": "^2.8.7",
Expand Down
8 changes: 8 additions & 0 deletions src/resolvers/JobStatus.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import { JobStatusResolvers } from './types/generated.js';

const resolvers: JobStatusResolvers = {
fileName: ({ fileName }) => fileName,
status: ({ status }) => status,
};

export default resolvers;
5 changes: 5 additions & 0 deletions src/resolvers/Query.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { decodeId, decodeIdForType } from '../util/id.js';
import { getAllStatuses } from '../util/jobStatus.js';

import { QueryResolvers } from './types/generated.js';

Expand Down Expand Up @@ -100,6 +101,10 @@ const resolvers: QueryResolvers = {
return null;
}
},
async getAllStatuses() {
const response = getAllStatuses();
return JSON.parse(await response);
},
};

export default resolvers;
2 changes: 2 additions & 0 deletions src/resolvers/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ import GitHubRevisionFileLine from './GitHubRevisionFileLine.js';
import GitHubRevisionFileLineColumn from './GitHubRevisionFileLineColumn.js';
import TestExecutionScreenshot from './TestExecutionScreenshot.js';
import SignedURL from './SignedURL.js';
import JobStatus from './JobStatus.js';

const interfaceResolvers = {
__resolveType<T extends string>(parent: { __typename: T }): T {
Expand Down Expand Up @@ -140,6 +141,7 @@ const resolvers: Resolvers = {
TestExecutionSnapshot,
TestExecutionScreenshot,
SignedURL,
JobStatus,
};

export default resolvers;
17 changes: 17 additions & 0 deletions src/resolvers/types/generated.ts
Original file line number Diff line number Diff line change
Expand Up @@ -427,6 +427,12 @@ export type IntervalEvent = {
readonly until: Scalars['DateTime'];
};

export type JobStatus = {
readonly __typename: 'JobStatus';
readonly fileName: Scalars['String'];
readonly status: Scalars['String'];
};

export type KeyValuePair = {
readonly __typename: 'KeyValuePair';
readonly key: Scalars['String'];
Expand Down Expand Up @@ -488,6 +494,7 @@ export type PageInfo = {
export type Query = {
readonly __typename: 'Query';
readonly consoleLogEvent: Maybe<ConsoleLogEvent>;
readonly getAllStatuses: ReadonlyArray<Maybe<JobStatus>>;
readonly httpNetworkEvent: Maybe<HttpNetworkEvent>;
readonly node: Maybe<Node>;
readonly test: Scalars['Boolean'];
Expand Down Expand Up @@ -871,6 +878,7 @@ export type ResolversTypes = {
InstantaneousEvent: ResolversTypes['ConsoleLogEvent'] | ResolversTypes['HttpResponseBodyChunk'] | ResolversTypes['TestExecutionScreenshot'] | ResolversTypes['TestExecutionSnapshot'];
Int: ResolverTypeWrapper<Scalars['Int']>;
IntervalEvent: ResolversTypes['CommandChainEvent'] | ResolversTypes['CommandEvent'] | ResolversTypes['HttpNetworkEvent'] | ResolversTypes['NetworkEventTiming'] | ResolversTypes['ScenarioEvent'] | ResolversTypes['StepEvent'] | ResolversTypes['TestExecution'];
JobStatus: ResolverTypeWrapper<JobStatus>;
KeyValuePair: ResolverTypeWrapper<KeyValuePair>;
NetworkEvent: ResolversTypes['HttpNetworkEvent'];
NetworkEventFilterInput: NetworkEventFilterInput;
Expand Down Expand Up @@ -966,6 +974,7 @@ export type ResolversParentTypes = {
InstantaneousEvent: ResolversParentTypes['ConsoleLogEvent'] | ResolversParentTypes['HttpResponseBodyChunk'] | ResolversParentTypes['TestExecutionScreenshot'] | ResolversParentTypes['TestExecutionSnapshot'];
Int: Scalars['Int'];
IntervalEvent: ResolversParentTypes['CommandChainEvent'] | ResolversParentTypes['CommandEvent'] | ResolversParentTypes['HttpNetworkEvent'] | ResolversParentTypes['NetworkEventTiming'] | ResolversParentTypes['ScenarioEvent'] | ResolversParentTypes['StepEvent'] | ResolversParentTypes['TestExecution'];
JobStatus: JobStatus;
KeyValuePair: KeyValuePair;
NetworkEvent: ResolversParentTypes['HttpNetworkEvent'];
NetworkEventFilterInput: NetworkEventFilterInput;
Expand Down Expand Up @@ -1333,6 +1342,12 @@ export type IntervalEventResolvers<ContextType = Context, ParentType extends Res
__resolveType: TypeResolveFn<'CommandChainEvent' | 'CommandEvent' | 'HttpNetworkEvent' | 'NetworkEventTiming' | 'ScenarioEvent' | 'StepEvent' | 'TestExecution', ParentType, ContextType>;
};

export type JobStatusResolvers<ContextType = Context, ParentType extends ResolversParentTypes['JobStatus'] = ResolversParentTypes['JobStatus']> = {
fileName: Resolver<ResolversTypes['String'], ParentType, ContextType>;
status: Resolver<ResolversTypes['String'], ParentType, ContextType>;
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
};

export type KeyValuePairResolvers<ContextType = Context, ParentType extends ResolversParentTypes['KeyValuePair'] = ResolversParentTypes['KeyValuePair']> = {
key: Resolver<ResolversTypes['String'], ParentType, ContextType>;
value: Resolver<ResolversTypes['String'], ParentType, ContextType>;
Expand Down Expand Up @@ -1363,6 +1378,7 @@ export type PageInfoResolvers<ContextType = Context, ParentType extends Resolver

export type QueryResolvers<ContextType = Context, ParentType extends ResolversParentTypes['Query'] = ResolversParentTypes['Query']> = {
consoleLogEvent: Resolver<Maybe<ResolversTypes['ConsoleLogEvent']>, ParentType, ContextType, RequireFields<QueryConsoleLogEventArgs, 'id'>>;
getAllStatuses: Resolver<ReadonlyArray<Maybe<ResolversTypes['JobStatus']>>, ParentType, ContextType>;
httpNetworkEvent: Resolver<Maybe<ResolversTypes['HttpNetworkEvent']>, ParentType, ContextType, RequireFields<QueryHttpNetworkEventArgs, 'id'>>;
node: Resolver<Maybe<ResolversTypes['Node']>, ParentType, ContextType, RequireFields<QueryNodeArgs, 'id'>>;
test: Resolver<ResolversTypes['Boolean'], ParentType, ContextType>;
Expand Down Expand Up @@ -1585,6 +1601,7 @@ export type Resolvers<ContextType = Context> = {
HttpResponseBodyChunk: HttpResponseBodyChunkResolvers<ContextType>;
InstantaneousEvent: InstantaneousEventResolvers<ContextType>;
IntervalEvent: IntervalEventResolvers<ContextType>;
JobStatus: JobStatusResolvers<ContextType>;
KeyValuePair: KeyValuePairResolvers<ContextType>;
NetworkEvent: NetworkEventResolvers<ContextType>;
NetworkEventTiming: NetworkEventTimingResolvers<ContextType>;
Expand Down
8 changes: 8 additions & 0 deletions src/schema/JobStatus.graphql
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
type JobStatus {
fileName: String!
status: String!
}

type Query {
getAllStatuses: [JobStatus]!
}
20 changes: 20 additions & 0 deletions src/util/jobStatus.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import config from '../config.js';
import S3Service from '../S3Service.js';

const bucketName = config.AWS_BUCKET_NAME;

export const getAllStatuses = async () => {
const results = await S3Service.listObjects(bucketName, 'job_status/');

const jobData = await Promise.all(
results.map(async (key) => {
return {
__typename: 'JobStatus',
fileName: key.split('/')[1].split('.')[0],
status: key.split('/')[1].split('.')[1],
};
}),
);

return JSON.stringify(jobData);
};

0 comments on commit 0544591

Please sign in to comment.