public void RebuildSince(DateTime? since, Action<string> reportProgress) { try { var buildStatuses = _sosDb.ReadAll(); var sortedBuildStatuses = buildStatuses .Where(buildStatus => since == null || buildStatus.StartedTime > since) .OrderByDescending(buildStatus => buildStatus.LocalStartTime) .ToList(); var totalBuilds = sortedBuildStatuses.Count; var rulesEngine = new RulesEngine(_settings) { DisableSosOnline = true, DisableWritingToSosDb = true }; int i = 0; foreach (var buildStatus in sortedBuildStatuses) { rulesEngine.ExecuteNewBuilds(new List<BuildStatus> {buildStatus}); if (i%10 == 0) { reportProgress(string.Format("Processing {0}/{1}", i, totalBuilds)); } i++; } _settings.Save(); reportProgress("Completed reset successfully"); } catch (Exception ex) { _log.Error("Error in sync", ex); reportProgress("Error, check the logs. " + ex.Message); } }