private void flush()

in util/src/main/java/com/google/cloud/healthcare/imaging/dicomadapter/monitoring/MonitoringService.java [150:205]


  private void flush() {
    HashMap<IMonitoringEvent, Long> flushEvents = null;
    synchronized (aggregateEvents) {
      flushEvents = new HashMap<>(aggregateEvents);
      aggregateEvents.clear();
    }

    try {
      Timestamp flushTime = Timestamps.fromMillis(System.currentTimeMillis());

      List<TimeSeries> timeSeriesList = new ArrayList<>();
      for (IMonitoringEvent event : monitoredEvents) {
        TimeInterval interval = TimeInterval.newBuilder()
            .setEndTime(flushTime)
            .build();
        TypedValue value = TypedValue.newBuilder()
            .setInt64Value(flushEvents.getOrDefault(event, 0L))
            .build();
        Point point = Point.newBuilder()
            .setInterval(interval)
            .setValue(value)
            .build();

        List<Point> pointList = new ArrayList<>();
        pointList.add(point);

        Metric metric = Metric.newBuilder()
            .setType(event.getMetricName())
            .build();

        TimeSeries timeSeries = TimeSeries.newBuilder()
            .setMetric(metric)
            .setMetricKind(MetricDescriptor.MetricKind.GAUGE)
            .setResource(monitoredResource)
            .addAllPoints(pointList)
            .build();

        timeSeriesList.add(timeSeries);
      }

      ProjectName projectName = ProjectName.of(projectId);
      CreateTimeSeriesRequest request = CreateTimeSeriesRequest.newBuilder()
          .setName(projectName.toString())
          .addAllTimeSeries(timeSeriesList)
          .build();

      client.createTimeSeries(request);

      log.trace("Flushed {} non-zero time series", flushEvents.size());
      if (flushEvents.size() > 0) {
        log.info("Flushed: {}", flushEvents);
      }
    } catch (Throwable e) {
      log.error("Failed to flush time series", e);
    }
  }