- Implemented RustFsArtifactObjectStore for managing artifacts in RustFS. - Added unit tests for RustFsArtifactObjectStore functionality. - Created a RustFS migrator tool to transfer objects from S3 to RustFS. - Introduced policy preview and report models for API integration. - Added fixtures and tests for policy preview and report functionality. - Included necessary metadata and scripts for cache_pkg package.
		
			
				
	
	
		
			56 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using StellaOps.Bench.ScannerAnalyzers.Baseline;
 | 
						|
 | 
						|
namespace StellaOps.Bench.ScannerAnalyzers.Reporting;
 | 
						|
 | 
						|
internal sealed class BenchmarkScenarioReport
 | 
						|
{
 | 
						|
    private const double RegressionLimitDefault = 1.2d;
 | 
						|
 | 
						|
    public BenchmarkScenarioReport(ScenarioResult result, BaselineEntry? baseline, double? regressionLimit = null)
 | 
						|
    {
 | 
						|
        Result = result ?? throw new ArgumentNullException(nameof(result));
 | 
						|
        Baseline = baseline;
 | 
						|
        RegressionLimit = regressionLimit is { } limit && limit > 0 ? limit : RegressionLimitDefault;
 | 
						|
        MaxRegressionRatio = CalculateRatio(result.MaxMs, baseline?.MaxMs);
 | 
						|
        MeanRegressionRatio = CalculateRatio(result.MeanMs, baseline?.MeanMs);
 | 
						|
    }
 | 
						|
 | 
						|
    public ScenarioResult Result { get; }
 | 
						|
 | 
						|
    public BaselineEntry? Baseline { get; }
 | 
						|
 | 
						|
    public double RegressionLimit { get; }
 | 
						|
 | 
						|
    public double? MaxRegressionRatio { get; }
 | 
						|
 | 
						|
    public double? MeanRegressionRatio { get; }
 | 
						|
 | 
						|
    public bool RegressionBreached => MaxRegressionRatio.HasValue && MaxRegressionRatio.Value >= RegressionLimit;
 | 
						|
 | 
						|
    public string? BuildRegressionFailureMessage()
 | 
						|
    {
 | 
						|
        if (!RegressionBreached || MaxRegressionRatio is null)
 | 
						|
        {
 | 
						|
            return null;
 | 
						|
        }
 | 
						|
 | 
						|
        var percentage = (MaxRegressionRatio.Value - 1d) * 100d;
 | 
						|
        return $"{Result.Id} exceeded regression budget: max {Result.MaxMs:F2} ms vs baseline {Baseline!.MaxMs:F2} ms (+{percentage:F1}%)";
 | 
						|
    }
 | 
						|
 | 
						|
    private static double? CalculateRatio(double current, double? baseline)
 | 
						|
    {
 | 
						|
        if (!baseline.HasValue)
 | 
						|
        {
 | 
						|
            return null;
 | 
						|
        }
 | 
						|
 | 
						|
        if (baseline.Value <= 0d)
 | 
						|
        {
 | 
						|
            return null;
 | 
						|
        }
 | 
						|
 | 
						|
        return current / baseline.Value;
 | 
						|
    }
 | 
						|
}
 |