UNPKG

nsolid-manager

Version:

A manager that sets up and runs N|Solid for you

93 lines (75 loc) 2.63 kB
var d3 = require('d3') var createGraph = require('../graph-cache') var GB = 1024 * 1024 * 1024 // create a width * height 2d array function zero (out) { for (var i = 0; i < out.length; i++) { var row = out[i] for (var j = 0; j < row.length; j++) { out[i][j] = 0 } } return out } function computeCPUSpectrogram (application, width, height) { var appGraph = createGraph({type: 'app', id: application.id}) appGraph.grid('CPUSpectrogram', width, height, function buildCPUSpectrogram (graph) { var processes = application.processes // input ranges var min = 0 var max = 100 var data = d3.layout.histogram() .frequency(false) .bins(d3.range(min, max, max / height).concat(max)) .value(p => p.cpu)(processes) // update columns var insert = data.map(d => d.y) graph.push(insert) graph.shift() return insert }) } function computeRSSSpectrogram (application, width, height) { var appGraph = createGraph({type: 'app', id: application.id}) appGraph.grid('RSSSpectrogram', width, height, function buildRSSSpectrogram (graph) { var processes = application.processes var totalRSS = Math.max(d3.sum(processes, p => p.memory.rss), GB) // input ranges var min = 0 var max = 1 var data = d3.layout.histogram() .frequency(false) .bins(d3.range(min, max, max / height).concat(max)) .value(p => p.memory.rss / totalRSS)(processes) // update columns var insert = data.map(d => d.y) graph.push(insert) graph.shift() return insert }) } function computeSpiffygram (application, width, height) { var appGraph = createGraph({type: 'app', id: application.id}) appGraph.grid('spiffygram', width, height, function buildSpiffygraom (grid) { // since the spiffygram computation is additive, reset // all of the grid cells to 0 befor processing zero(grid) var processes = application.processes var totalRSS = Math.max(d3.sum(processes, p => p.memory.rss), GB) var incrementor = 1 / processes.length processes.forEach(function (g) { var Xratio = Math.min(g.cpu / 100, 0.99) var Yratio = Math.min(g.memory.rss / totalRSS, 0.99) var x = Math.floor(Xratio * width) // flip the Y-Axis so small values are on the bottom var y = (height - 1) - Math.floor(Yratio * height) var gridX = grid[x] if (gridX && y < gridX.length) { gridX[y] += incrementor } }) }) } exports.computeRSSSpectrogram = computeRSSSpectrogram exports.computeCPUSpectrogram = computeCPUSpectrogram exports.computeSpiffygram = computeSpiffygram