PopulateNodes stability improvements

This commit is contained in:
Ewoud
2023-10-24 15:34:07 +02:00
parent 2246436928
commit 7f5ddc79da
8 changed files with 3779 additions and 3711 deletions

View File

@@ -1129,14 +1129,13 @@ function populateNodes(i,n)
//WLEDMM starts here
nodesData = []; //WLEDMM reset nodes
var nodesDone = 0;
function showPanel(panel) {
return "(" + panel.x + "," + panel.y + ") - " + panel.w + "x" + panel.h + " " + (panel.b?1:0) + (panel.r?1:0) + (panel.v?1:0) + (panel.s?1:0);
}
function checkNode(nodeNr) {
// console.log(nodeNr, nodesData[nodeNr]);
console.log("CheckNode", nodeNr, nodesData[nodeNr]);
let errFound = false;
//warnings
@@ -1207,7 +1206,7 @@ function populateNodes(i,n)
gId(`fx${nodeNr}`).innerText = effects[state.seg[0].fx];
//store data
nodesData[nodeNr] = {};
if (!nodesData[nodeNr]) nodesData[nodeNr] = {};
nodesData[nodeNr].info = info;
//if the node has a matrix, show matrix info
@@ -1226,9 +1225,6 @@ function populateNodes(i,n)
gId(`gcc${nodeNr}`).innerText = cfg.light.gc.col > 1;
gId(`fps${nodeNr}`).innerText = cfg.hw.led.fps;
//store data
// nodesData[nodeNr].cfg = cfg;
//if the node has a matrix, show matrix info
if (cfg.hw.led.matrix) {
gId(`pnl0${nodeNr}`).innerText = showPanel(cfg.hw.led.matrix.panels[0]); //show the first panel
@@ -1238,12 +1234,15 @@ function populateNodes(i,n)
if (ip == lastinfo.ip) {
let panelIndex = 0; //loop over panels
for (let i=0; i<nnodes; i++) { //loop over all nodes found
if (panelIndex < cfg.hw.led.matrix.panels.length && nodesData[i] && nodesData[i].info.ip != lastinfo.ip) { //loop over panels of self: assign each panel to a different node
//nodesData[i] does not exist if not all fetches done
if (panelIndex < cfg.hw.led.matrix.panels.length && n.nodes[i].ip != lastinfo.ip) { //loop over panels of self: assign each panel to a different node
let panelX = cfg.hw.led.matrix.panels[panelIndex];
gId(`pnlX${i}`).innerText = showPanel(panelX);
//store data
//nodesData[i] does not exist if not all fetches done
if (!nodesData[i]) nodesData[i] = {};
nodesData[i].cfg = structuredClone(cfg); //structuredClone: by value, not by reference so we can make changex
@@ -1281,10 +1280,18 @@ function populateNodes(i,n)
}
}
}
nodesDone++;
callback(parms);
});
});
callback(nodeNr);
}, function(nodeNr, text) {console.log("cfg error", nodeNr, n.nodes[nodeNr].name, text);callback(nodeNr);}); //also callback on error
}, function(nodeNr, text) {
//to show nodes which failed in providing json info
let ip = n.nodes[nodeNr].ip;
let name = n.nodes[nodeNr].name;
let url = `<button class="btn" ${(ip == lastinfo.ip)?'style="background-color: red;"':''} title="${ip}" onclick="location.assign('http://${ip}');">${name}</button>`;
gId(`ins${nodeNr}`).innerHTML = url;
gId(`ip${nodeNr}`).innerText = ip;
console.log("json error", nodeNr, ip, name, text);
callback(nodeNr); //also callback on error
});
} //fetchInfoAndCfg
if (n.nodes) {
@@ -1304,14 +1311,17 @@ function populateNodes(i,n)
urows += `</tr>`;
//show other nodes e.g. {name: "MM 32 L", type: 32, ip: "192.168.121.249", age: 1, vid: 2305080}
var nodesDone = 0;
for (let o of n.nodes) {
if (o.name) {
if (o.ip) { //in ap mode no ip...
fetchInfoAndCfg(o.ip, nnodes, -1, function() {
fetchInfoAndCfg(o.ip, nnodes, -1, function(nodeNr) {
nodesDone++;
console.log("nodesDone", nodesDone, nodeNr, n.nodes.length, nnodes, n.nodes[nodeNr].name);
//if all done
if (nodesDone == nnodes ) {
for (let i=0; i<nnodes; i++) {
if (gId(`ip${i}`).innerText != lastinfo.ip) //not self
if (nodesDone == n.nodes.length ) {
for (let i=0; i<n.nodes.length; i++) {
if (n.nodes[i].ip != lastinfo.ip && nodesData[i] && nodesData[i].info && nodesData[i].cfg) //not self and data has been collected (no errors getting files)
checkNode(i);
}
}