Exemplo n.º 1
0
        internal static void ShutDown(ILogger log, List <WorkloadMachineTuple> totalWorkload, BBBAPI bbb, IonosAPI ionos, string ionosDataCenter)
        {
            var shutDown = totalWorkload
                           .OrderByDescending(m => m.Workload.MemoryUtilization)
                           .ThenByDescending(m => m.Workload.CPUUtilization)
                           .Skip(MINIMUM_ACTIVE_MACHINES)
                           .Select(async m => new MachineWorkloadStatsTuple(m.Machine, m.Workload, await bbb.GetMeetingsAsync(m.Machine.PrimaryIP).ConfigureAwait(false)))
                           .Select(res => res.Result)
                           .Where(m => (m.Workload.MemoryUtilization < MIN_ALLOWED_MEMORY_WORKLOAD ||
                                        m.Workload.CPUUtilization < MIN_ALLOWED_CPU_WORKLOAD) && m.Machine.Properties.Cores <= DEFAULT_WORKER_CPU &&
                                  m.Machine.Properties.Ram <= DEFAULT_WORKER_MEMORY && m.Stats.Sum(u => u.ParticipantCount) == 0).ToList();

            log.LogInformation($"Found '{shutDown.Count}' machines to shut down");
            shutDown.AsParallel().ForAll(async m => await ionos.TurnMachineOff(m.Machine.Id, ionosDataCenter).ConfigureAwait(false));
        }
Exemplo n.º 2
0
        internal static void ScaleCPUDown(ILogger log, List <WorkloadMachineTuple> totalWorkload, BBBAPI bbb, IonosAPI ionos)
        {
            var scaleCpuDown = totalWorkload.OrderByDescending(m => m.Workload.CPUUtilization)
                               .Select(async m => new MachineWorkloadStatsTuple(m.DataCenter, m.Machine, m.Workload, await bbb.GetMeetingsAsync(m.Machine.PrimaryIP).ConfigureAwait(false)))
                               .Select(res => res.Result)
                               .Where(m => m.Workload.CPUUtilization <MIN_ALLOWED_CPU_WORKLOAD &&
                                                                      m.Machine.Properties.Cores> DEFAULT_WORKER_CPU && m.Stats.Sum(u => u.ParticipantCount) == 0).ToList();

            log.LogInformation($"Found '{scaleCpuDown.Count}' machines to scale CPU down");
            scaleCpuDown.AsParallel().ForAll(async m =>
            {
                var machine = m.Machine;
                log.LogInformation($"Scale machine '{machine.PrimaryIP}' down");
                var update = new IonosMachineUpdate {
                    Cores = machine.Properties.Cores - 1
                };
                await ionos.UpdateMachines(machine.Id, m.DataCenter, update).ConfigureAwait(false);
            });
        }