better stat tracking
This commit is contained in:
parent
1dc39decf7
commit
b8c6f30d32
51
app.js
51
app.js
@ -21,8 +21,8 @@ window.openTerminals = {};
|
|||||||
let activePeer = null;
|
let activePeer = null;
|
||||||
window.activePeer = null; // Expose to other modules
|
window.activePeer = null; // Expose to other modules
|
||||||
hideStatusIndicator();
|
hideStatusIndicator();
|
||||||
let statsInterval = null; // Global variable to hold the interval
|
let statsInterval = null;
|
||||||
|
let lastStatsUpdate = Date.now();
|
||||||
function stopStatsInterval() {
|
function stopStatsInterval() {
|
||||||
if (statsInterval) {
|
if (statsInterval) {
|
||||||
clearInterval(statsInterval);
|
clearInterval(statsInterval);
|
||||||
@ -31,21 +31,31 @@ function stopStatsInterval() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function startStatsInterval() {
|
function startStatsInterval() {
|
||||||
// Clear any existing interval
|
|
||||||
if (statsInterval) {
|
if (statsInterval) {
|
||||||
clearInterval(statsInterval);
|
clearInterval(statsInterval);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Start a new interval to request stats every second
|
|
||||||
statsInterval = setInterval(() => {
|
statsInterval = setInterval(() => {
|
||||||
if (window.activePeer) {
|
if (window.activePeer) {
|
||||||
console.log('[INFO] Requesting container stats...');
|
const now = Date.now();
|
||||||
sendCommand('stats', {}); // Adjust the command if specific arguments are needed
|
if (now - lastStatsUpdate >= 500) { // Ensure at least 500ms between updates
|
||||||
|
sendCommand('stats', {}); // Adjust command if necessary
|
||||||
|
lastStatsUpdate = now;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
console.warn('[WARN] No active peer; skipping stats request.');
|
console.warn('[WARN] No active peer; skipping stats request.');
|
||||||
}
|
}
|
||||||
}, 1000); // 1 second interval
|
}, 100); // Poll every 100ms for better reactivity
|
||||||
|
}
|
||||||
|
|
||||||
|
let smoothedStats = { cpu: 0, memory: 0 };
|
||||||
|
|
||||||
|
function smoothStats(newStats, smoothingFactor = 0.2) {
|
||||||
|
smoothedStats.cpu = smoothedStats.cpu * (1 - smoothingFactor) + newStats.cpu * smoothingFactor;
|
||||||
|
smoothedStats.memory = smoothedStats.memory * (1 - smoothingFactor) + newStats.memory * smoothingFactor;
|
||||||
|
return smoothedStats;
|
||||||
}
|
}
|
||||||
|
|
||||||
function refreshContainerStats() {
|
function refreshContainerStats() {
|
||||||
@ -346,6 +356,7 @@ function addConnection(topicHex) {
|
|||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
disconnectConnection(topicId, connectionItem);
|
disconnectConnection(topicId, connectionItem);
|
||||||
});
|
});
|
||||||
|
refreshContainerStats();
|
||||||
|
|
||||||
connectionList.appendChild(connectionItem);
|
connectionList.appendChild(connectionItem);
|
||||||
|
|
||||||
@ -769,31 +780,35 @@ function addActionListeners(row, container) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Function to update container statistics
|
function updateStatsUI(row, stats) {
|
||||||
function updateContainerStats(stats) {
|
requestIdleCallback(() => {
|
||||||
console.log(`[DEBUG] Updating stats for container ID: ${stats.id}, Topic ID: ${stats.topicId}`);
|
row.querySelector('.cpu').textContent = stats.cpu.toFixed(2) || '0.00';
|
||||||
|
row.querySelector('.memory').textContent = (stats.memory / (1024 * 1024)).toFixed(2) || '0.00';
|
||||||
|
row.querySelector('.ip-address').textContent = stats.ip || 'No IP Assigned';
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateContainerStats(stats) {
|
||||||
|
// console.log(`[DEBUG] Updating stats for container ID: ${stats.id}, Topic ID: ${stats.topicId}`);
|
||||||
|
|
||||||
// Ensure stats belong to the active connection
|
|
||||||
if (!window.activePeer || !connections[stats.topicId] || window.activePeer !== connections[stats.topicId].peer) {
|
if (!window.activePeer || !connections[stats.topicId] || window.activePeer !== connections[stats.topicId].peer) {
|
||||||
console.warn(`[WARN] Stats received for inactive or unknown connection. Skipping.`);
|
// console.warn(`[WARN] Stats received for inactive or unknown connection. Skipping.`);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Find the row for the container by its ID
|
|
||||||
const row = containerList.querySelector(`tr[data-container-id="${stats.id}"]`);
|
const row = containerList.querySelector(`tr[data-container-id="${stats.id}"]`);
|
||||||
if (!row) {
|
if (!row) {
|
||||||
console.warn(`[WARN] No matching row for container ID: ${stats.id}. Skipping stats update.`);
|
// console.warn(`[WARN] No matching row for container ID: ${stats.id}. Skipping stats update.`);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update the container statistics in the UI
|
// Use updateStatsUI for cleaner and optimized DOM updates
|
||||||
row.querySelector('.cpu').textContent = stats.cpu.toFixed(2) || '0.00';
|
updateStatsUI(row, stats);
|
||||||
row.querySelector('.memory').textContent = (stats.memory / (1024 * 1024)).toFixed(2) || '0.00';
|
|
||||||
row.querySelector('.ip-address').textContent = stats.ip || 'No IP Assigned';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Function to open the Duplicate Modal with container configurations
|
// Function to open the Duplicate Modal with container configurations
|
||||||
function openDuplicateModal(container) {
|
function openDuplicateModal(container) {
|
||||||
console.log(`[INFO] Opening Duplicate Modal for container: ${container.Id}`);
|
console.log(`[INFO] Opening Duplicate Modal for container: ${container.Id}`);
|
||||||
|
Loading…
Reference in New Issue
Block a user