Skip to content

Commit c7a760d

Browse files
intproBoris Dorofeev
and
Boris Dorofeev
authored
feat: add redis memory info query (#16)
Co-authored-by: Boris Dorofeev <[email protected]>
1 parent 0b2a669 commit c7a760d

File tree

5 files changed

+104
-1
lines changed

5 files changed

+104
-1
lines changed

src/composeBull.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
11
import { schemaComposer, SchemaComposer } from 'graphql-compose';
22
import { Options } from './definitions';
33
import { getQueueTC, getJobTC } from './types';
4-
import { createQueuesFC, createQueueKeysFC, createQueueFC, createJobFC } from './query';
4+
import {
5+
createQueuesFC,
6+
createQueueKeysFC,
7+
createQueueFC,
8+
createJobFC,
9+
createInfoFC,
10+
} from './query';
511
import {
612
createQueueCleanFC,
713
createQueueDrainFC,
@@ -39,6 +45,7 @@ export function composeBull(opts: Options & { schemaComposer?: SchemaComposer<an
3945
queues: wrapQuery(createQueuesFC),
4046
queue: wrapQuery(createQueueFC),
4147
job: wrapQuery(createJobFC),
48+
info: wrapQuery(createInfoFC),
4249
},
4350
mutationFields: {
4451
queueClean: wrapMutation(createQueueCleanFC),

src/query/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ export { createQueuesFC } from './queues';
22
export { createQueueKeysFC } from './queueKeys';
33
export { createQueueFC } from './queue';
44
export { createJobFC } from './job';
5+
export { createInfoFC } from './info';

src/query/info.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { SchemaComposer, ObjectTypeComposerFieldConfigAsObjectDefinition } from 'graphql-compose';
2+
import { getInfoTC } from '../types/info/Info';
3+
import { Options } from '../definitions';
4+
5+
export function createInfoFC(
6+
sc: SchemaComposer<any>,
7+
opts: Options
8+
): ObjectTypeComposerFieldConfigAsObjectDefinition<any, any> {
9+
return {
10+
type: getInfoTC(sc, opts),
11+
resolve: async () => {
12+
return {};
13+
},
14+
};
15+
}

src/types/info/Info.memory.ts

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
import { SchemaComposer, ObjectTypeComposerFieldConfigDefinition } from 'graphql-compose';
2+
import { Options } from '../../definitions';
3+
import { getBullConnection } from '../../helpers/getBullConnection';
4+
5+
export function createMemoryFC(
6+
sc: SchemaComposer<any>,
7+
opts: Options
8+
): ObjectTypeComposerFieldConfigDefinition<any, any> {
9+
const { typePrefix } = opts;
10+
11+
return {
12+
type: sc.createObjectTC({
13+
name: `${typePrefix}InfoMemory`,
14+
fields: {
15+
used_memory: 'String',
16+
used_memory_human: 'String',
17+
used_memory_rss: 'String',
18+
used_memory_rss_human: 'String',
19+
used_memory_peak: 'String',
20+
used_memory_peak_human: 'String',
21+
used_memory_peak_perc: 'String',
22+
used_memory_overhead: 'String',
23+
used_memory_startup: 'String',
24+
used_memory_dataset: 'String',
25+
used_memory_dataset_perc: 'String',
26+
allocator_allocated: 'String',
27+
allocator_active: 'String',
28+
allocator_resident: 'String',
29+
total_system_memory: 'String',
30+
total_system_memory_human: 'String',
31+
used_memory_lua: 'String',
32+
used_memory_lua_human: 'String',
33+
used_memory_scripts: 'String',
34+
used_memory_scripts_human: 'String',
35+
number_of_cached_scripts: 'String',
36+
maxmemory: 'String',
37+
maxmemory_human: 'String',
38+
maxmemory_policy: 'String',
39+
allocator_frag_ratio: 'String',
40+
allocator_frag_bytes: 'String',
41+
allocator_rss_ratio: 'String',
42+
allocator_rss_bytes: 'String',
43+
rss_overhead_ratio: 'String',
44+
rss_overhead_bytes: 'String',
45+
mem_fragmentation_ratio: 'String',
46+
mem_fragmentation_bytes: 'String',
47+
mem_not_counted_for_evict: 'String',
48+
mem_replication_backlog: 'String',
49+
mem_clients_slaves: 'String',
50+
mem_clients_normal: 'String',
51+
mem_aof_buffer: 'String',
52+
mem_allocator: 'String',
53+
active_defrag_running: 'String',
54+
lazyfree_pending_objects: 'String',
55+
},
56+
}),
57+
resolve: async () => {
58+
const redis = getBullConnection(opts);
59+
const memoryInfo = await redis.info('memory');
60+
return memoryInfo
61+
.split('\r\n')
62+
.filter((item) => item.includes(':'))
63+
.map((item) => item.split(':'))
64+
.reduce((acc, metric) => ({ ...acc, [metric[0]]: metric[1] }), {});
65+
},
66+
};
67+
}

src/types/info/Info.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { createMemoryFC } from './Info.memory';
2+
import { SchemaComposer } from 'graphql-compose';
3+
import { Options } from '../../definitions';
4+
5+
export function getInfoTC(sc: SchemaComposer<any>, opts: Options) {
6+
const { typePrefix } = opts;
7+
8+
return sc.getOrCreateOTC(`${typePrefix}Info`, (etc) => {
9+
etc.addFields({
10+
memory: createMemoryFC(sc, opts),
11+
});
12+
});
13+
}

0 commit comments

Comments
 (0)