hunk.code_window:     }
     }
     loadData() {
       this.getAvailableEndpoints();
       this.getAssociatedEndpoints();
     }
  
hunk.labels: keep keep keep add keep keep keep keep
hunk.after_edit:     this.getTags();
  
hunk.file_path: app/portainer/components/associated-endpoints-selector/associatedEndpointsSelectorController.js
hunk.type: add
file: 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();
    }
  }
  