1
0
mirror of https://github.com/redis/node-redis.git synced 2025-12-12 21:21:15 +03:00
Files
node-redis/packages/client/lib/commands/LATENCY_HISTOGRAM.ts
Trofymenko Vladyslav dae47b4820 feat(client): add latency histogram (#3099)
* add latency histogram command, tests (##1955)
2025-11-03 14:05:58 +02:00

47 lines
1.3 KiB
TypeScript

import { CommandParser } from '../client/parser';
import { Command } from '../RESP/types';
import { transformTuplesToMap } from './generic-transformers';
type RawHistogram = [string, number, string, number[]];
type Histogram = Record<string, {
calls: number;
histogram_usec: Record<string, number>;
}>;
const id = (n: number) => n;
export default {
CACHEABLE: false,
IS_READ_ONLY: true,
/**
* Constructs the LATENCY HISTOGRAM command
*
* @param parser - The command parser
* @param commands - The list of redis commands to get histogram for
* @see https://redis.io/docs/latest/commands/latency-histogram/
*/
parseCommand(parser: CommandParser, ...commands: string[]) {
const args = ['LATENCY', 'HISTOGRAM'];
if (commands.length !== 0) {
args.push(...commands);
}
parser.push(...args);
},
transformReply: {
2: (reply: (string | RawHistogram)[]): Histogram => {
const result: Histogram = {};
if (reply.length === 0) return result;
for (let i = 1; i < reply.length; i += 2) {
const histogram = reply[i] as RawHistogram;
result[reply[i - 1] as string] = {
calls: histogram[1],
histogram_usec: transformTuplesToMap(histogram[3], id),
};
}
return result;
},
3: undefined as unknown as () => Histogram,
}
} as const satisfies Command;