Exemplo n.º 1
0
        public void Start()
        {
            reportService.Initialize(servers.Select(s => s.Id));

            foreach (var @event in events)
            {
                Logger.LogMessage($"Simualtion step {@event.Id} (t={@event.Time})");
                var newVMs = AdvanceSimulation(@event);

                Prognose(@event.Id);

                DiagnoseAndMigrateIfNeeded(diagnosticService.DetectOverloadedMachines, migrationManager.MigrateFromOverloaded);

                if (newVMs.Count() > 0)
                {
                    // assign new VMs
                    var result = vmAsigner.Asign(newVMs, servers);
                    VMs.Add(result.Asigned);
                }

                // TODO: should we used prgnoses for releasing too?
                DiagnoseAndMigrateIfNeeded(diagnosticService.DetectLowloadedMachines, migrationManager.ReleaseLowloadedMachines);

                WriteServerStatistics(@event.Id);
            }

            SaveResults();
        }