public static MetricUpdate extractCounter()

in sdk/src/main/java/com/google/cloud/dataflow/sdk/util/CloudCounterUtils.java [55:100]


  public static MetricUpdate extractCounter(Counter<?> counter, boolean delta) {
    // TODO: Omit no-op counter updates, for counters whose
    // values haven't changed since the last time we sent them.
    synchronized (counter) {
      MetricStructuredName name = new MetricStructuredName();
      name.setName(counter.getName());
      MetricUpdate metricUpdate = new MetricUpdate()
          .setName(name)
          .setKind(counter.getKind().name())
          .setCumulative(!delta);
      switch (counter.getKind()) {
        case SUM:
        case MAX:
        case MIN:
        case AND:
        case OR:
          Object aggregate;
          if (delta) {
            aggregate = counter.getAndResetDelta();
          } else {
            aggregate = counter.getAggregate();
          }
          metricUpdate.setScalar(
                CloudObject.forKnownType(aggregate));
          break;
        case MEAN: {
          CounterMean<?> mean;
          if (delta) {
            mean = counter.getAndResetMeanDelta();
          } else {
            mean = counter.getMean();
          }
          if (mean.getCount() <= 0) {
            return null;
          }
          metricUpdate.setMeanSum(
              CloudObject.forKnownType(mean.getAggregate()));
          metricUpdate.setMeanCount(CloudObject.forKnownType(mean.getCount()));
          break;
        }
        default:
          throw new IllegalArgumentException("unexpected kind of counter");
      }
      return metricUpdate;
    }
  }