Skip to content

Commit 5a04fe0

Browse files
author
Boris
committed
feat: add queueKeys query
1 parent 0a1f678 commit 5a04fe0

File tree

5 files changed

+81
-15
lines changed

5 files changed

+81
-15
lines changed

example/src/config.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
// password: process.env.REDIS_PASSWORD || '',
77
// };
88

9-
const BULL_REDIS_URI =
10-
'redis://:uut2tiew5waeli1aefup0Toecaikoque5eepahch5AowaiJ2@10.216.129.127:6379';
9+
const BULL_REDIS_URI = 'redis://127.0.0.1:6379';
10+
//'redis://:uut2tiew5waeli1aefup0Toecaikoque5eepahch5AowaiJ2@10.216.129.127:6379';
1111

1212
const BULL_HOST_ID = 'maybe_uuid_and_mac';
1313

example/src/schema/mutation/_helpers.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import {
1212
getMutationStatusEnumTC,
1313
getMutationErrorCodeEnumTC,
1414
} from '../types';
15+
import { createBullConnection } from '../../connectRedis';
1516
import { MutationError } from './Error';
1617

1718
export function getQueue(queueName: string, context: any): Queue {
@@ -22,6 +23,18 @@ export function getQueue(queueName: string, context: any): Queue {
2223
return queue;
2324
}
2425

26+
// export function getQueue(queueName: string, prefix: string): Queue {
27+
// const queue = new Queue(queueName, {
28+
// prefix,
29+
// connection: createBullConnection('queue'),
30+
// });
31+
32+
// if (!queue) {
33+
// throw new MutationError('Queue not found!', ErrorCodeEnum.QUEUE_NOT_FOUND);
34+
// }
35+
// return queue;
36+
// }
37+
2538
type FieldConfig = Omit<ObjectTypeComposerFieldConfigAsObjectDefinition<any, any>, 'type'> & {
2639
type: ObjectTypeComposerAsObjectDefinition<any, any>;
2740
};

example/src/schema/query/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import { createQueuesFC } from './queues';
2+
import { createQueueKeysFC } from './queueKeys';
23
import { createQueueFC } from './queue';
34
import { createJobFC } from './job';
45
import { SchemaComposer } from 'graphql-compose';
56

67
export function createQueryFields(schemaComposer: SchemaComposer<any>): any {
78
return {
9+
queueKeys: createQueueKeysFC(schemaComposer),
810
queues: createQueuesFC(schemaComposer),
911
queue: createQueueFC(schemaComposer),
1012
job: createJobFC(schemaComposer),
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import { SchemaComposer } from 'graphql-compose';
2+
import { createBullConnection } from '../../connectRedis';
3+
4+
export function createQueueKeysFC(schemaComposer: SchemaComposer<any>) {
5+
return {
6+
type: schemaComposer
7+
.createObjectTC({
8+
name: 'QueueKeysResult',
9+
fields: {
10+
queueName: 'String!',
11+
prefix: 'String!',
12+
},
13+
})
14+
.getTypePlural(),
15+
args: {
16+
prefixMask: {
17+
type: 'String',
18+
defaultValue: 'bull*',
19+
},
20+
},
21+
resolve: async (_, { prefixMask }) => {
22+
const connection = createBullConnection('custom');
23+
24+
let prefixMaskNorm = prefixMask;
25+
const nameCase = prefixMaskNorm.split(':').length - 1;
26+
if (nameCase === 2) {
27+
prefixMaskNorm = prefixMaskNorm.endsWith('*')
28+
? prefixMaskNorm.substr(0, prefixMaskNorm.length - 1)
29+
: prefixMaskNorm;
30+
} else if (nameCase === 1) {
31+
prefixMaskNorm += ':';
32+
} else {
33+
prefixMaskNorm += prefixMaskNorm.endsWith('*') ? ':*:' : '*:*:';
34+
}
35+
36+
prefixMaskNorm += 'meta';
37+
38+
const keys = await connection.keys(prefixMaskNorm);
39+
40+
return keys.map((key) => {
41+
const parts = key.split(':');
42+
return {
43+
queueName: parts[0],
44+
prefix: parts[1],
45+
};
46+
});
47+
},
48+
};
49+
}

example/src/schema/types/queue/repeatables.ts

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,21 @@ export function createRepeatablesFC(
55
schemaComposer: SchemaComposer<any>
66
): ObjectTypeComposerFieldConfigDefinition<any, any> {
77
return {
8-
type: schemaComposer.createObjectTC({
9-
name: 'RepeatableJobInformation',
10-
fields: {
11-
key: 'String',
12-
name: 'String',
13-
id: 'String',
14-
endDate: 'Date',
15-
tz: 'String',
16-
cron: 'String',
17-
//every: 'Date', //TODO: вроде как должен быть обязательным, проверить - нет в бул-4
18-
next: 'Date',
19-
},
20-
}),
8+
type: schemaComposer
9+
.createObjectTC({
10+
name: 'RepeatableJobInformation',
11+
fields: {
12+
key: 'String',
13+
name: 'String',
14+
id: 'String',
15+
endDate: 'Date',
16+
tz: 'String',
17+
cron: 'String',
18+
//every: 'Date', //TODO: вроде как должен быть обязательным, проверить - нет в бул-4
19+
next: 'Date',
20+
},
21+
})
22+
.getTypePlural(),
2123
resolve: async (queue: Queue) => {
2224
return await queue.getRepeatableJobs();
2325
},

0 commit comments

Comments
 (0)