47 lines
1,018 B
JavaScript
47 lines
1,018 B
JavaScript
class BackendRegistry {
|
|
constructor() {
|
|
this.backends = new Map();
|
|
}
|
|
|
|
register(serviceId, ws) {
|
|
this.backends.set(serviceId, {
|
|
ws,
|
|
connectedAt: new Date().toISOString(),
|
|
lastPing: null,
|
|
});
|
|
console.log(`[registry] registered backend: ${serviceId}`);
|
|
}
|
|
|
|
unregister(serviceId) {
|
|
if (this.backends.has(serviceId)) {
|
|
this.backends.delete(serviceId);
|
|
console.log(`[registry] unregistered backend: ${serviceId}`);
|
|
}
|
|
}
|
|
|
|
get(serviceId) {
|
|
const entry = this.backends.get(serviceId);
|
|
return entry ? entry.ws : null;
|
|
}
|
|
|
|
list() {
|
|
return Array.from(this.backends.entries()).map(([serviceId, entry]) => ({
|
|
serviceId,
|
|
connectedAt: entry.connectedAt,
|
|
lastPing: entry.lastPing,
|
|
}));
|
|
}
|
|
|
|
updatePing(serviceId) {
|
|
const entry = this.backends.get(serviceId);
|
|
if (entry) {
|
|
entry.lastPing = new Date().toISOString();
|
|
}
|
|
}
|
|
|
|
count() {
|
|
return this.backends.size;
|
|
}
|
|
}
|
|
|
|
module.exports = new BackendRegistry();
|