// Demo data for testing the Members view without actual cluster data window.demoMembersData = { members: [ { hostname: "spore-node-1", ip: "192.168.1.100", lastSeen: Date.now(), latency: 3, status: "ACTIVE", resources: { freeHeap: 48748, chipId: 12345678, sdkVersion: "3.1.2", cpuFreqMHz: 80, flashChipSize: 1048576 }, api: [ { uri: "/api/node/status", method: "GET" }, { uri: "/api/tasks/status", method: "GET" } ], labels: { environment: "production", region: "us-west", role: "worker", cluster: "spore-main" } }, { hostname: "spore-node-2", ip: "192.168.1.101", lastSeen: Date.now() - 5000, latency: 8, status: "ACTIVE", resources: { freeHeap: 52340, chipId: 87654321, sdkVersion: "3.1.2", cpuFreqMHz: 80, flashChipSize: 1048576 }, api: [ { uri: "/api/node/status", method: "GET" }, { uri: "/api/tasks/status", method: "GET" } ], labels: { environment: "production", region: "us-west", role: "controller", cluster: "spore-main" } }, { hostname: "spore-node-3", ip: "192.168.1.102", lastSeen: Date.now() - 15000, latency: 12, status: "INACTIVE", resources: { freeHeap: 38920, chipId: 11223344, sdkVersion: "3.1.1", cpuFreqMHz: 80, flashChipSize: 1048576 }, api: [ { uri: "/api/node/status", method: "GET" } ], labels: { environment: "staging", region: "us-west", role: "worker", cluster: "spore-main" } }, { hostname: "spore-node-4", ip: "192.168.1.103", lastSeen: Date.now() - 30000, latency: 25, status: "ACTIVE", resources: { freeHeap: 45678, chipId: 55667788, sdkVersion: "3.1.2", cpuFreqMHz: 80, flashChipSize: 1048576 }, api: [ { uri: "/api/node/status", method: "GET" }, { uri: "/api/tasks/status", method: "GET" }, { uri: "/api/capabilities", method: "GET" } ], labels: { environment: "production", region: "us-east", role: "gateway", cluster: "spore-main" } }, { hostname: "spore-node-5", ip: "192.168.1.104", lastSeen: Date.now() - 60000, latency: 45, status: "DEAD", resources: { freeHeap: 0, chipId: 99887766, sdkVersion: "3.1.0", cpuFreqMHz: 0, flashChipSize: 1048576 }, api: [], } ] }; // Mock API client for demo purposes window.demoApiClient = { async getClusterMembers() { // Simulate network delay await new Promise(resolve => setTimeout(resolve, 500)); return window.demoMembersData; }, async getClusterMembersFromNode(ip) { // Simulate network delay await new Promise(resolve => setTimeout(resolve, 200)); // Return a subset of members to simulate different node perspectives const allMembers = window.demoMembersData.members; const nodeIndex = allMembers.findIndex(m => m.ip === ip); if (nodeIndex === -1) { return { members: [] }; } // Simulate each node seeing a different subset of the cluster const startIndex = (nodeIndex * 2) % allMembers.length; const members = [ allMembers[startIndex], allMembers[(startIndex + 1) % allMembers.length], allMembers[(startIndex + 2) % allMembers.length] ]; return { members: members.filter(m => m.ip !== ip) }; }, async getNodeStatus(ip) { // Simulate network delay await new Promise(resolve => setTimeout(resolve, 300)); // Find the member by IP const member = window.demoMembersData.members.find(m => m.ip === ip); if (!member) { throw new Error('Node not found'); } // Return node status with labels return { ...member.resources, api: member.api, labels: { environment: ip.includes('103') ? 'production' : 'production', region: ip.includes('103') ? 'us-east' : 'us-west', role: ip.includes('101') ? 'controller' : ip.includes('103') ? 'gateway' : 'worker', cluster: 'spore-main', nodeType: ip.includes('102') ? 'staging' : 'production', location: ip.includes('103') ? 'datacenter-2' : 'datacenter-1' } }; } };