59 lines
No EOL
1.7 KiB
TypeScript
59 lines
No EOL
1.7 KiB
TypeScript
#!/usr/bin/env bun
|
|
/**
|
|
* Check Dragonfly database usage to understand which services use which databases
|
|
*/
|
|
|
|
import Redis from 'ioredis';
|
|
|
|
async function checkDatabaseUsage() {
|
|
console.log('🔍 Checking Dragonfly database usage...\n');
|
|
|
|
const redis = new Redis({
|
|
host: process.env.DRAGONFLY_HOST || 'localhost',
|
|
port: parseInt(process.env.DRAGONFLY_PORT || '6379'),
|
|
password: process.env.DRAGONFLY_PASSWORD || undefined,
|
|
lazyConnect: true,
|
|
});
|
|
|
|
try {
|
|
await redis.connect();
|
|
|
|
// Check databases 0-15
|
|
for (let db = 0; db < 16; db++) {
|
|
try {
|
|
// Select database
|
|
await redis.select(db);
|
|
|
|
// Get database size
|
|
const dbSize = await redis.dbsize();
|
|
|
|
if (dbSize > 0) {
|
|
console.log(`📊 Database ${db}: ${dbSize} keys`);
|
|
|
|
// Get sample keys
|
|
const keys = await redis.keys('*');
|
|
const sampleKeys = keys.slice(0, 10);
|
|
|
|
for (const key of sampleKeys) {
|
|
const type = await redis.type(key);
|
|
const ttl = await redis.ttl(key);
|
|
console.log(` ├─ ${key} (${type}${ttl > 0 ? `, TTL: ${ttl}s` : ttl === -1 ? ', no TTL' : ''})`);
|
|
}
|
|
|
|
if (keys.length > 10) {
|
|
console.log(` └─ ... and ${keys.length - 10} more keys`);
|
|
}
|
|
console.log('');
|
|
}
|
|
} catch (error) {
|
|
// Skip databases that don't exist or are inaccessible
|
|
}
|
|
}
|
|
|
|
await redis.disconnect();
|
|
} catch (error) {
|
|
console.error('❌ Error:', error);
|
|
}
|
|
}
|
|
|
|
checkDatabaseUsage().catch(console.error); |