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.22 kB
JavaScript
export default async t=>{const{socket:e}=t;try{const s=e.p3xrs.ioredis;if(!s)return void e.emit(t.responseEvent,{status:"error",error:"Not connected to Redis"});let r;try{r=(await s.call("CLUSTER","SHARDS")).map(t=>{const e={};for(let s=0;s<t.length;s+=2)e[t[s]]=t[s+1];const s=e.slots||[],r=[];for(let t=0;t<s.length;t+=2)r.push([s[t],s[t+1]]);const o=(e.nodes||[]).map(t=>{const e={};for(let s=0;s<t.length;s+=2)e[t[s]]=t[s+1];return{host:e.ip||e.endpoint,port:e.port,id:e.id,role:e.role}});return{slotRanges:r,master:o.find(t=>"master"===t.role)||o[0]||{host:"?",port:0,id:"?"},replicas:o.filter(t=>"master"!==t.role)}})}catch{r=function(t){const e=new Map;for(const s of t){const t=s[0],r=s[1],o=s[2],n=o[2]||`${o[0]}:${o[1]}`;e.has(n)||e.set(n,{slotRanges:[],master:{host:o[0],port:o[1],id:n},replicas:[]});const a=e.get(n);a.slotRanges.push([t,r]);for(let t=3;t<s.length;t++){const e=s[t],r=e[2]||`${e[0]}:${e[1]}`;a.replicas.find(t=>t.id===r)||a.replicas.push({host:e[0],port:e[1],id:r})}}return Array.from(e.values())}(await s.call("CLUSTER","SLOTS"))}e.emit(t.responseEvent,{status:"ok",data:{shards:r}})}catch(s){console.error("cluster/shards failed",s),e.emit(t.responseEvent,{status:"error",error:s.message})}};