Exemple #1
0
def insert_new_measurement(database: Database, data_model, metric_data: dict,
                           measurement: dict,
                           previous_measurement: dict) -> dict:
    """Insert a new measurement."""
    if "_id" in measurement:
        del measurement["_id"]
    metric = Metric(data_model, metric_data)
    metric_type = data_model["metrics"][metric.type()]
    measurement["start"] = measurement["end"] = now = iso_timestamp()
    for scale in metric_type["scales"]:
        value = calculate_measurement_value(data_model, metric,
                                            measurement["sources"], scale)
        status = metric.status(value)
        measurement[scale] = dict(value=value,
                                  status=status,
                                  direction=metric.direction())
        # We can't cover determine_status_start() returning False in the feature tests because all new measurements have
        # a status start timestamp, hence the pragma: no cover-behave:
        if status_start := determine_status_start(
                status, previous_measurement, scale,
                now):  # pragma: no cover-behave
            measurement[scale]["status_start"] = status_start
        for target in ("target", "near_target", "debt_target"):
            target_type = cast(TargetType, target)
            measurement[scale][target] = determine_target_value(
                metric, measurement, scale, target_type)
Exemple #2
0
 def test_green_with_debt(self):
     """Test a measurement with debt, better than the target."""
     metric = Metric(
         self.data_model,
         dict(type="metric_type",
              target="20",
              near_target="25",
              debt_target="30",
              accept_debt=True))
     self.assertEqual("target_met", metric.status("15"))
Exemple #3
0
 def test_debt_not_met(self):
     """Test a measurement worse than the accepted debt."""
     metric = Metric(
         self.data_model,
         dict(type="metric_type",
              target="20",
              near_target="25",
              debt_target="30",
              accept_debt=True))
     self.assertEqual("target_not_met", metric.status("35"))
Exemple #4
0
 def test_debt_end_date_removed(self):
     """Test a measurement with the technical end date reset."""
     metric = Metric(
         self.data_model,
         dict(type="metric_type",
              target="20",
              near_target="25",
              debt_target="30",
              accept_debt=True,
              debt_end_date=""),
     )
     self.assertEqual("debt_target_met", metric.status("29"))
Exemple #5
0
 def test_debt_past_end_date(self):
     """Test a measurement with expired debt."""
     metric = Metric(
         self.data_model,
         dict(
             type="metric_type",
             target="20",
             near_target="25",
             debt_target="30",
             accept_debt=True,
             debt_end_date="2019-06-10",
         ),
     )
     self.assertEqual("target_not_met", metric.status("29"))
Exemple #6
0
 def test_near_target_worse_than_target(self):
     """Test that the measurement is red when the near target is worse than the target."""
     metric = Metric(
         self.data_model,
         dict(type="metric_type", target="20", near_target="15"))
     self.assertEqual("target_met", metric.status("17"))
Exemple #7
0
 def test_red(self):
     """Test a red measurement."""
     metric = Metric(
         self.data_model,
         dict(type="metric_type", target="20", near_target="25"))
     self.assertEqual("target_not_met", metric.status("30"))
Exemple #8
0
 def test_yellow(self):
     """Test a yellow measurement."""
     metric = Metric(
         self.data_model,
         dict(type="metric_type", target="20", near_target="25"))
     self.assertEqual("near_target_met", metric.status("22"))
Exemple #9
0
 def test_green(self):
     """Test a green measurement."""
     metric = Metric(
         self.data_model,
         dict(type="metric_type", target="20", near_target="15"))
     self.assertEqual("target_met", metric.status("10"))