@chevre/domain
Version:
Chevre Domain Library for Node.js
81 lines (71 loc) • 2.99 kB
text/typescript
// 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);