예제 #1
0
  /**
   * 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);
        }
      }
    }
  }
예제 #2
0
  /**
   * Called by MetricsRecordImpl.remove(). Removes any matching row in the internal table of metric
   * data. A row matches if it has the same tag names and tag values.
   */
  protected void remove(MetricsRecord record) {
    String recordName = record.getRecordName();
    TagMap tagTable = record.getTagTable();

    RecordMap recordMap = getRecordMap(recordName);

    recordMap.remove(tagTable);
  }
예제 #3
0
 /** 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();
 }