예제 #1
0
 def test_unchanged_status_text(self):
     """Test that the text is correct."""
     scale = "count"
     metric1 = dict(type="metric_type",
                    name="Metric",
                    unit="units",
                    scale=scale,
                    recent_measurements=[
                        dict(count=dict(value=0, status="near_target_met")),
                        dict(count=dict(value=42, status="near_target_met"))
                    ])
     metric2 = dict(type="metric_type",
                    name="Metric",
                    unit="units",
                    scale=scale,
                    recent_measurements=[
                        dict(count=dict(value=5, status="target_met")),
                        dict(count=dict(value=10, status="target_not_met"))
                    ])
     metric_notification_data1 = MetricNotificationData(
         metric1, self.data_model, "status_long_unchanged")
     metric_notification_data2 = MetricNotificationData(
         metric2, self.data_model, "status_long_unchanged")
     notification = Notification(
         self.report,
         [metric_notification_data1, metric_notification_data2],
         "destination_uuid", {})
     text = build_notification_text(notification)
     self.assertEqual(
         "[Report 1](https://report1) has 2 metrics that are notable:\n\n"
         "* Metric has been yellow (near target met) for three weeks. Value: 42 units.\n"
         "* Metric has been red (target not met) for three weeks. Value: 10 units.\n",
         text)
예제 #2
0
 def setUp(self):
     """Set variables for the other testcases."""
     self.reason1 = "status_changed"
     self.data_model = dict(
         metrics=dict(metric_type=dict(name="type")),
         sources=dict(quality_time=dict(parameters=dict(status=dict(
             api_values={
                 "target met (green)": "target_met",
                 "target not met (red)": "target_not_met"
             })))),
     )
     self.report_url = "https://report1"
     self.report = dict(title="report_title", url=self.report_url)
     metric1 = self.create_metric("default metric 1")
     metric2 = self.create_metric("default metric 2")
     self.metric_notification_data1 = MetricNotificationData(
         metric1, self.data_model, self.reason1)
     self.metric_notification_data2 = MetricNotificationData(
         metric2, self.data_model, self.reason1)
     metrics1 = [
         self.metric_notification_data1, self.metric_notification_data2
     ]
     metric3 = self.create_metric("default metric 3")
     metric4 = self.create_metric("default metric 4")
     metric_notification_data3 = MetricNotificationData(
         metric3, self.data_model, self.reason1)
     metric_notification_data4 = MetricNotificationData(
         metric4, self.data_model, self.reason1)
     metrics2 = [metric_notification_data3, metric_notification_data4]
     self.notifications = [
         Notification(self.report, metrics1, "uuid1",
                      dict(webhook="https://url/1")),
         Notification(self.report, metrics2, "uuid2",
                      dict(webhook="https://url/2")),
     ]
예제 #3
0
 def get_notifications(
         self, json,
         most_recent_measurement_seen: str) -> List[Notification]:
     """Return the reports that have a webhook and metrics that require notifying."""
     notifications = []
     for report in json["reports"]:
         notable_metrics = []
         for subject in report["subjects"].values():
             for metric_uuid, metric in subject["metrics"].items():
                 notable = self.get_notification(
                     metric, metric_uuid, most_recent_measurement_seen)
                 if notable:
                     notable_metrics.append(
                         MetricNotificationData(metric, self.data_model,
                                                notable))
         if notable_metrics:
             for destination_uuid, destination in report.get(
                     "notification_destinations", {}).items():
                 notifications.append(
                     Notification(report, notable_metrics, destination_uuid,
                                  destination))
     return notifications
예제 #4
0
 def test_unknown_text(self):
     """Test that the text is correct."""
     metric1 = dict(
         type="metric_type",
         name="Metric",
         unit="units",
         scale="count",
         recent_measurements=[
             dict(count=dict(value=0, status="near_target_met")),
             dict(count=dict(value=None, status="unknown")),
         ],
     )
     metric_notification_data1 = MetricNotificationData(
         metric1, self.data_model, "status_changed")
     notification = Notification(self.report, [metric_notification_data1],
                                 "destination_uuid", {})
     text = build_notification_text(notification)
     self.assertEqual(
         "[Report 1](https://report1) has 1 metric that is notable:\n\n"
         "* Metric status is white (unknown), was yellow (near target met). Value is ? units, was 0 units.\n",
         text,
     )
예제 #5
0
 def test_unknown_status_without_recent_measurements(self):
     """Test that a metric without recent measurements works."""
     self.metric["recent_measurements"] = []
     new_status = MetricNotificationData(self.metric, self.data_model,
                                         "status_changed").new_metric_status
     self.assertEqual("white (unknown)", new_status)
예제 #6
0
 def test_unknown_status(self):
     """Test that a recent measurement without status works."""
     self.metric["recent_measurements"][-1]["count"]["status"] = None
     new_status = MetricNotificationData(self.metric, self.data_model,
                                         "status_changed").new_metric_status
     self.assertEqual("white (unknown)", new_status)
예제 #7
0
 def test_new_status(self):
     """Test that the new status is set correctly."""
     new_status = MetricNotificationData(self.metric, self.data_model,
                                         "status_changed").new_metric_status
     self.assertEqual("red (target not met)", new_status)