mirror of https://github.com/portainer/portainer
66 lines
1.6 KiB
JavaScript
66 lines
1.6 KiB
JavaScript
import _ from 'lodash-es';
|
|
|
|
/**
|
|
* NodesLimits Model
|
|
*/
|
|
export class KubernetesNodesLimits {
|
|
constructor(nodesLimits) {
|
|
this.MaxCPU = 0;
|
|
this.MaxMemory = 0;
|
|
this.nodesLimits = this.convertCPU(nodesLimits);
|
|
|
|
this.calculateMaxCPUMemory();
|
|
}
|
|
|
|
convertCPU(nodesLimits) {
|
|
_.forEach(nodesLimits, (value) => {
|
|
if (value.CPU) {
|
|
value.CPU /= 1000.0;
|
|
}
|
|
});
|
|
return nodesLimits;
|
|
}
|
|
|
|
calculateMaxCPUMemory() {
|
|
const nodesLimitsArray = Object.values(this.nodesLimits);
|
|
this.MaxCPU = _.maxBy(nodesLimitsArray, 'CPU').CPU;
|
|
this.MaxMemory = _.maxBy(nodesLimitsArray, 'Memory').Memory;
|
|
}
|
|
|
|
// check if there is enough cpu and memory to allocate containers in replica mode
|
|
overflowForReplica(cpu, memory, instances) {
|
|
_.forEach(this.nodesLimits, (value) => {
|
|
instances -= Math.min(Math.floor(value.CPU / cpu), Math.floor(value.Memory / memory));
|
|
});
|
|
|
|
return instances > 0;
|
|
}
|
|
|
|
// check if there is enough cpu and memory to allocate containers in global mode
|
|
overflowForGlobal(cpu, memory) {
|
|
let overflow = false;
|
|
|
|
_.forEach(this.nodesLimits, (value) => {
|
|
if (cpu > value.CPU || memory > value.Memory) {
|
|
overflow = true;
|
|
}
|
|
});
|
|
|
|
return overflow;
|
|
}
|
|
|
|
excludesPods(pods, cpuLimit, memoryLimit) {
|
|
const nodesLimits = this.nodesLimits;
|
|
|
|
_.forEach(pods, (value) => {
|
|
const node = value.Node;
|
|
if (node && nodesLimits[node]) {
|
|
nodesLimits[node].CPU += cpuLimit;
|
|
nodesLimits[node].Memory += memoryLimit;
|
|
}
|
|
});
|
|
|
|
this.calculateMaxCPUMemory();
|
|
}
|
|
}
|