/// <summary>Competition metric limit checks and adjustments.</summary> /// <param name="summary">Summary for the run.</param> /// <returns>Enumerable with warnings for the benchmarks.</returns> public IEnumerable <Conclusion> Analyse([NotNull] Summary summary) { var analysis = new CompetitionAnalysis(Id, summary); if (analysis.SafeToContinue && analysis.RunState.IsFirstRun) { PrepareTargets(analysis); PreparePreviousRunLog(analysis); CheckPrepairedTargets(analysis); } if (analysis.SafeToContinue) { bool checkPassed = CheckTargets(analysis); CompleteCheckTargets(analysis, checkPassed); } if (analysis.RunState.LooksLikeLastRun) { if (analysis.Options.Annotations.LogAnnotations || analysis.Targets.HasUnsavedChanges || !analysis.SafeToContinue) { XmlAnnotationStorage.LogXmlAnnotationDoc(analysis.Targets, analysis); } } return(analysis.Conclusions.ToArray()); }
private static void PreparePreviousRunLog(CompetitionAnalysis analysis) { if (!analysis.SafeToContinue) { return; } var logUri = analysis.Options.Annotations.PreviousRunLogUri; if (string.IsNullOrEmpty(logUri)) { return; } var xmlAnnotationDocs = XmlAnnotationStorage.ReadXmlAnnotationDocsFromLog(logUri, analysis); if (xmlAnnotationDocs.Length == 0 && analysis.SafeToContinue) { analysis.WriteWarningMessage($"No XML annotation documents in the log '{logUri}'."); } if (xmlAnnotationDocs.Length == 0 || !analysis.SafeToContinue) { return; } // ReSharper disable once ConvertIfStatementToConditionalTernaryExpression if (XmlAnnotationStorage.TryFillCompetitionTargetsFromLog( analysis.Targets, xmlAnnotationDocs, analysis)) { analysis.WriteInfoMessage($"Competition metric limits were updated from log file '{logUri}'."); } else if (analysis.SafeToContinue) { analysis.WriteInfoMessage($"Competition metric limits do not require update. Log file: '{logUri}'."); } }