UNPKG

@chevre/domain

Version:

Chevre Domain Library for Node.js

81 lines (71 loc) 2.99 kB
// tslint:disable:no-console no-magic-numbers no-null-keyword import type * as Redis from 'redis'; const REDIS_PING_INTERVAL_MS: number = (typeof process.env.REDIS_PING_INTERVAL_MS === 'string') ? Number(process.env.REDIS_PING_INTERVAL_MS) // tslint:disable-next-line:no-magic-numbers : 30000; const REDIS_HOST: string = String(process.env.REDIS_HOST); const REDIS_PORT: number = Number(process.env.REDIS_PORT); const REDIS_KEY: string = String(process.env.REDIS_KEY); const redisClientOptions: Redis.RedisClientOptions<Redis.RedisDefaultModules, Record<string, never>, Record<string, never>> = { socket: { host: REDIS_HOST, port: REDIS_PORT // tls: (process.env.REDIS_TLS_SERVERNAME !== undefined) ? { servername: process.env.REDIS_TLS_SERVERNAME } : undefined }, password: REDIS_KEY, pingInterval: REDIS_PING_INTERVAL_MS, disableOfflineQueue: false }; let redis: typeof Redis | undefined; async function createRedisClient(): Promise<Redis.RedisClientType> { return new Promise<Redis.RedisClientType>(async (resolve, reject) => { if (redis === undefined) { redis = await import('redis'); } const client = redis.createClient<Redis.RedisDefaultModules, Record<string, never>, Record<string, never>>(redisClientOptions) .on('error', (err) => { // tslint:disable-next-line:no-console console.error('createRedisClient: client onError:', err); reject(err); }) .on('connect', () => { resolve(client); }); // client.on('ready', () => { // console.error('Redis Client ready'); // }); await client.connect() .catch((err) => { // tslint:disable-next-line:no-console console.error('createRedisClient: redisClient.connect:', err); reject(new Error('createRedisClient: failed in creating connection')); }); }); } async function main() { const redisClient = await createRedisClient(); console.log('redisClient created.', redisClient.options?.name); const reply = await redisClient.CLIENT_LIST(); // console.dir(reply, { depth: null }); console.dir( reply.map( ({ id, name, age, idle, user, addr, flags }) => `${id}, ${name}, ${age}, ${idle}, ${user}, ${addr}, ${flags}` ), { depth: null } ); const connectRedisCount = reply.filter(({ name }) => name.slice(-13) === ':connectRedis') .length; const clientsByName: Record<string, any> = {}; reply.forEach(({ name }) => { if (clientsByName[name] === undefined) { clientsByName[name] = { count: 0 }; } clientsByName[name].count += 1; }); console.log(reply.length, 'clients found'); console.log('connectRedisCount:', connectRedisCount); console.log(clientsByName); } main() .catch(console.error);