From 4ec97be4f05af7288e66645beec6bf18aa86e3e8 Mon Sep 17 00:00:00 2001 From: avinashkrishna613 <36639277+avinashkrishna613@users.noreply.github.com> Date: Wed, 20 Sep 2023 01:51:54 +0530 Subject: [PATCH] fix #1956 - add support for `LATENCY HISTORY` (#2555) * added support for LATENCY_HISTORY command * clean code * Update LATENCY_HISTORY.ts --------- Co-authored-by: Leibale Eidelman --- packages/client/lib/client/commands.ts | 3 +++ .../lib/commands/LATENCY_HISTORY.spec.ts | 26 ++++++++++++++++++ .../client/lib/commands/LATENCY_HISTORY.ts | 27 +++++++++++++++++++ 3 files changed, 56 insertions(+) create mode 100644 packages/client/lib/commands/LATENCY_HISTORY.spec.ts create mode 100644 packages/client/lib/commands/LATENCY_HISTORY.ts diff --git a/packages/client/lib/client/commands.ts b/packages/client/lib/client/commands.ts index 206d5b781a..76ae5d7373 100644 --- a/packages/client/lib/client/commands.ts +++ b/packages/client/lib/client/commands.ts @@ -86,6 +86,7 @@ import * as KEYS from '../commands/KEYS'; import * as LASTSAVE from '../commands/LASTSAVE'; import * as LATENCY_DOCTOR from '../commands/LATENCY_DOCTOR'; import * as LATENCY_GRAPH from '../commands/LATENCY_GRAPH'; +import * as LATENCY_HISTORY from '../commands/LATENCY_HISTORY'; import * as LATENCY_LATEST from '../commands/LATENCY_LATEST'; import * as LOLWUT from '../commands/LOLWUT'; import * as MEMORY_DOCTOR from '../commands/MEMORY_DOCTOR'; @@ -298,6 +299,8 @@ export default { latencyDoctor: LATENCY_DOCTOR, LATENCY_GRAPH, latencyGraph: LATENCY_GRAPH, + LATENCY_HISTORY, + latencyHistory: LATENCY_HISTORY, LATENCY_LATEST, latencyLatest: LATENCY_LATEST, LOLWUT, diff --git a/packages/client/lib/commands/LATENCY_HISTORY.spec.ts b/packages/client/lib/commands/LATENCY_HISTORY.spec.ts new file mode 100644 index 0000000000..e79e969b26 --- /dev/null +++ b/packages/client/lib/commands/LATENCY_HISTORY.spec.ts @@ -0,0 +1,26 @@ +import {strict as assert} from 'assert'; +import testUtils, {GLOBAL} from '../test-utils'; +import { transformArguments } from './LATENCY_HISTORY'; + +describe('LATENCY HISTORY', () => { + it('transformArguments', () => { + assert.deepEqual( + transformArguments('command'), + ['LATENCY', 'HISTORY', 'command'] + ); + }); + + testUtils.testWithClient('client.latencyHistory', async client => { + await Promise.all([ + client.configSet('latency-monitor-threshold', '100'), + client.sendCommand(['DEBUG', 'SLEEP', '1']) + ]); + + const latencyHisRes = await client.latencyHistory('command'); + assert.ok(Array.isArray(latencyHisRes)); + for (const [timestamp, latency] of latencyHisRes) { + assert.equal(typeof timestamp, 'number'); + assert.equal(typeof latency, 'number'); + } + }, GLOBAL.SERVERS.OPEN); +}); diff --git a/packages/client/lib/commands/LATENCY_HISTORY.ts b/packages/client/lib/commands/LATENCY_HISTORY.ts new file mode 100644 index 0000000000..c0b1964553 --- /dev/null +++ b/packages/client/lib/commands/LATENCY_HISTORY.ts @@ -0,0 +1,27 @@ +export type EventType = ( + 'active-defrag-cycle' | + 'aof-fsync-always' | + 'aof-stat' | + 'aof-rewrite-diff-write' | + 'aof-rename' | + 'aof-write' | + 'aof-write-active-child' | + 'aof-write-alone' | + 'aof-write-pending-fsync' | + 'command' | + 'expire-cycle' | + 'eviction-cycle' | + 'eviction-del' | + 'fast-command' | + 'fork' | + 'rdb-unlink-temp-file' +); + +export function transformArguments(event: EventType) { + return ['LATENCY', 'HISTORY', event]; +} + +export declare function transformReply(): Array<[ + timestamp: number, + latency: number, +]>;