// THIS SHOULD EVENTUALLY GO AWAY WHEN I DON'T HAVE TO SEND BUS MESSAGES TO ALERTS
  public Map<String, Object> toMessageBusObject() {
    if (tenantId == null) {
      throw new IllegalStateException("Do not know the tenant ID");
    }

    List<SingleMetric> singleMetrics = new ArrayList<>();

    Map<String, List<Map<String, Object>>> gaugesAndCounters =
        metricsOnlyMetricPayloadBuilder.toObjectPayload();

    // list of maps where map is keyed on metric ID ("id") and value is "data"
    // where "data" is another List<Map<String, Number>> that is the list of metric data.
    // That inner map is keyed on either "timestamp" or "value" (both are Numbers).
    List<Map<String, Object>> allMetrics = gaugesAndCounters.get("gaugeMetrics");
    if (allMetrics != null) {
      for (Map<String, Object> metric : allMetrics) {
        String metricId = (String) metric.get("id");
        List<Map<String, Number>> metricListData = (List<Map<String, Number>>) metric.get("data");
        for (Map<String, Number> singleMetricData : metricListData) {
          long timestamp = singleMetricData.get("timestamp").longValue();
          double value = singleMetricData.get("value").doubleValue();
          singleMetrics.add(new SingleMetric(metricId, timestamp, value));
        }
      }
    }

    allMetrics = gaugesAndCounters.get("counterMetrics");
    if (allMetrics != null) {
      for (Map<String, Object> metric : allMetrics) {
        String metricId = (String) metric.get("id");
        List<Map<String, Number>> metricListData = (List<Map<String, Number>>) metric.get("data");
        for (Map<String, Number> singleMetricData : metricListData) {
          long timestamp = singleMetricData.get("timestamp").longValue();
          double value = singleMetricData.get("value").doubleValue();
          singleMetrics.add(new SingleMetric(metricId, timestamp, value));
        }
      }
    }

    Map<String, Object> data = new HashMap<>(2);
    data.put("tenantId", tenantId);
    data.put("data", singleMetrics);

    Map<String, Object> outerBusObject = new HashMap<>(1);
    outerBusObject.put("metricData", data);

    return outerBusObject;
  }
 @Override
 public int getNumberDataPoints() {
   return metricsOnlyMetricPayloadBuilder.getNumberDataPoints();
 }
 @Override
 public void addDataPoint(String key, long timestamp, double value, MetricType metricType) {
   // delegate
   metricsOnlyMetricPayloadBuilder.addDataPoint(key, timestamp, value, metricType);
 }