Ejemplo n.º 1
0
        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;
                }
            }
        }