Merge branch 'prodloop' into staging

This commit is contained in:
yflory 2025-10-27 15:07:39 +01:00
commit 08e2d0c19f
2 changed files with 19 additions and 17 deletions

View File

@ -173,16 +173,16 @@ nThen(function (w) {
let oldUsers = Env.maxConcurrentRegUsers || 0;
let stats = Server.getSessionStats();
let chans = Server.getActiveChannelCount();
let reg = 0;
let regKeys = [];
Object.keys(Env.netfluxUsers).forEach(id => {
let keys = Env.netfluxUsers[id];
let key = Object.keys(keys || {})[0];
if (!key) { return; }
if (regKeys.includes(key)) { return; }
reg++;
regKeys.push(key);
});
const map = Env.netfluxUsers;
// Extract public key from each ws connection
let regKeys = Object.keys(map).map(id => {
return Object.keys(map[id] || {})[0];
}).filter(Boolean);
// Convert to set to get only unique values
let regSet = new Set(regKeys);
const reg = regSet.size;
Env.maxConcurrentWs = Math.max(oldWs, stats.total);
Env.maxConcurrentUniqueWs = Math.max(oldUniqueWs, stats.unique);
Env.maxConcurrentRegUsers = Math.max(oldUsers, reg);
@ -194,9 +194,10 @@ nThen(function (w) {
try {
let users = Env.netfluxUsers || {};
let online = Server.getOnlineUsers() || [];
let onlineSet = new Set(online);
let removed = 0;
Object.keys(users).forEach(id => {
if (!online.includes(id)) {
if (!onlineSet.has(id)) {
delete users[id];
removed++;
}
@ -209,15 +210,16 @@ nThen(function (w) {
let HK = require('./hk-utils');
let chans = Env.channel_cache || {};
let active = Server.getActiveChannels() || [];
let activeSet = new Set(active);
let removed = 0;
Object.keys(chans).forEach(id => {
if (!active.includes(id)) {
if (!activeSet.has(id)) {
HK.dropChannel(Env, id);
removed++;
}
});
if (Env.store) {
Env.store.closeInactiveChannels(active);
Env.store.closeInactiveChannels(activeSet);
}
if (removed) {
Env.Log.info("CLEANED_ACTIVE_CHANNELS_MAP", {removed});

View File

@ -286,9 +286,9 @@ var closeChannel = function (env, channelName, cb) {
}
};
var closeInactiveChannels = function (env, schedule, active) {
var closeInactiveChannels = function (env, schedule, activeSet) {
Object.keys(env.channels).forEach(channelName => {
if (!active.includes(channelName)) {
if (!activeSet.has(channelName)) {
schedule.ordered(channelName, function (next) {
closeChannel(env, channelName, next);
});
@ -1473,8 +1473,8 @@ module.exports.create = function (conf, _cb) {
closeChannel(env, channelName, Util.both(cb, next));
});
},
closeInactiveChannels: function (active) {
closeInactiveChannels(env, schedule, active);
closeInactiveChannels: function (activeSet) {
closeInactiveChannels(env, schedule, activeSet);
},
// write to a log file
log: function (channelName, content, cb) {