def test_failing_metrics(): start_time = datetime(year=2017, month=12, day=11, hour=8) run1 = PipelineRun( start_time=start_time, end_time=start_time + timedelta(minutes=10), stage_results=[StageRun(StageStatus.ok)], ) run2 = PipelineRun( start_time=start_time + timedelta(minutes=10), end_time=start_time + timedelta(minutes=20), stage_results=[StageRun(StageStatus.fail)], ) run3 = PipelineRun( start_time=start_time + timedelta(minutes=20), end_time=start_time + timedelta(minutes=30), stage_results=[StageRun(StageStatus.ok)], ) runs = [run1, run2, run3] metrics = pipeline_metrics(runs) assert metrics.pipeline_lead_time == timedelta(minutes=10) assert metrics.pipeline_failure_rate == pytest.approx(0.333, 0.01) assert metrics.pipeline_interval == timedelta(minutes=20) assert metrics.pipeline_recovery_time == timedelta(minutes=10)
def test_release_candidate_metrics_ignore_nights(): start_time = datetime(year=2018, month=6, day=14, hour=17, minute=50) run1 = PipelineRun( start_time=start_time, end_time=start_time + timedelta(minutes=10), stage_results=[StageRun(StageStatus.ok)], ) run2 = PipelineRun( start_time=start_time + timedelta(minutes=10), end_time=start_time + timedelta(minutes=20), stage_results=[StageRun(StageStatus.fail)], ) run3 = PipelineRun( start_time=start_time + timedelta(hours=14, minutes=20), end_time=start_time + timedelta(hours=14, minutes=30), stage_results=[StageRun(StageStatus.ok)], ) runs = [run1, run2, run3] metrics = pipeline_metrics(runs) assert metrics.pipeline_lead_time == timedelta(minutes=10) assert metrics.pipeline_failure_rate == pytest.approx(0.333, 0.01) assert metrics.pipeline_interval == timedelta(minutes=20) assert metrics.pipeline_recovery_time == timedelta(minutes=10)
def test_deploy_metrics(): start_time = datetime(year=2017, month=12, day=11, hour=8) run1 = PipelineRun(start_time=start_time, end_time=start_time + timedelta(minutes=10), stage_results=[StageRun(StageStatus.ok)], deploy_time=start_time + timedelta(minutes=11)) run2 = PipelineRun( start_time=start_time + timedelta(minutes=10), end_time=start_time + timedelta(minutes=20), stage_results=[StageRun(StageStatus.fail)], ) run3 = PipelineRun(start_time=start_time + timedelta(minutes=20), end_time=start_time + timedelta(minutes=30), stage_results=[StageRun(StageStatus.ok)], deploy_time=start_time + timedelta(minutes=31)) runs = [run1, run2, run3] calculator = MetricsCalculator(runs) metrics = calculator.metrics() assert metrics.deployment_lead_time == timedelta(minutes=11) assert metrics.deployment_failure_rate == 0 assert metrics.deployment_interval == timedelta(minutes=20) assert metrics.deployment_recovery_time == None assert len(calculator.deploys) == 2