open-nomad/ui/app/utils/classes/node-stats-tracker.js
Buck Doyle 89136cbf6a Add massaged results of class codemod
Manual interventions:
• decorators on the same line for service and controller
  injections and most computed property macros
• preserving import order when possible, both per-line
  and intra-line
• moving new imports to the bottom
• removal of classic decorator for trivial cases
• conversion of init to constructor when appropriate
2020-06-10 16:18:42 -05:00

77 lines
1.9 KiB
JavaScript

import EmberObject, { computed } from '@ember/object';
import { alias } from '@ember/object/computed';
import RollingArray from 'nomad-ui/utils/classes/rolling-array';
import AbstractStatsTracker from 'nomad-ui/utils/classes/abstract-stats-tracker';
import classic from 'ember-classic-decorator';
const percent = (numerator, denominator) => {
if (!numerator || !denominator) {
return 0;
}
return numerator / denominator;
};
const empty = ts => ({ timestamp: ts, used: null, percent: null });
@classic
class NodeStatsTracker extends EmberObject.extend(AbstractStatsTracker) {
// Set via the stats computed property macro
node = null;
@computed('node')
get url() {
return `/v1/client/stats?node_id=${this.get('node.id')}`;
}
append(frame) {
const timestamp = new Date(Math.floor(frame.Timestamp / 1000000));
const cpuUsed = Math.floor(frame.CPUTicksConsumed) || 0;
this.cpu.pushObject({
timestamp,
used: cpuUsed,
percent: percent(cpuUsed, this.reservedCPU),
});
const memoryUsed = frame.Memory.Used;
this.memory.pushObject({
timestamp,
used: memoryUsed,
percent: percent(memoryUsed / 1024 / 1024, this.reservedMemory),
});
}
pause() {
const ts = new Date();
this.memory.pushObject(empty(ts));
this.cpu.pushObject(empty(ts));
}
// Static figures, denominators for stats
@alias('node.resources.cpu') reservedCPU;
@alias('node.resources.memory') reservedMemory;
// Dynamic figures, collected over time
// []{ timestamp: Date, used: Number, percent: Number }
@computed('node')
get cpu() {
return RollingArray(this.bufferSize);
}
@computed('node')
get memory() {
return RollingArray(this.bufferSize);
}
}
export default NodeStatsTracker;
export function stats(nodeProp, fetch) {
return computed(nodeProp, function() {
return NodeStatsTracker.create({
fetch: fetch.call(this),
node: this.get(nodeProp),
});
});
}