Skip to content

Commit b04c9ab

Browse files
Boris Dorofeevnodkz
Boris Dorofeev
authored andcommitted
feat: scan queue titles instead of keys search
relates: #78
1 parent 22c244b commit b04c9ab

File tree

3 files changed

+36
-4
lines changed

3 files changed

+36
-4
lines changed

src/helpers/queueTitles.ts

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,35 @@ export async function fetchQueueTitles(prefix: string, opts: Options): Promise<A
1616
};
1717
});
1818
}
19+
20+
export async function scanQueueTitles(prefix: string, opts: Options): Promise<Array<Title>> {
21+
const connection = getBullConnection(opts);
22+
const normalizedPrefixGlob = normalizePrefixGlob(prefix);
23+
24+
const result = await new Promise<string[]>((resolve, reject) => {
25+
//redis-cli: scan 0 match bull.vpc:*:meta count 100000
26+
const stream = connection.scanStream({ match: normalizedPrefixGlob, count: 100000 });
27+
28+
const titles: string[] = [];
29+
30+
stream.on('data', async (keys) => {
31+
for (let i = 0; i < keys.length; i++) {
32+
titles.push(keys[i]);
33+
}
34+
});
35+
36+
stream.on('end', () => {
37+
resolve(titles);
38+
});
39+
40+
stream.on('error', reject);
41+
});
42+
43+
return result.map((key) => {
44+
const parts = key.split(':');
45+
return {
46+
prefix: parts.slice(0, -2).join(':'),
47+
queueName: parts[parts.length - 2],
48+
};
49+
});
50+
}

src/query/queueKeys.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { SchemaComposer, ObjectTypeComposerFieldConfigAsObjectDefinition } from 'graphql-compose';
2-
import { fetchQueueTitles } from '../helpers';
2+
import { scanQueueTitles } from '../helpers';
33
import { Options } from '../definitions';
44

55
export function createQueueKeysFC(
@@ -22,7 +22,7 @@ export function createQueueKeysFC(
2222
},
2323
},
2424
resolve: async (_, { prefixGlob }) => {
25-
return fetchQueueTitles(prefixGlob, opts);
25+
return scanQueueTitles(prefixGlob, opts);
2626
},
2727
};
2828
}

src/query/queues.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { SchemaComposer, ObjectTypeComposerFieldConfigAsObjectDefinition } from 'graphql-compose';
22
import { getQueueTC } from '../types/queue/Queue';
3-
import { fetchQueueTitles, getQueues } from '../helpers';
3+
import { scanQueueTitles, getQueues } from '../helpers';
44
import { Options } from '../definitions';
55

66
export function createQueuesFC(
@@ -16,7 +16,7 @@ export function createQueuesFC(
1616
},
1717
},
1818
resolve: async (_, { prefix }) => {
19-
const titles = await fetchQueueTitles(prefix, opts);
19+
const titles = await scanQueueTitles(prefix, opts);
2020
return getQueues(titles, opts);
2121
},
2222
};

0 commit comments

Comments
 (0)