diff --git a/README.md b/README.md index b563d1e..f3d0a42 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ | **Author** | John Haverlack | | **Copyright** | 2026 John Haverlack | | **License** | MIT | -| **Version** | 0.3.6 | +| **Version** | 0.3.7 | | **Date** | 2026-02-01 | ## Overview @@ -44,7 +44,7 @@ sudo ufw allow in proto udp from to any port 10101 Listen to UDP 10101 for beacon messages broadcast by your SDL Manager. ``` -nc -u 127.0.0.1 10101 +nc -u -l -k 10101 |jq ``` > NOTE: CTRL-C to exit `nc`. You cannot run `nc` on port 10101 in parallel with the sdl-wkr. So run it once to get the install command. Tnen install sdl-wkr. diff --git a/changelog.json b/changelog.json index 1428b1b..9d59a56 100644 --- a/changelog.json +++ b/changelog.json @@ -1,5 +1,12 @@ { "releases": [ + { + "version": "0.3.7", + "date": "2026-02-01", + "maturity": "ALPHA", + "summary": "sdl-wkr Telemetry", + "notes": "" + }, { "version": "0.3.6", "date": "2026-02-01", diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 8c7bb7d..dd8144e 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -5,14 +5,23 @@ | **Author** | John Haverlack | | **Copyright** | 2026 John Haverlack | | **License** | MIT | -| **Version** | 0.3.6 | +| **Version** | 0.3.7 | | **Date** | 2026-02-01 | +## v0.3.7 - 2026-02-01 (ALPHA) + +**Summary** +sdl-wkr Telemetry + +- Fixing sdl-wkr RAM detection +- Start v0.3.7 + ## v0.3.6 - 2026-02-01 (ALPHA) **Summary** Light/Dark Mode, Wkr Install, Cluster Stats +- v0.3.6 - Adding Cluster Telemetry - WIP: Worker Display - Tweaks diff --git a/docs/DESIGN.md b/docs/DESIGN.md index 6179362..af32591 100644 --- a/docs/DESIGN.md +++ b/docs/DESIGN.md @@ -5,7 +5,7 @@ | **Author** | John Haverlack | | **Copyright** | 2026 John Haverlack | | **License** | MIT | -| **Version** | 0.3.6 | +| **Version** | 0.3.7 | | **Date** | 2026-02-01 | ## Overview diff --git a/metadata.json b/metadata.json index 3ad3fde..f911de1 100644 --- a/metadata.json +++ b/metadata.json @@ -3,7 +3,7 @@ "name": "sdl", "description": "Software Defined Laboratory", "abbr": "SDL", - "version": "0.3.6", + "version": "0.3.7", "version_date": "2026-02-01", "maturity": "ALPHA", "author": "John Haverlack", diff --git a/sdl-mgr/app/modules/sdl-mgr/index.js b/sdl-mgr/app/modules/sdl-mgr/index.js index fb4f7f7..de10346 100644 --- a/sdl-mgr/app/modules/sdl-mgr/index.js +++ b/sdl-mgr/app/modules/sdl-mgr/index.js @@ -659,30 +659,48 @@ function startTelemetryListener() { // ✅ Renamed function }); }); - client.on('message', (topic, message) => { - if (topic !== telemetryTopic) return; +client.on('message', (topic, message) => { + if (topic !== telemetryTopic) return; - try { - const telemetry = JSON.parse(message.toString()); - const sdl_id = telemetry.msg.sdl_id; + try { + const telemetry = JSON.parse(message.toString()); + const sdl_id = telemetry.msg.sdl_id; - // Update worker's last_seen timestamp - if (clusterState.workers[sdl_id]) { - clusterState.workers[sdl_id].last_seen = new Date().toISOString(); - clusterState.workers[sdl_id].status = 'active'; - - // Update resources if provided - if (telemetry.msg.resources) { - clusterState.workers[sdl_id].resources = telemetry.msg.resources; + // Update worker's last_seen timestamp + if (clusterState.workers[sdl_id]) { + clusterState.workers[sdl_id].last_seen = new Date().toISOString(); + clusterState.workers[sdl_id].status = 'active'; + + // ✅ MERGE resources instead of replacing + if (telemetry.msg.resources) { + // Merge each resource type + if (telemetry.msg.resources.cpus) { + clusterState.workers[sdl_id].resources.cpus = { + ...clusterState.workers[sdl_id].resources.cpus, + ...telemetry.msg.resources.cpus + }; + } + if (telemetry.msg.resources.memory) { + clusterState.workers[sdl_id].resources.memory = { + ...clusterState.workers[sdl_id].resources.memory, + ...telemetry.msg.resources.memory + }; + } + if (telemetry.msg.resources.gpus) { + clusterState.workers[sdl_id].resources.gpus = { + ...clusterState.workers[sdl_id].resources.gpus, + ...telemetry.msg.resources.gpus + }; } - - clusterState = computeStats(clusterState); - saveClusterState(config, clusterState); } - } catch (err) { - log(`${module}: failed to process telemetry: ${err}`); + + clusterState = computeStats(clusterState); + saveClusterState(config, clusterState); } - }); + } catch (err) { + log(`${module}: failed to process telemetry: ${err}`); + } +}); client.on('error', err => { log(`${module}: telemetry listener MQTT error: ${err}`); diff --git a/sdl-mgr/app/package.json b/sdl-mgr/app/package.json index 417c095..d7237e1 100644 --- a/sdl-mgr/app/package.json +++ b/sdl-mgr/app/package.json @@ -1,6 +1,6 @@ { "name": "sdl-mgr", - "version": "0.3.6", + "version": "0.3.7", "version_date": "2026-02-01", "description": "Software Defined Laboratory: Manager (sdl-mgr)", "main": "index.js", diff --git a/sdl-mgr/html/md/changelog.md b/sdl-mgr/html/md/changelog.md index 8c7bb7d..dd8144e 100644 --- a/sdl-mgr/html/md/changelog.md +++ b/sdl-mgr/html/md/changelog.md @@ -5,14 +5,23 @@ | **Author** | John Haverlack | | **Copyright** | 2026 John Haverlack | | **License** | MIT | -| **Version** | 0.3.6 | +| **Version** | 0.3.7 | | **Date** | 2026-02-01 | +## v0.3.7 - 2026-02-01 (ALPHA) + +**Summary** +sdl-wkr Telemetry + +- Fixing sdl-wkr RAM detection +- Start v0.3.7 + ## v0.3.6 - 2026-02-01 (ALPHA) **Summary** Light/Dark Mode, Wkr Install, Cluster Stats +- v0.3.6 - Adding Cluster Telemetry - WIP: Worker Display - Tweaks diff --git a/sdl-wkr/app/index.js b/sdl-wkr/app/index.js index a81d329..6ee98d7 100644 --- a/sdl-wkr/app/index.js +++ b/sdl-wkr/app/index.js @@ -12,6 +12,7 @@ log('=========================================================================== log(config.package.name + ': STARTING: ' + config.package.description + ' v' + config.package.version); // log(JSON.stringify(config, null, 2)); // log(JSON.stringify(config.dirs, null, 2), false); +log(JSON.stringify(config.host, null, 2), false); for (let m in config.modules) { // log(`Loading module: ${m}`); diff --git a/sdl-wkr/app/modules/sdl-wkr/index.js b/sdl-wkr/app/modules/sdl-wkr/index.js index 94d47bd..baa67cc 100644 --- a/sdl-wkr/app/modules/sdl-wkr/index.js +++ b/sdl-wkr/app/modules/sdl-wkr/index.js @@ -309,7 +309,12 @@ function startTelemetry() { function publishTelemetry(topic) { if (!mqttClient || !authorized) return; - const gpuCount = Array.isArray(config.host.gpu) ? config.host.gpu.length : 0; // ✅ Fixed + const gpuCount = Array.isArray(config.host.gpu) ? config.host.gpu.length : 0; + + // ✅ Convert GB to bytes + const memoryBytes = config.host.memory.total_gb + ? config.host.memory.total_gb * 1024 * 1024 * 1024 + : 0; const telemetry = { ts: new Date().toISOString(), @@ -328,8 +333,8 @@ function publishTelemetry(topic) { used: 0 }, memory: { - allocated: config.host.memory.total_bytes, - available: config.host.memory.total_bytes, + allocated: memoryBytes, // ✅ Fixed + available: memoryBytes, // ✅ Fixed used: 0 }, gpus: { diff --git a/sdl-wkr/app/package.json b/sdl-wkr/app/package.json index 5679dbf..c82294c 100644 --- a/sdl-wkr/app/package.json +++ b/sdl-wkr/app/package.json @@ -1,7 +1,7 @@ { "name": "sdl-wkr", "description": "Software Defined Laboratory: Worker (sdl-wkr)", - "version": "0.3.6", + "version": "0.3.7", "version_date": "2026-02-01", "main": "index.js", "type": "module",