public static void LogIncrementalAnalyzerProcessorStatistics(int correlationId, Solution solution, LogAggregator logAggregator, ImmutableArray <IIncrementalAnalyzer> analyzers) { Logger.Log(FunctionId.IncrementalAnalyzerProcessor_Shutdown, KeyValueLogMessage.Create(m => { var solutionHash = GetSolutionHash(solution); m[Id] = correlationId; m[SolutionHash] = solutionHash.ToString(); var statMap = new Dictionary <string, List <int> >(); foreach (var kv in logAggregator) { if (kv.Key is string) { m[kv.Key.ToString()] = kv.Value.GetCount(); continue; } if (kv.Key is ValueTuple <string, Guid> ) { var tuple = (ValueTuple <string, Guid>)kv.Key; var list = statMap.GetOrAdd(tuple.Item1, _ => new List <int>()); list.Add(kv.Value.GetCount()); continue; } throw ExceptionUtilities.Unreachable; } foreach (var kv in statMap) { var key = kv.Key.ToString(); var result = LogAggregator.GetStatistics(kv.Value); m[CreateProperty(key, Max)] = result.Maximum; m[CreateProperty(key, Min)] = result.Minimum; m[CreateProperty(key, Median)] = result.Median; m[CreateProperty(key, Mean)] = result.Mean; m[CreateProperty(key, Mode)] = result.Mode; m[CreateProperty(key, Range)] = result.Range; m[CreateProperty(key, Count)] = result.Count; } })); foreach (var analyzer in analyzers) { var diagIncrementalAnalyzer = analyzer as DiagnosticIncrementalAnalyzer; if (diagIncrementalAnalyzer != null) { diagIncrementalAnalyzer.LogAnalyzerCountSummary(); break; } } }
public static void LogIncrementalAnalyzerProcessorStatistics(int correlationId, Solution solution, LogAggregator logAggregator, ImmutableArray <IIncrementalAnalyzer> analyzers) { Logger.Log(FunctionId.IncrementalAnalyzerProcessor_Shutdown, KeyValueLogMessage.Create(m => { var solutionHash = GetSolutionHash(solution); m[Id] = correlationId; m[SolutionHash] = solutionHash.ToString(); var statMap = new Dictionary <string, List <int> >(); foreach (var(key, counter) in logAggregator) { if (key is string stringKey) { m[stringKey] = counter.GetCount(); continue; } if (key is ValueTuple <string, Guid> propertyNameAndId) { var list = statMap.GetOrAdd(propertyNameAndId.Item1, _ => new List <int>()); list.Add(counter.GetCount()); continue; } throw ExceptionUtilities.Unreachable; } foreach (var(propertyName, propertyValues) in statMap) { var result = LogAggregator.GetStatistics(propertyValues); m[CreateProperty(propertyName, Max)] = result.Maximum; m[CreateProperty(propertyName, Min)] = result.Minimum; m[CreateProperty(propertyName, Median)] = result.Median.Value; m[CreateProperty(propertyName, Mean)] = result.Mean; m[CreateProperty(propertyName, Mode)] = result.Mode.Value; m[CreateProperty(propertyName, Range)] = result.Range; m[CreateProperty(propertyName, Count)] = result.Count; } })); foreach (var analyzer in analyzers) { if (analyzer is DiagnosticIncrementalAnalyzer diagIncrementalAnalyzer) { diagIncrementalAnalyzer.LogAnalyzerCountSummary(); break; } } }