Skip to content

Commit

Permalink
Minor improvements (#45)
Browse files Browse the repository at this point in the history
  • Loading branch information
tonyredondo authored Oct 17, 2023
1 parent eab9358 commit 2d2b398
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 14 deletions.
2 changes: 1 addition & 1 deletion src/Directory.Build.props
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<Project>
<PropertyGroup>
<Version>0.1.9</Version>
<Version>0.1.10</Version>
<Authors>Tony Redondo, Grégory Léocadie</Authors>
<TargetFrameworks>net6.0;net7.0;net8.0</TargetFrameworks>
<ImplicitUsings>enable</ImplicitUsings>
Expand Down
22 changes: 16 additions & 6 deletions src/TimeItSharp.Common/Exporters/ConsoleExporter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -173,13 +173,23 @@ public void Export(TimeitResult results)
for (var i = 0; i < totalNum; i++)
{
var item = orderedMetricsData[i];
var itemResult = Utils.RemoveOutliers(item.Value, 3).ToList();
int? outliersCount = item.Value.Count - itemResult.Count;
if (outliersCount > (_options.Configuration.Count * 5) / 100)
var itemResult = new List<double>();
var metricsOutliers = new List<double>();
var metricsThreshold = 0.5d;
while (metricsThreshold < 3.0d)
{
itemResult = item.Value;
outliersCount = null;
itemResult = Utils.RemoveOutliers(item.Value, metricsThreshold).ToList();
metricsOutliers = item.Value.Where(d => !itemResult.Contains(d)).ToList();
var outliersPercent = ((double)metricsOutliers.Count / item.Value.Count) * 100;
if (outliersPercent < 20)
{
// outliers must be not more than 20% of the data
break;
}

metricsThreshold += 0.1;
}


var mMean = itemResult.Mean();
var mMedian = itemResult.Median();
Expand Down Expand Up @@ -211,7 +221,7 @@ public void Export(TimeitResult results)
Math.Round(mMax, 6).ToString(),
Math.Round(mP95, 6).ToString(),
Math.Round(mP90, 6).ToString(),
outliersCount?.ToString() ?? "N/A");
(metricsOutliers.Count == 0 ? "0" : metricsOutliers.Count + " {" + Math.Round(metricsThreshold, 2) + "}"));
}
}
else
Expand Down
29 changes: 23 additions & 6 deletions src/TimeItSharp.Common/ScenarioProcessor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -250,12 +250,12 @@ public void CleanScenario(Scenario scenario)
}

// Get outliers
List<double> newDurations = new List<double>();
List<double> outliers = new List<double>();
var newDurations = new List<double>();
var outliers = new List<double>();
var threshold = 0.5d;
var peakCount = 0;
int[] histogram = Array.Empty<int>();
Range<double>[] labels = Array.Empty<Range<double>>();
var histogram = Array.Empty<int>();
var labels = Array.Empty<Range<double>>();
var isBimodal = false;
while (threshold < 2.0d)
{
Expand Down Expand Up @@ -287,7 +287,23 @@ public void CleanScenario(Scenario scenario)
foreach (var key in metricsData.Keys)
{
var originalMetricsValue = metricsData[key];
var metricsValue = Utils.RemoveOutliers(originalMetricsValue, 3).ToList();
var metricsValue = new List<double>();
var metricsOutliers = new List<double>();
var metricsThreshold = 0.5d;
while (metricsThreshold < 3.0d)
{
metricsValue = Utils.RemoveOutliers(originalMetricsValue, metricsThreshold).ToList();
metricsOutliers = originalMetricsValue.Where(d => !metricsValue.Contains(d)).ToList();
var outliersPercent = ((double)metricsOutliers.Count / originalMetricsValue.Count) * 100;
if (outliersPercent < 20)
{
// outliers must be not more than 20% of the data
break;
}

metricsThreshold += 0.1;
}

metricsData[key] = metricsValue;
var mMean = metricsValue.Mean();
var mMedian = metricsValue.Median();
Expand All @@ -309,7 +325,8 @@ public void CleanScenario(Scenario scenario)
metricsStats[key + ".p99"] = mP99;
metricsStats[key + ".p95"] = mP95;
metricsStats[key + ".p90"] = mP90;
metricsStats[key + ".outliers"] = originalMetricsValue.Count - metricsValue.Count;
metricsStats[key + ".outliers"] = metricsOutliers.Count;
metricsStats[key + ".outliers_threshold"] = metricsThreshold;
}

var assertResponse = ScenarioAssertion(dataPoints);
Expand Down
2 changes: 1 addition & 1 deletion src/TimeItSharp.Common/Utils.cs
Original file line number Diff line number Diff line change
Expand Up @@ -234,7 +234,7 @@ public static double[][] GetComparisonTableData(IReadOnlyList<ScenarioResult> re
/// </summary>
/// <param name="defaultValue">The default value to return if the width cannot be determined. Default is 180.</param>
/// <returns>The width of the console buffer, or the default value if it cannot be determined.</returns>
public static int GetSafeWidth(int defaultValue = 200)
public static int GetSafeWidth(int defaultValue = 260)
{
try
{
Expand Down

0 comments on commit 2d2b398

Please sign in to comment.