p3x-redis-ui-server
Version:
🏍️ P3X Redis UI server — Socket.IO backend for the dual Angular + React frontend with AI queries, 54 languages, and auto data decompression
2 lines (1 loc) • 1.24 kB
JavaScript
export default async o=>{const{socket:e,payload:r}=o;try{if(!e.p3xrs.ioredis)return void e.emit(o.responseEvent,{status:"error",error:"Not connected to Redis"});if(r.enabled){if(!e.p3xrs.ioredisMonitor){const o=e.p3xrs.ioredis,r="function"==typeof o.nodes,t=[],s=(o,r,t,s)=>{e.emit("monitor-data",{time:o,args:r,source:t,database:s})};if(r){const e=o.nodes("master");for(const o of e)for(let e=0;e<3;e++)try{const e=await o.monitor();e.on("monitor",s),t.push(e);break}catch(o){2===e?console.warn("MONITOR failed for cluster node, skipping:",o.message):await new Promise(o=>setTimeout(o,200))}if(0===t.length)throw new Error("Failed to start MONITOR on any cluster node")}else{let e;for(let r=0;r<3;r++)try{e=await o.monitor();break}catch(o){if(2===r)throw o;await new Promise(o=>setTimeout(o,200))}e.on("monitor",s),t.push(e)}e.p3xrs.ioredisMonitor=t,console.info("MONITOR started for",e.id,r?`(${t.length} cluster nodes)`:"(standalone)")}}else if(e.p3xrs.ioredisMonitor){for(const o of e.p3xrs.ioredisMonitor)o.disconnect();e.p3xrs.ioredisMonitor=void 0,console.info("MONITOR stopped for",e.id)}e.emit(o.responseEvent,{status:"ok"})}catch(r){console.error("Monitor error:",r),e.emit(o.responseEvent,{status:"error",error:r.message})}};