ui/lib/shared/addon/mixins/container-spark-stats.js

132 lines
2.9 KiB
JavaScript

import { default as EmberObject, computed } from '@ember/object';
import { alias } from '@ember/object/computed';
import Mixin from '@ember/object/mixin';
const MAX_POINTS = 60;
export default Mixin.create({
sparkInstances: alias('model.instances'),
cpuData: null,
memoryData: null,
networkData: null,
storageData: null,
cpuMax: null,
memoryMax: null,
networkMax: null,
storageMax: null,
onDataPoint(point) {
var id = point.id;
var row, val;
// CPU
row = this.getOrCreateDataRow('cpu', id);
val = point.cpu_total || 0;
var max = point.cpu_count * 100;
if ( max > this.get('cpuMax') ) {
// CPU is special because it's a percentage..
this.set('cpuMax', max);
}
row.push(val);
row.splice(0, 1);
row.arrayContentDidChange();
// Memory
row = this.getOrCreateDataRow('memory', id);
val = point.mem_used_mb || 0;
if ( val > this.get('memoryMax') ) {
this.set('memoryMax', val);
}
row.push(val);
row.splice(0, 1);
row.arrayContentDidChange();
// Network
row = this.getOrCreateDataRow('network', id);
val = (point.net_rx_kb || 0) + (point.net_tx_kb || 0);
if ( val > this.get('networkMax') ) {
this.set('networkMax', val);
}
row.push(val);
row.splice(0, 1);
row.arrayContentDidChange();
// Storage
row = this.getOrCreateDataRow('storage', id);
val = (point.disk_read_kb || 0) + (point.disk_write_kb || 0);
if ( val > this.get('storageMax') ) {
this.set('storageMax', val);
}
row.push(val);
row.splice(0, 1);
row.arrayContentDidChange();
},
// for 1.2+
instancesByExternalId: computed('sparkInstances.@each.id', function() {
var out = EmberObject.create();
(this.get('sparkInstances') || []).forEach((instance) => {
let id = instance.get('externalId');
if ( id ) {
out.set(id, instance);
}
});
return out;
}),
// for 1.1
instancesById: computed('sparkInstances.@each.id', function() {
var out = EmberObject.create();
(this.get('sparkInstances') || []).forEach((instance) => {
let id = instance.get('id');
if ( id ) {
out.set(id, instance);
}
});
return out;
}),
getOrCreateDataRow(key, id) {
var data = this.get(`${ key }Data`);
if ( !data ) {
data = EmberObject.create();
this.set(`${ key }Max`, 0);
this.set(`${ key }Data`, data);
}
var row = data.get(id);
if ( !row ) {
row = [];
for ( var i = 0 ; i < MAX_POINTS ; i++ ) {
row.pushObject(0);
}
data.set(id, row);
}
var instance = this.get(`instancesByExternalId.${ id }`);
if ( !instance ) {
instance = this.get(`instancesById.${ id }`);
}
if ( instance && !instance.get(`${ key }Spark`) ) {
instance.set(`${ key }Spark`, row);
}
return row;
}
});