fix race between state and telemetry streaming

Signed-off-by: John Crispin <john@phrozen.org>
This commit is contained in:
John Crispin
2021-09-13 08:48:15 +02:00
parent 8dd7c83a1c
commit 4e8cdf1bcf
2 changed files with 25 additions and 0 deletions

View File

@@ -1,6 +1,12 @@
#!/usr/bin/ucode
{%
let fs = require("fs");
/* if we are actively streaming telemetry then the state handler does not need to run
independently */
if (!telemetry && fs.stat("/tmp/ucentral.telemetry"))
return 0;
let uci = require("uci");
let ubus = require("ubus");
let cfgfile = fs.open("/etc/ucentral/ucentral.active", "r");
@@ -297,6 +303,12 @@
if (length(stations[vap.ifname]))
ssid.associations = stations[vap.ifname];
ssid.iface = vap.ifname;
ssid.counters = ports[vap.ifname].stats;
if (!ssid.counters)
delete ssid.counters;
push(ssids, ssid);
}
counter++;
@@ -380,6 +392,9 @@
};
ctx.call("ucentral", "stats", msg);
if (telemetry)
ctx.call("ucentral", "event", { "event": "state", "payload": msg });
let f = fs.open("/tmp/ucentral.state", "w");
if (f) {
f.write(msg);

10
system/telemetry.uc Executable file
View File

@@ -0,0 +1,10 @@
#!/usr/bin/ucode
{%
let fs = require("fs");
let f = fs.open("/tmp/ucentral.telemetry", "w");
if (f)
f.close();
telemetry = true;
include("state.uc");
%}