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(); }