feat: Add RustFS artifact object store and migration tool
- 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.
This commit is contained in:
		@@ -0,0 +1,55 @@
 | 
			
		||||
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;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user