{"_id":"@deniscuciuc/redis-analyzer","_rev":"6-4ea769f44b3ca73349a12ba764d7c234","name":"@deniscuciuc/redis-analyzer","dist-tags":{"latest":"1.2.3"},"versions":{"1.0.0":{"name":"@deniscuciuc/redis-analyzer","version":"1.0.0","keywords":["redis","database","analyzer","performance","cache","cli","memory","replication","slowlog","devops"],"author":{"name":"Denis Cuciuc","email":"denis@deniscuciuc.dev"},"license":"MIT","_id":"@deniscuciuc/redis-analyzer@1.0.0","maintainers":[{"name":"deniscuciuc","email":"personal.dcuciuc@gmail.com"}],"homepage":"https://github.com/deniscuciuc/db-analyzer-redis#readme","bugs":{"url":"https://github.com/deniscuciuc/db-analyzer-redis/issues"},"bin":{"redis-analyzer":"dist/index.js"},"dist":{"shasum":"8eb6702e5d41fc6a4d74b39f33f062d54bad90fb","tarball":"https://registry.npmjs.org/@deniscuciuc/redis-analyzer/-/redis-analyzer-1.0.0.tgz","fileCount":74,"integrity":"sha512-G1Fz1fVKfJKYnJRN13YHvidzqeKhOpyYie5trtJ9quMrrt7Nrz6DZR8pQc+PmD5BW21jE96IR9XFTN16QJQvCw==","signatures":[{"sig":"MEQCIH6QQ3LbG+ZsAY5HAcVjARIj2t3FByC81kXuCz2E5NzkAiAXwpsWPynfUhOhPsh5n56WqP553h7g2U69l8VEteo6Ng==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":145331},"main":"./dist/index.js","_from":"file:deniscuciuc-redis-analyzer-1.0.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=20","pnpm":">=10"},"private":false,"scripts":{"lint":"biome check .","test":"node --test dist/tests/*.test.js","build":"tsc","start":". ./.env && npx ts-node index.ts start","analyze":". ./.env && npx ts-node index.ts","lint:fix":"biome check --write .","postbuild":"node scripts/add-shebang.js","server:info":". ./.env && npx ts-node index.ts -j -c server-info","analyze:help":"npx ts-node index.ts --help","analyze:html":". ./.env && npx ts-node index.ts --html -c full","analyze:keys":". ./.env && npx ts-node index.ts -j -c keys","analyze:slow":". ./.env && npx ts-node index.ts -j -c slow-commands","analyze:watch":". ./.env && npx ts-node index.ts -c health --watch 30","release:major":"npm version major && git push && git push --tags","release:minor":"npm version minor && git push && git push --tags","release:patch":"npm version patch && git push && git push --tags","analyze:config":". ./.env && npx ts-node index.ts -j -c config","analyze:health":". ./.env && npx ts-node index.ts -j -c health","analyze:memory":". ./.env && npx ts-node index.ts -j -c memory","analyze:hit-rate":". ./.env && npx ts-node index.ts -j -c hit-rate","analyze:connections":". ./.env && npx ts-node index.ts -j -c connections","analyze:persistence":". ./.env && npx ts-node index.ts -j -c persistence","analyze:replication":". ./.env && npx ts-node index.ts -j -c replication"},"_npmUser":{"name":"deniscuciuc","email":"personal.dcuciuc@gmail.com"},"_resolved":"/tmp/c5cc761289ccc2fbdd8a7e91c47b6695/deniscuciuc-redis-analyzer-1.0.0.tgz","_integrity":"sha512-G1Fz1fVKfJKYnJRN13YHvidzqeKhOpyYie5trtJ9quMrrt7Nrz6DZR8pQc+PmD5BW21jE96IR9XFTN16QJQvCw==","repository":{"url":"git+https://github.com/deniscuciuc/db-analyzer-redis.git","type":"git"},"_npmVersion":"10.8.2","description":"CLI tool that analyzes Redis servers for memory pressure, cache efficiency, persistence safety, replication health, and slow commands.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ioredis":"^5.4.1","@inquirer/prompts":"^8.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ts-node":"^10.9.2","typescript":"^5.9.3","@types/node":"^22.15.0","@biomejs/biome":"2.3.11"},"_npmOperationalInternal":{"tmp":"tmp/redis-analyzer_1.0.0_1781430054875_0.8622840948112904","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@deniscuciuc/redis-analyzer","version":"1.1.0","keywords":["redis","database","analyzer","performance","cache","cli","memory","replication","slowlog","devops"],"author":{"name":"Denis Cuciuc","email":"denis@deniscuciuc.dev"},"license":"MIT","_id":"@deniscuciuc/redis-analyzer@1.1.0","maintainers":[{"name":"deniscuciuc","email":"personal.dcuciuc@gmail.com"}],"homepage":"https://github.com/deniscuciuc/db-analyzer-redis#readme","bugs":{"url":"https://github.com/deniscuciuc/db-analyzer-redis/issues"},"bin":{"redis-analyzer":"dist/src/cli/main.js"},"dist":{"shasum":"1262b3f44c19359b011d732c59e2af67f326e46d","tarball":"https://registry.npmjs.org/@deniscuciuc/redis-analyzer/-/redis-analyzer-1.1.0.tgz","fileCount":74,"integrity":"sha512-xIzBxDnWfwxIL/4zbxHAtZR/671485kZuWm8AmFe3iv2Q0XhMb52bTUUM4MJJx7MEmKZlKOvSGJrPOlbmIS3aA==","signatures":[{"sig":"MEQCIEOjrlDvusO6auflNCwkkhgasaqSex3pHfAP1Br7h0r8AiBpQL7rFQFXFunetxHRjujPfyqc1rXI7QP5wYPu25SAaA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@deniscuciuc%2fredis-analyzer@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":158979},"main":"./dist/src/index.js","_from":"file:deniscuciuc-redis-analyzer-1.1.0.tgz","types":"./dist/src/index.d.ts","engines":{"node":">=20","pnpm":">=10"},"exports":{".":{"types":"./dist/src/index.d.ts","default":"./dist/src/index.js","require":"./dist/src/index.js"}},"private":false,"scripts":{"lint":"biome check .","test":"node --test dist/tests/*.test.js","build":"rm -rf dist && tsc && node scripts/add-shebang.js","start":". ./.env && npx ts-node src/cli/main.ts start","analyze":". ./.env && npx ts-node src/cli/main.ts","lint:fix":"biome check --write .","postbuild":"node scripts/add-shebang.js","server:info":". ./.env && npx ts-node src/cli/main.ts -j -c server-info","analyze:help":"npx ts-node src/cli/main.ts --help","analyze:html":". ./.env && npx ts-node src/cli/main.ts --html -c full","analyze:keys":". ./.env && npx ts-node src/cli/main.ts -j -c keys","analyze:slow":". ./.env && npx ts-node src/cli/main.ts -j -c slow-commands","analyze:watch":". ./.env && npx ts-node src/cli/main.ts -c health --watch 30","release:major":"npm version major && git push && git push --tags","release:minor":"npm version minor && git push && git push --tags","release:patch":"npm version patch && git push && git push --tags","analyze:config":". ./.env && npx ts-node src/cli/main.ts -j -c config","analyze:health":". ./.env && npx ts-node src/cli/main.ts -j -c health","analyze:memory":". ./.env && npx ts-node src/cli/main.ts -j -c memory","analyze:hit-rate":". ./.env && npx ts-node src/cli/main.ts -j -c hit-rate","analyze:connections":". ./.env && npx ts-node src/cli/main.ts -j -c connections","analyze:persistence":". ./.env && npx ts-node src/cli/main.ts -j -c persistence","analyze:replication":". ./.env && npx ts-node src/cli/main.ts -j -c replication"},"_npmUser":{"name":"deniscuciuc","email":"personal.dcuciuc@gmail.com"},"_resolved":"/tmp/83b7650f6fca59674d34d53161096f21/deniscuciuc-redis-analyzer-1.1.0.tgz","_integrity":"sha512-xIzBxDnWfwxIL/4zbxHAtZR/671485kZuWm8AmFe3iv2Q0XhMb52bTUUM4MJJx7MEmKZlKOvSGJrPOlbmIS3aA==","repository":{"url":"git+https://github.com/deniscuciuc/db-analyzer-redis.git","type":"git"},"_npmVersion":"10.9.8","description":"CLI tool that analyzes Redis servers for memory pressure, cache efficiency, persistence safety, replication health, and slow commands.","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"ioredis":"^5.4.1","@inquirer/prompts":"^8.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ts-node":"^10.9.2","typescript":"^5.9.3","@types/node":"^22.15.0","@biomejs/biome":"2.3.11"},"_npmOperationalInternal":{"tmp":"tmp/redis-analyzer_1.1.0_1789003574221_0.28654381471427337","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@deniscuciuc/redis-analyzer","version":"1.2.0","keywords":["redis","database","analyzer","performance","cache","cli","memory","replication","slowlog","devops"],"author":{"name":"Denis Cuciuc","email":"denis@deniscuciuc.dev"},"license":"MIT","_id":"@deniscuciuc/redis-analyzer@1.2.0","maintainers":[{"name":"deniscuciuc","email":"personal.dcuciuc@gmail.com"}],"homepage":"https://github.com/deniscuciuc/db-analyzer-redis#readme","bugs":{"url":"https://github.com/deniscuciuc/db-analyzer-redis/issues"},"bin":{"redis-analyzer":"dist/src/cli/main.js"},"dist":{"shasum":"8a780ac7f81b0ee40dc6a94b2cbfe253710f44c8","tarball":"https://registry.npmjs.org/@deniscuciuc/redis-analyzer/-/redis-analyzer-1.2.0.tgz","fileCount":74,"integrity":"sha512-NQFC7bsIgmli4ZUQnF5a/cwgtK0egcv3WnvwZk12nJWELJtMUcE/+IbezqypxDCsESwfQ/m9h13+HB0d9StffA==","signatures":[{"sig":"MEUCIQD98SGWqdxtHmGlobjAA5rFKL8OjChAnj0tFHFV/sMB2gIgJFa1ap1Jw6+BhK1owRLhtiJPnkmSaM4uiPEKvT5rOWg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@deniscuciuc%2fredis-analyzer@1.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":160938},"main":"./dist/src/index.js","_from":"file:deniscuciuc-redis-analyzer-1.2.0.tgz","types":"./dist/src/index.d.ts","engines":{"node":">=22","pnpm":">=10"},"exports":{".":{"types":"./dist/src/index.d.ts","default":"./dist/src/index.js","require":"./dist/src/index.js"}},"private":false,"scripts":{"lint":"biome check .","test":"node --test dist/tests/*.test.js","build":"rm -rf dist && tsc && node scripts/add-shebang.js","start":". ./.env && npx ts-node src/cli/main.ts start","analyze":". ./.env && npx ts-node src/cli/main.ts","lint:fix":"biome check --write .","postbuild":"node scripts/add-shebang.js","server:info":". ./.env && npx ts-node src/cli/main.ts -j -c server-info","analyze:help":"npx ts-node src/cli/main.ts --help","analyze:html":". ./.env && npx ts-node src/cli/main.ts --html -c full","analyze:keys":". ./.env && npx ts-node src/cli/main.ts -j -c keys","analyze:slow":". ./.env && npx ts-node src/cli/main.ts -j -c slow-commands","analyze:watch":". ./.env && npx ts-node src/cli/main.ts -c health --watch 30","release:major":"npm version major && git push && git push --tags","release:minor":"npm version minor && git push && git push --tags","release:patch":"npm version patch && git push && git push --tags","analyze:config":". ./.env && npx ts-node src/cli/main.ts -j -c config","analyze:health":". ./.env && npx ts-node src/cli/main.ts -j -c health","analyze:memory":". ./.env && npx ts-node src/cli/main.ts -j -c memory","analyze:hit-rate":". ./.env && npx ts-node src/cli/main.ts -j -c hit-rate","analyze:connections":". ./.env && npx ts-node src/cli/main.ts -j -c connections","analyze:persistence":". ./.env && npx ts-node src/cli/main.ts -j -c persistence","analyze:replication":". ./.env && npx ts-node src/cli/main.ts -j -c replication"},"_npmUser":{"name":"deniscuciuc","email":"personal.dcuciuc@gmail.com"},"_resolved":"/tmp/a561b5d4fec98e40db4f21558758af11/deniscuciuc-redis-analyzer-1.2.0.tgz","_integrity":"sha512-NQFC7bsIgmli4ZUQnF5a/cwgtK0egcv3WnvwZk12nJWELJtMUcE/+IbezqypxDCsESwfQ/m9h13+HB0d9StffA==","repository":{"url":"git+https://github.com/deniscuciuc/db-analyzer-redis.git","type":"git"},"_npmVersion":"10.9.8","description":"CLI tool that analyzes Redis servers for memory pressure, cache efficiency, persistence safety, replication health, and slow commands.","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"ioredis":"^6.0.0","@inquirer/prompts":"^8.7.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ts-node":"^10.9.2","typescript":"^7.0.2","@types/node":"^22.20.1","@biomejs/biome":"2.5.12"},"_npmOperationalInternal":{"tmp":"tmp/redis-analyzer_1.2.0_1789004640909_0.3083917669246983","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@deniscuciuc/redis-analyzer","version":"1.2.1","keywords":["redis","database","analyzer","performance","cache","cli","memory","replication","slowlog","devops"],"author":{"name":"Denis Cuciuc","email":"denis@deniscuciuc.dev"},"license":"MIT","_id":"@deniscuciuc/redis-analyzer@1.2.1","maintainers":[{"name":"deniscuciuc","email":"personal.dcuciuc@gmail.com"}],"homepage":"https://github.com/deniscuciuc/db-analyzer-redis#readme","bugs":{"url":"https://github.com/deniscuciuc/db-analyzer-redis/issues"},"bin":{"redis-analyzer":"dist/src/cli/main.js"},"dist":{"shasum":"f6bc3e44dc4e45fe40f255434bc77475f30e635c","tarball":"https://registry.npmjs.org/@deniscuciuc/redis-analyzer/-/redis-analyzer-1.2.1.tgz","fileCount":74,"integrity":"sha512-Vg97s85Tw92HsJdYKERU9skiKt072Mg876jLUClg+mmFtsZTtRiKwHIkMWsFaNAxTU8C8MIAqu3CVlsQa1rXDQ==","signatures":[{"sig":"MEYCIQCuyaMIRy8zDp+AHqen+BvnX8/FIQrVlP/dgyWGrZSYpAIhAPxdUr3gKNjLnV4iG8t/0MqsRDZ7L37r2p7H1klBGcop","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@deniscuciuc%2fredis-analyzer@1.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":161261},"main":"./dist/src/index.js","_from":"file:deniscuciuc-redis-analyzer-1.2.1.tgz","types":"./dist/src/index.d.ts","engines":{"node":">=22","pnpm":">=10"},"exports":{".":{"types":"./dist/src/index.d.ts","default":"./dist/src/index.js","require":"./dist/src/index.js"}},"private":false,"scripts":{"lint":"biome check .","test":"node --test dist/tests/*.test.js","build":"rm -rf dist && tsc && node scripts/add-shebang.js","start":". ./.env && npx ts-node src/cli/main.ts start","analyze":". ./.env && npx ts-node src/cli/main.ts","lint:fix":"biome check --write .","postbuild":"node scripts/add-shebang.js","server:info":". ./.env && npx ts-node src/cli/main.ts -j -c server-info","analyze:help":"npx ts-node src/cli/main.ts --help","analyze:html":". ./.env && npx ts-node src/cli/main.ts --html -c full","analyze:keys":". ./.env && npx ts-node src/cli/main.ts -j -c keys","analyze:slow":". ./.env && npx ts-node src/cli/main.ts -j -c slow-commands","analyze:watch":". ./.env && npx ts-node src/cli/main.ts -c health --watch 30","release:major":"npm version major && git push && git push --tags","release:minor":"npm version minor && git push && git push --tags","release:patch":"npm version patch && git push && git push --tags","analyze:config":". ./.env && npx ts-node src/cli/main.ts -j -c config","analyze:health":". ./.env && npx ts-node src/cli/main.ts -j -c health","analyze:memory":". ./.env && npx ts-node src/cli/main.ts -j -c memory","analyze:hit-rate":". ./.env && npx ts-node src/cli/main.ts -j -c hit-rate","analyze:connections":". ./.env && npx ts-node src/cli/main.ts -j -c connections","analyze:persistence":". ./.env && npx ts-node src/cli/main.ts -j -c persistence","analyze:replication":". ./.env && npx ts-node src/cli/main.ts -j -c replication"},"_npmUser":{"name":"deniscuciuc","email":"personal.dcuciuc@gmail.com"},"_resolved":"/tmp/91982346934a578973efaf54fe408ab6/deniscuciuc-redis-analyzer-1.2.1.tgz","_integrity":"sha512-Vg97s85Tw92HsJdYKERU9skiKt072Mg876jLUClg+mmFtsZTtRiKwHIkMWsFaNAxTU8C8MIAqu3CVlsQa1rXDQ==","repository":{"url":"git+https://github.com/deniscuciuc/db-analyzer-redis.git","type":"git"},"_npmVersion":"10.9.8","description":"CLI tool that analyzes Redis servers for memory pressure, cache efficiency, persistence safety, replication health, and slow commands.","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"ioredis":"^6.0.0","@inquirer/prompts":"^8.7.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ts-node":"^10.9.2","typescript":"^7.0.2","@types/node":"^22.20.1","@biomejs/biome":"2.5.12"},"_npmOperationalInternal":{"tmp":"tmp/redis-analyzer_1.2.1_1789006033819_0.6119615298375494","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"@deniscuciuc/redis-analyzer","version":"1.2.2","keywords":["redis","database","analyzer","performance","cache","cli","memory","replication","slowlog","devops"],"author":{"name":"Denis Cuciuc","email":"denis@deniscuciuc.dev"},"license":"MIT","_id":"@deniscuciuc/redis-analyzer@1.2.2","maintainers":[{"name":"deniscuciuc","email":"personal.dcuciuc@gmail.com"}],"homepage":"https://github.com/deniscuciuc/db-analyzer-redis#readme","bugs":{"url":"https://github.com/deniscuciuc/db-analyzer-redis/issues"},"bin":{"redis-analyzer":"dist/src/cli/main.js"},"dist":{"shasum":"190bdba18f8b2487d745e75dab492a514c2f75ae","tarball":"https://registry.npmjs.org/@deniscuciuc/redis-analyzer/-/redis-analyzer-1.2.2.tgz","fileCount":74,"integrity":"sha512-sjsT/StmvmzmTCkx88kKf01LmCCG76W07WSar9WvNyPkJmDSnLb41WdGEv6bixXBDUG3fEHgB53h8PeTVMNeKA==","signatures":[{"sig":"MEQCIBfDmD4ZXaKxMiTT5KOGnCMfJ7p/VeUeDojeUFpS+tZ3AiBWrEW7s0D+PKqvyuQRs2K1yTUWT08MdT6Qvy/+YIuhdg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@deniscuciuc%2fredis-analyzer@1.2.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":161525},"main":"./dist/src/index.js","_from":"file:deniscuciuc-redis-analyzer-1.2.2.tgz","types":"./dist/src/index.d.ts","engines":{"node":">=22","pnpm":">=10"},"exports":{".":{"types":"./dist/src/index.d.ts","default":"./dist/src/index.js","require":"./dist/src/index.js"},"./package.json":"./package.json"},"private":false,"scripts":{"lint":"biome check .","test":"node --test dist/tests/*.test.js","build":"rm -rf dist && tsc && node scripts/add-shebang.js","start":". ./.env && npx ts-node src/cli/main.ts start","analyze":". ./.env && npx ts-node src/cli/main.ts","lint:fix":"biome check --write .","postbuild":"node scripts/add-shebang.js","server:info":". ./.env && npx ts-node src/cli/main.ts -j -c server-info","analyze:help":"npx ts-node src/cli/main.ts --help","analyze:html":". ./.env && npx ts-node src/cli/main.ts --html -c full","analyze:keys":". ./.env && npx ts-node src/cli/main.ts -j -c keys","analyze:slow":". ./.env && npx ts-node src/cli/main.ts -j -c slow-commands","analyze:watch":". ./.env && npx ts-node src/cli/main.ts -c health --watch 30","release:major":"npm version major && git push && git push --tags","release:minor":"npm version minor && git push && git push --tags","release:patch":"npm version patch && git push && git push --tags","analyze:config":". ./.env && npx ts-node src/cli/main.ts -j -c config","analyze:health":". ./.env && npx ts-node src/cli/main.ts -j -c health","analyze:memory":". ./.env && npx ts-node src/cli/main.ts -j -c memory","analyze:hit-rate":". ./.env && npx ts-node src/cli/main.ts -j -c hit-rate","analyze:connections":". ./.env && npx ts-node src/cli/main.ts -j -c connections","analyze:persistence":". ./.env && npx ts-node src/cli/main.ts -j -c persistence","analyze:replication":". ./.env && npx ts-node src/cli/main.ts -j -c replication"},"_npmUser":{"name":"deniscuciuc","email":"personal.dcuciuc@gmail.com"},"_resolved":"/tmp/8e3654057f829aad3b3d3f8c13465818/deniscuciuc-redis-analyzer-1.2.2.tgz","_integrity":"sha512-sjsT/StmvmzmTCkx88kKf01LmCCG76W07WSar9WvNyPkJmDSnLb41WdGEv6bixXBDUG3fEHgB53h8PeTVMNeKA==","repository":{"url":"git+https://github.com/deniscuciuc/db-analyzer-redis.git","type":"git"},"_npmVersion":"10.9.8","description":"CLI tool that analyzes Redis servers for memory pressure, cache efficiency, persistence safety, replication health, and slow commands.","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"ioredis":"^6.0.0","@inquirer/prompts":"^8.7.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ts-node":"^10.9.2","typescript":"^7.0.2","@types/node":"^22.20.1","@biomejs/biome":"2.5.12"},"_npmOperationalInternal":{"tmp":"tmp/redis-analyzer_1.2.2_1789006364687_0.060996609773692256","host":"s3://npm-registry-packages-npm-production"}},"1.2.3":{"name":"@deniscuciuc/redis-analyzer","version":"1.2.3","description":"CLI tool that analyzes Redis servers for memory pressure, cache efficiency, persistence safety, replication health, and slow commands.","keywords":["redis","database","analyzer","performance","cache","cli","memory","replication","slowlog","devops"],"repository":{"type":"git","url":"git+https://github.com/deniscuciuc/db-analyzer-redis.git"},"bugs":{"url":"https://github.com/deniscuciuc/db-analyzer-redis/issues"},"license":"MIT","author":{"name":"Denis Cuciuc","email":"denis@deniscuciuc.dev"},"homepage":"https://github.com/deniscuciuc/db-analyzer-redis#readme","private":false,"publishConfig":{"access":"public"},"bin":{"redis-analyzer":"dist/src/cli/main.js"},"main":"./dist/src/index.js","types":"./dist/src/index.d.ts","dependencies":{"@inquirer/prompts":"^8.7.2","ioredis":"^6.0.0"},"devDependencies":{"@biomejs/biome":"2.5.12","@types/node":"^22.20.1","ts-node":"^10.9.2","typescript":"^7.0.2"},"engines":{"node":">=22","pnpm":">=10"},"exports":{".":{"types":"./dist/src/index.d.ts","require":"./dist/src/index.js","default":"./dist/src/index.js"},"./package.json":"./package.json"},"sideEffects":false,"scripts":{"start":". ./.env && npx ts-node src/cli/main.ts start","analyze":". ./.env && npx ts-node src/cli/main.ts","analyze:help":"npx ts-node src/cli/main.ts --help","analyze:health":". ./.env && npx ts-node src/cli/main.ts -j -c health","analyze:memory":". ./.env && npx ts-node src/cli/main.ts -j -c memory","analyze:hit-rate":". ./.env && npx ts-node src/cli/main.ts -j -c hit-rate","analyze:slow":". ./.env && npx ts-node src/cli/main.ts -j -c slow-commands","analyze:keys":". ./.env && npx ts-node src/cli/main.ts -j -c keys","analyze:connections":". ./.env && npx ts-node src/cli/main.ts -j -c connections","analyze:persistence":". ./.env && npx ts-node src/cli/main.ts -j -c persistence","analyze:replication":". ./.env && npx ts-node src/cli/main.ts -j -c replication","analyze:config":". ./.env && npx ts-node src/cli/main.ts -j -c config","analyze:html":". ./.env && npx ts-node src/cli/main.ts --html -c full","analyze:watch":". ./.env && npx ts-node src/cli/main.ts -c health --watch 30","server:info":". ./.env && npx ts-node src/cli/main.ts -j -c server-info","build":"rm -rf dist && tsc && node scripts/add-shebang.js","postbuild":"node scripts/add-shebang.js","lint":"biome check .","lint:fix":"biome check --write .","test":"node --test dist/tests/*.test.js","release:patch":"npm version patch && git push && git push --tags","release:minor":"npm version minor && git push && git push --tags","release:major":"npm version major && git push && git push --tags"},"_id":"@deniscuciuc/redis-analyzer@1.2.3","_integrity":"sha512-DRGhelW4j/KyJLIN4Q/0GRWTxHnvfP96TmrXJjAfyQivtS8s/Z1lsV3qLWcaISHY/9bxVkk920iowUWZWSWVVw==","_resolved":"/tmp/7ced533c8f99a3f732e4007b8e4ba941/deniscuciuc-redis-analyzer-1.2.3.tgz","_from":"file:deniscuciuc-redis-analyzer-1.2.3.tgz","_nodeVersion":"22.23.2","_npmVersion":"10.9.8","dist":{"integrity":"sha512-DRGhelW4j/KyJLIN4Q/0GRWTxHnvfP96TmrXJjAfyQivtS8s/Z1lsV3qLWcaISHY/9bxVkk920iowUWZWSWVVw==","shasum":"97735fa484ce2d7b72cee557096236d63d3d8080","tarball":"https://registry.npmjs.org/@deniscuciuc/redis-analyzer/-/redis-analyzer-1.2.3.tgz","fileCount":74,"unpackedSize":161953,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@deniscuciuc%2fredis-analyzer@1.2.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIEUq5aZqHmKWki1F65qt5+G1f00rnQfoTEEtfVOez684AiEAp91yLtULJLznQ4MEnc3IruAlWoLl9nsE+eb0ffE2TvI="}]},"_npmUser":{"name":"deniscuciuc","email":"personal.dcuciuc@gmail.com"},"directories":{},"maintainers":[{"name":"deniscuciuc","email":"personal.dcuciuc@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/redis-analyzer_1.2.3_1789009612803_0.4170562121518928"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-14T09:40:54.591Z","modified":"2026-09-10T03:06:53.276Z","1.0.0":"2026-06-14T09:40:55.020Z","1.1.0":"2026-09-10T01:26:14.354Z","1.2.0":"2026-09-10T01:44:01.055Z","1.2.1":"2026-09-10T02:07:13.973Z","1.2.2":"2026-09-10T02:12:44.824Z","1.2.3":"2026-09-10T03:06:52.931Z"},"bugs":{"url":"https://github.com/deniscuciuc/db-analyzer-redis/issues"},"author":{"name":"Denis Cuciuc","email":"denis@deniscuciuc.dev"},"license":"MIT","homepage":"https://github.com/deniscuciuc/db-analyzer-redis#readme","keywords":["redis","database","analyzer","performance","cache","cli","memory","replication","slowlog","devops"],"repository":{"type":"git","url":"git+https://github.com/deniscuciuc/db-analyzer-redis.git"},"description":"CLI tool that analyzes Redis servers for memory pressure, cache efficiency, persistence safety, replication health, and slow commands.","maintainers":[{"name":"deniscuciuc","email":"personal.dcuciuc@gmail.com"}],"readme":"![redis-analyzer](https://raw.githubusercontent.com/deniscuciuc/db-analyzer-redis/main/assets/banner.png)\n\n# Redis Analyzer\n\n[![Node.js 22+](https://img.shields.io/badge/node-20%2B-339933?logo=node.js)](https://nodejs.org/)\n[![npm version](https://img.shields.io/npm/v/@deniscuciuc/redis-analyzer?logo=npm&color=cb3837)](https://www.npmjs.com/package/@deniscuciuc/redis-analyzer)\n[![npm downloads](https://img.shields.io/npm/dm/@deniscuciuc/redis-analyzer)](https://www.npmjs.com/package/@deniscuciuc/redis-analyzer)\n[![License: MIT](https://img.shields.io/badge/license-MIT-green)](LICENSE)\n[![TypeScript](https://img.shields.io/badge/types-TypeScript-3178C6?logo=typescript)](https://www.typescriptlang.org/)\n[![CI](https://github.com/deniscuciuc/db-analyzer-redis/actions/workflows/ci.yml/badge.svg)](https://github.com/deniscuciuc/db-analyzer-redis/actions/workflows/ci.yml)\n\nA CLI tool that analyzes Redis health with a focus on memory pressure, cache hit rate, persistence safety, replication lag, connection pressure, and slow commands. It emits structured JSON for automation or writes Markdown, JSON, and optional HTML reports to `./reports/`.\n\n## Quick start\n\nNo installation required:\n\n```bash\nnpx @deniscuciuc/redis-analyzer -h localhost -p 6379 -c health\nnpx @deniscuciuc/redis-analyzer --uri redis://localhost:6379/0 -c full --json > report.json\n```\n\nOr install globally:\n\n```bash\nnpm install -g @deniscuciuc/redis-analyzer\nredis-analyzer -h your-host -p 6379 -c health\n```\n\n> **Working with an AI agent?** See [.github/copilot-instructions.md](.github/copilot-instructions.md) for the integrated GitHub Copilot workflow and JSON contracts.\n\n---\n\n## Table of Contents\n\n- [Features](#features)\n- [Requirements](#requirements)\n- [Development / local setup](#development--local-setup)\n- [Configuration](#configuration)\n- [Usage](#usage)\n- [Commands](#commands)\n- [CLI options](#cli-options)\n- [Output formats](#output-formats)\n- [Health score](#health-score)\n- [Architecture](#architecture)\n- [Contributing](#contributing)\n\n---\n\n## Features\n\n- Memory usage analysis with fragmentation and RSS overhead checks\n- Cache hit-rate analysis with eviction and expiry context\n- Persistence safety checks for RDB and AOF\n- Replication health checks for standalone, primary, and replica nodes\n- Slow command analysis from `SLOWLOG`\n- Keyspace summaries by logical database\n- Interactive mode, compare mode, HTML reports, and watch mode for safe commands\n\n## Requirements\n\n- Node.js 22+\n- pnpm >= 10\n- Redis 6+\n\n## Development / local setup\n\n```bash\npnpm install\ncp .env.example .env\n# edit .env with your Redis connection details\npnpm build\nnode dist/index.js --help\n```\n\n## Configuration\n\n### Environment variables (`.env`)\n\n```bash\nexport REDIS_HOST=localhost\nexport REDIS_PORT=6379\nexport REDIS_DB=0\nexport REDIS_PASSWORD=secret\nexport REDIS_TLS=false\n\n# Alternative: URI format\n# export REDIS_URI=redis://:secret@redis.internal:6379/0\n```\n\n### Config file (`.analyzerrc.json`)\n\nPlace `.analyzerrc.json` in your project root (or `~/.config/db-analyzer/config.json` for global settings). Copy `analyzerrc.example.json` to get started:\n\n```bash\ncp analyzerrc.example.json .analyzerrc.json\n```\n\nProfiles let you switch between Redis instances:\n\n```bash\n. ./.env && npx ts-node index.ts -c health --profile prod\npnpm analyze:health -- --profile local\n```\n\nCLI flags always win. When you explicitly select `--profile`, that profile overrides the sourced environment defaults for that run.\n\n## Usage\n\n### Interactive mode\n\n```bash\npnpm start\n```\n\n### npm scripts\n\n```bash\npnpm analyze\npnpm analyze:help\npnpm analyze:health\npnpm analyze:memory\npnpm analyze:hit-rate\npnpm analyze:slow\npnpm analyze:keys\npnpm analyze:connections\npnpm analyze:persistence\npnpm analyze:replication\npnpm analyze:config\npnpm analyze:html\npnpm analyze:watch\npnpm server:info\npnpm build\npnpm lint\npnpm test\n```\n\n### Direct CLI\n\n```bash\n. ./.env && npx ts-node index.ts -j -c health\n. ./.env && npx ts-node index.ts -j -c slow-commands --slow-threshold 5000\nnpx ts-node index.ts --uri redis://localhost:6379/0 -c full --html\n```\n\n---\n\n## Commands\n\n| Command | Description |\n| ------- | ----------- |\n| `full` | Complete analysis (default) |\n| `health` | Health score and key metrics |\n| `server-info` | Redis version, mode, uptime, config file |\n| `memory` | Memory usage, fragmentation, and overhead |\n| `hit-rate` | Cache hit ratio, expirations, and evictions |\n| `slow-commands` | `SLOWLOG` analysis with top command types |\n| `keys` | Keyspace counts, expiries, and average TTL |\n| `connections` | Connected, blocked, rejected, and buffer metrics |\n| `persistence` | RDB and AOF health |\n| `replication` | Primary / replica status and lag |\n| `config` | Important Redis configuration values |\n\n## CLI options\n\n| Option | Short | Description | Default |\n| ------ | ----- | ----------- | ------- |\n| `--host` | `-h` | Redis host | `localhost` |\n| `--port` | `-p` | Redis port | `6379` |\n| `--password` | `-a` | Redis password | - |\n| `--db` | `-n` | Database number | `0` |\n| `--tls` |  | Enable TLS | `false` |\n| `--uri` |  | Redis URI (`redis://...`) | - |\n| `--profile` |  | Use named profile from `.analyzerrc.json` | - |\n| `--config` |  | Use a custom config file path | auto-search |\n| `--slow-threshold` |  | Slow command threshold in microseconds | `10000` |\n| `--max-slow-commands` |  | Max `SLOWLOG` rows to fetch | `25` |\n| `--compare` |  | Compare against a previous JSON report | - |\n| `--watch` |  | Poll interval in seconds | - |\n| `--command` | `-c` | Run a specific analysis command | `full` |\n| `--json` | `-j` | Output JSON | `false` |\n| `--quiet` | `-q` | Suppress non-essential output | `false` |\n| `--output` | `-o` | Reports directory | `./reports` |\n| `--html` |  | Also generate an HTML report | `false` |\n| `--interactive` | `-i` | Interactive menu | `false` |\n\n---\n\n## Output formats\n\n### JSON\n\nUse `-j` to emit machine-readable JSON to stdout.\n\n### Markdown / HTML reports\n\n`full` analysis writes:\n\n- Markdown report\n- JSON report\n- Optional HTML report when `--html` is set\n\n### Compare mode\n\nCompare two snapshots:\n\n```bash\n. ./.env && npx ts-node index.ts -c full --compare ./reports/redis-analysis-prev.json\n```\n\n## Health score\n\nThe analyzer starts at **100** and deducts points for:\n\n- high memory usage or fragmentation\n- low cache hit rate\n- failed or stale persistence\n- replication lag or broken links\n- rejected client connections\n\nScore guide:\n\n| Score | Status |\n| ----- | ------ |\n| 90-100 | Excellent |\n| 70-89 | Good |\n| 50-69 | Warning |\n| 0-49 | Critical |\n\n## Programmatic usage\n\nThe package has two entry points. Importing it gives you the library and does nothing else;\nthe CLI is reached through the `redis-analyzer` binary.\n\n```ts\nimport { RedisAnalyzer } from \"@deniscuciuc/redis-analyzer\";\n\nconst analyzer = new RedisAnalyzer({\n  host: \"localhost\",\n  port: 6379,\n  password: process.env.REDIS_PASSWORD,\n  outputDir: \"./reports\",\n});\n\ntry {\n  const report = await analyzer.analyze();\n\n  console.log(`Health score: ${report.healthScore}`);\n  for (const recommendation of report.recommendations) {\n    console.log(`- [${recommendation.severity}] ${recommendation.message}`);\n  }\n\n  // \"markdown\" (default), \"json\" or \"html\"; returns the path written.\n  const path = await analyzer.generateReport(\"json\", report);\n  console.log(`Report written to ${path}`);\n} finally {\n  await analyzer.close();\n}\n```\n\n### `RedisAnalyzer`\n\n| Member | Description |\n|---|---|\n| `new RedisAnalyzer(options?)` | Opens no connection. See the option table below. |\n| `connect()` | Connects and pings. Called automatically by `analyze()`; call it directly to surface a connection failure early. |\n| `analyze()` | Runs a full analysis and resolves to a `FullRedisReport`. |\n| `generateReport(format?, report?)` | Writes a report and resolves to the file path. Generates a report first if one is not supplied. |\n| `close()` | Closes the connection. Does nothing to a client you supplied yourself. |\n\n| Option | Default | Description |\n|---|---|---|\n| `host` | `localhost` | Ignored when `uri` is set |\n| `port` | `6379` | Ignored when `uri` is set |\n| `password` | — | |\n| `db` | `0` | |\n| `tls` | `false` | TLS with the server certificate verified |\n| `uri` | — | A `redis://` or `rediss://` URI, taking precedence over the fields above |\n| `outputDir` | `./reports` | Where `generateReport` writes |\n| `slowCommandThreshold` | `10000` | Microseconds |\n| `maxSlowCommands` | `20` | |\n| `client` | — | Use an existing `ioredis` client; you keep ownership and `close()` will not disconnect it |\n\nThe analyzers, collectors, reporters and every report type are exported too, so you can\nassemble a different pipeline — see [`src/index.ts`](src/index.ts) for the full surface.\n\n## Architecture\n\n```text\nsrc/cli/main.ts                       # CLI entry point (the `redis-analyzer` binary)\nsrc/index.ts                          # Library entry point, no side effects\nsrc/api.ts                            # RedisAnalyzer, the programmatic API\nsrc/cli/{options,runner,validate}.ts  # CLI parsing, command execution, validation\nsrc/config/loader.ts                  # Config loading and profile resolution\nsrc/collectors/stats-collector.ts     # INFO / SLOWLOG / CONFIG collection\nsrc/analyzers/*.ts                    # Memory, performance, persistence, replication analysis\nsrc/reporters/*.ts                    # Markdown, HTML, and diff rendering\nsrc/interactive/{index,display,menus}.ts\nsrc/watch/runner.ts                   # Watch mode loop\ntests/*.test.ts                       # Automated tests\n```\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md).\n","readmeFilename":"README.md"}