/** * Called by MetricsRecordImpl.update(). Creates or updates a row in the internal table of metric * data. */ protected void update(MetricsRecord record) { String recordName = record.getRecordName(); TagMap tagTable = record.getTagTable(); Map<String, MetricValue> metricUpdates = record.getMetricTable(); RecordMap recordMap = getRecordMap(recordName); synchronized (recordMap) { MetricMap metricMap = recordMap.get(tagTable); if (metricMap == null) { metricMap = new MetricMap(); TagMap tagMap = new TagMap(tagTable); // clone tags recordMap.put(tagMap, metricMap); } for (String metricName : metricUpdates.keySet()) { MetricValue updateValue = metricUpdates.get(metricName); Number updateNumber = updateValue.getNumber(); Number currentNumber = metricMap.get(metricName); if (currentNumber == null || updateValue.isAbsolute()) { metricMap.put(metricName, updateNumber); } else { Number newNumber = sum(updateNumber, currentNumber); metricMap.put(metricName, newNumber); } } } }
/** Emits the records. */ private void emitRecords() throws IOException { for (String recordName : bufferedData_.keySet()) { RecordMap recordMap = bufferedData_.get(recordName); synchronized (recordMap) { for (TagMap tagMap : recordMap.keySet()) { MetricMap metricMap = recordMap.get(tagMap); OutputRecord outRec = new OutputRecord(tagMap, metricMap); emitRecord(recordName, outRec); } } } flush(); }