Skip to content

Commit dfd6a5a

Browse files
committed
feat(www): report system load average
Signed-off-by: Cedric Hombourger <[email protected]>
1 parent 2f5f885 commit dfd6a5a

File tree

3 files changed

+47
-2
lines changed

3 files changed

+47
-2
lines changed

mtda/constants.py

+1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ class EVENTS:
3131
POWER = "POWER"
3232
SESSION = "SESSION"
3333
STORAGE = "STORAGE"
34+
SYSTEM = "SYSTEM"
3435

3536

3637
class IMAGE(Enum):

mtda/main.py

+15-2
Original file line numberDiff line numberDiff line change
@@ -1786,8 +1786,7 @@ def start(self):
17861786

17871787
if self.is_server is True:
17881788
from mtda.utils import RepeatTimer
1789-
handler = self.session_check
1790-
self._session_timer = RepeatTimer(10, handler)
1789+
self._session_timer = RepeatTimer(5, self._timer)
17911790
self._session_timer.start()
17921791

17931792
# Start from a known state
@@ -1901,3 +1900,17 @@ def _check_locked(self, session):
19011900

19021901
self.mtda.debug(3, f"main._check_locked: {result}")
19031902
return result
1903+
1904+
def _system_monitor(self):
1905+
loadavg = 0.0
1906+
with open('/proc/loadavg') as f:
1907+
stats = f.readline().split()
1908+
loadavg = stats[0]
1909+
self.notify(CONSTS.EVENTS.SYSTEM, f'{loadavg}')
1910+
1911+
def _timer(self):
1912+
# Check for inative sessions
1913+
self.session_check()
1914+
1915+
# System health checks
1916+
self._system_monitor()

mtda/templates/index.html

+31
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,17 @@
112112
height: "340px",
113113
hidden: true
114114
});
115+
116+
sysWindow = new WinBox("System", {
117+
html: "<canvas id='sysLoadCanvas' width='220' height='100'></canvas>",
118+
class: ["no-full", "no-max", "modern"],
119+
width: "250px",
120+
height: "150px",
121+
hidden: true
122+
});
123+
var sysLoadChart;
124+
var sysLoadSeries = new TimeSeries();
125+
115126
xferWindow = new WinBox("Transferring", {
116127
html: "<svg width='100' height='100' viewBox='0 0 100 100'>" +
117128
"<circle cx='50' cy='50' r='40' stroke='#eee' stroke-width='8' fill='none'/>" +
@@ -127,6 +138,7 @@
127138
});
128139
var xferChart;
129140
var xferSeries = new TimeSeries();
141+
130142
consoleWindow.focus()
131143
</script>
132144
<script src="./assets/jquery.min.js"></script>
@@ -270,6 +282,7 @@
270282
case 'POWER': power_event(message); break;
271283
case 'SESSION': ignore_message(message); break;
272284
case 'STORAGE': storage_event(message); break;
285+
case 'SYSTEM': system_event(message); break;
273286
case 'console-output': console_output(message); break;
274287
case 'mtda-version': mtda_version(message); break;
275288
case 'session': session_set_id(message); break;
@@ -407,6 +420,24 @@
407420
}
408421
});
409422

423+
function system_event(data) {
424+
data = data.event.split(" ");
425+
let loadavg = data[0];
426+
427+
if (sysWindow.hidden) {
428+
sysWindow.show();
429+
sysLoadChart = new SmoothieChart({
430+
millisPerPixel: 100,
431+
maxValueScale: 1.2,
432+
minValueScale: 1.2,
433+
grid: { fillStyle: 'rgba(40, 40, 40, 0.2)', strokeStyle: 'rgba(90, 90, 90, 0.2)', verticalSections: 4 },
434+
});
435+
sysLoadChart.streamTo(document.getElementById("sysLoadCanvas"), 5000);
436+
sysLoadChart.addTimeSeries(sysLoadSeries, { strokeStyle: 'rgb(0, 255, 0)', lineWidth: 2 });
437+
}
438+
sysLoadSeries.append(Date.now(), loadavg);
439+
}
440+
410441
function delay(ms) {
411442
return new Promise(resolve => setTimeout(resolve, ms));
412443
}

0 commit comments

Comments
 (0)