Some checks failed
		
		
	
	Docs CI / lint-and-preview (push) Has been cancelled
				
			- 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;
 | |
|     }
 | |
| }
 |