Imported Upstream version 6.6.0.89

Former-commit-id: b39a328747c2f3414dc52e009fb6f0aa80ca2492
This commit is contained in:
Xamarin Public Jenkins (auto-signing)
2019-09-24 08:53:40 +00:00
parent cf815e07e0
commit 95fdb59ea6
2556 changed files with 138145 additions and 47453 deletions

View File

@@ -0,0 +1,33 @@
using System.Collections.Generic;
namespace Mono.Documentation.Updater.Statistics
{
/// <summary>
/// The class stores statistics for different frameworks
/// </summary>
public class StatisticsCollector
{
/// <summary>
/// Collected statistics for each framework
/// </summary>
public Dictionary<string, StatisticsStorage> Storages { get; } =
new Dictionary<string, StatisticsStorage>();
/// <summary>
/// Change metric value for the item
/// </summary>
/// <param name="framework">The framework name which statistics is being collected</param>
/// <param name="item">The item which metrics value is changing</param>
/// <param name="metrics">The metrics which value is changing</param>
/// <param name="delta">The value by which the metrics value should be changed</param>
public void AddMetric(string framework, StatisticsItem item, StatisticsMetrics metrics, int delta = 1)
{
if (!Storages.ContainsKey(framework))
{
Storages[framework] = new StatisticsStorage();
}
Storages[framework].AddMetric(item, metrics, delta);
}
}
}

View File

@@ -0,0 +1,31 @@
using System.Collections.Generic;
using System.Text;
namespace Mono.Documentation.Updater.Statistics
{
public static class StatisticsFormatter
{
public static string Format(Dictionary<string, StatisticsStorage> input)
{
var result = new StringBuilder();
foreach (var statisticsStoragePair in input)
{
var framework = statisticsStoragePair.Key;
var statisticsStorage = statisticsStoragePair.Value;
result.AppendLine($"Framework: {framework}");
result.AppendLine("--------");
foreach (var statistics in statisticsStorage.Values)
{
var staticsItem = statistics.Key;
foreach (var statisticsValuePair in statistics.Value)
{
result.AppendLine($"{staticsItem} {statisticsValuePair.Key}: {statisticsValuePair.Value}");
}
result.AppendLine();
}
}
return result.ToString();
}
}
}

View File

@@ -0,0 +1,9 @@
namespace Mono.Documentation.Updater.Statistics
{
public enum StatisticsItem
{
Types,
Namespaces,
Members
}
}

View File

@@ -0,0 +1,9 @@
namespace Mono.Documentation.Updater.Statistics
{
public enum StatisticsMetrics
{
Added,
Removed,
Total
}
}

View File

@@ -0,0 +1,23 @@
using System;
using System.IO;
namespace Mono.Documentation.Updater.Statistics
{
public static class StatisticsSaver
{
private const string DefaltStatisticsFileName = "statistics.txt";
/// <summary>
/// Save statistics to the file
/// </summary>
/// <param name="statisticsCollector">Statistics values which should be saved</param>
/// <param name="statisticsFilePath">Path to the file where statistics should be saved</param>
public static void Save(StatisticsCollector statisticsCollector, string statisticsFilePath)
{
if (Directory.Exists(statisticsFilePath))
statisticsFilePath = Path.Combine(statisticsFilePath, DefaltStatisticsFileName);
File.WriteAllText(statisticsFilePath, StatisticsFormatter.Format(statisticsCollector.Storages));
Console.WriteLine($"Statistics saved to {statisticsFilePath}");
}
}
}

View File

@@ -0,0 +1,30 @@
using System;
using System.Collections.Generic;
namespace Mono.Documentation.Updater.Statistics
{
/// <summary>
/// The class stores statistics: int value for each StatisticsItem-StatisticsMetrics pair
/// </summary>
public class StatisticsStorage
{
public Dictionary<StatisticsItem, Dictionary<StatisticsMetrics, int>> Values { get; } = new Dictionary<StatisticsItem, Dictionary<StatisticsMetrics, int>>();
public StatisticsStorage()
{
foreach (var statisticsItem in Enum.GetValues(typeof(StatisticsItem)))
{
var metrics = Values[(StatisticsItem)statisticsItem] = new Dictionary<StatisticsMetrics, int>();
foreach (var statisticsMetrics in Enum.GetValues(typeof(StatisticsMetrics)))
{
metrics[(StatisticsMetrics) statisticsMetrics] = 0;
}
}
}
public void AddMetric(StatisticsItem item, StatisticsMetrics metrics, int delta = 1)
{
Values[item][metrics] += delta;
}
}
}