diff --git a/app.js b/app.js index f2f1217..7e464f3 100644 --- a/app.js +++ b/app.js @@ -54,7 +54,7 @@ var createChart = function (ctx, dataset) { }); }; -var addTimestamp = function(point) { +var addTimestamp = function (point) { return point.timestamp; }; @@ -102,40 +102,60 @@ socket.on('start', function (data) { data[defaultSpan].responses.pop(); data[defaultSpan].os.pop(); - cpuStat.textContent = data[defaultSpan].os[data[defaultSpan].os.length - 1].cpu.toFixed(1) + '%'; + var lastOsMetric = data[defaultSpan].os[data[defaultSpan].os.length - 1]; + + cpuStat.textContent = '0.0%'; + if (lastOsMetric) { + cpuStat.textContent = lastOsMetric.cpu.toFixed(1) + '%'; + } + cpuChart.data.datasets[0].data = data[defaultSpan].os.map(function (point) { return point.cpu; }); cpuChart.data.labels = data[defaultSpan].os.map(addTimestamp); - memStat.textContent = data[defaultSpan].os[data[defaultSpan].os.length - 1].memory.toFixed(1) + 'MB'; + memStat.textContent = '0.0MB'; + if (lastOsMetric) { + memStat.textContent = lastOsMetric.memory.toFixed(1) + 'MB'; + } + memChart.data.datasets[0].data = data[defaultSpan].os.map(function (point) { return point.memory; }); memChart.data.labels = data[defaultSpan].os.map(addTimestamp); - loadStat.textContent = data[defaultSpan].os[data[defaultSpan].os.length - 1].load[defaultSpan].toFixed(2); + loadStat.textContent = '0.00'; + if (lastOsMetric) { + loadStat.textContent = lastOsMetric.load[defaultSpan].toFixed(2); + } + loadChart.data.datasets[0].data = data[defaultSpan].os.map(function (point) { return point.load[0]; }); loadChart.data.labels = data[defaultSpan].os.map(addTimestamp); - responseTimeStat.textContent = data[defaultSpan].responses[data[defaultSpan].responses.length - 1].mean.toFixed(2) + 'ms'; + var lastResponseMetric = data[defaultSpan].responses[data[defaultSpan].responses.length - 1]; + + responseTimeStat.textContent = '0.00ms'; + if (lastResponseMetric) { + responseTimeStat.textContent = lastResponseMetric.mean.toFixed(2) + 'ms'; + } + responseTimeChart.data.datasets[0].data = data[defaultSpan].responses.map(function (point) { return point.mean; }); responseTimeChart.data.labels = data[defaultSpan].responses.map(addTimestamp); if (data[defaultSpan].responses.length >= 2) { - var deltaTime = data[defaultSpan].responses[data[defaultSpan].responses.length - 1].timestamp - data[defaultSpan].responses[data[defaultSpan].responses.length - 2].timestamp; - rpsStat.textContent = (data[defaultSpan].responses[data[defaultSpan].responses.length - 1].count / deltaTime * 1000).toFixed(2); + var deltaTime = lastResponseMetric.timestamp - data[defaultSpan].responses[data[defaultSpan].responses.length - 2].timestamp; + rpsStat.textContent = (lastResponseMetric.count / deltaTime * 1000).toFixed(2); rpsChart.data.datasets[0].data = data[defaultSpan].responses.map(function (point) { return point.count / deltaTime * 1000; }); rpsChart.data.labels = data[defaultSpan].responses.map(addTimestamp); } - charts.forEach(function(chart) { + charts.forEach(function (chart) { chart.update(); }); @@ -160,26 +180,44 @@ socket.on('start', function (data) { socket.on('stats', function (data) { if (data.retention === spans[defaultSpan].retention && data.interval === spans[defaultSpan].interval) { - cpuStat.textContent = data.os.cpu.toFixed(1) + '%'; - cpuChart.data.datasets[0].data.push(data.os.cpu); - cpuChart.data.labels.push(data.os.timestamp); - - memStat.textContent = data.os.memory.toFixed(1) + 'MB'; - memChart.data.datasets[0].data.push(data.os.memory); - memChart.data.labels.push(data.os.timestamp); - - loadStat.textContent = data.os.load[0].toFixed(2); - loadChart.data.datasets[0].data.push(data.os.load[0]); - loadChart.data.labels.push(data.os.timestamp); - - responseTimeStat.textContent = data.responses.mean.toFixed(2) + 'ms'; - responseTimeChart.data.datasets[0].data.push(data.responses.mean); - responseTimeChart.data.labels.push(data.responses.timestamp); - - var deltaTime = data.responses.timestamp - rpsChart.data.labels[rpsChart.data.labels.length - 1]; - rpsStat.textContent = (data.responses.count / deltaTime * 1000).toFixed(2); - rpsChart.data.datasets[0].data.push(data.responses.count / deltaTime * 1000); - rpsChart.data.labels.push(data.responses.timestamp); + var os = data.os; + + cpuStat.textContent = '0.0%'; + if (os) { + cpuStat.textContent = os.cpu.toFixed(1) + '%'; + cpuChart.data.datasets[0].data.push(os.cpu); + cpuChart.data.labels.push(os.timestamp); + } + + memStat.textContent = '0.0MB'; + if (os) { + memStat.textContent = os.memory.toFixed(1) + 'MB'; + memChart.data.datasets[0].data.push(os.memory); + memChart.data.labels.push(os.timestamp); + } + + loadStat.textContent = '0'; + if (os) { + loadStat.textContent = os.load[0].toFixed(2); + loadChart.data.datasets[0].data.push(os.load[0]); + loadChart.data.labels.push(os.timestamp); + } + + var responses = data.responses; + + responseTimeStat.textContent = '0.00ms'; + if (responses) { + responseTimeStat.textContent = responses.mean.toFixed(2) + 'ms'; + responseTimeChart.data.datasets[0].data.push(responses.mean); + responseTimeChart.data.labels.push(responses.timestamp); + } + + if (responses) { + var deltaTime = responses.timestamp - rpsChart.data.labels[rpsChart.data.labels.length - 1]; + rpsStat.textContent = (responses.count / deltaTime * 1000).toFixed(2); + rpsChart.data.datasets[0].data.push(responses.count / deltaTime * 1000); + rpsChart.data.labels.push(responses.timestamp); + } charts.forEach(function (chart) { if (spans[defaultSpan].retention < chart.data.labels.length) {