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);
}
}