docs: void measure(Registry registry, JmxData data, List<Measurement> ms) {
      Map<String, String> tags = tagMappings.entrySet().stream().collect(Collectors.toMap(
          Map.Entry::getKey,
          e -> MappingExpr.substitute(e.getValue(), data.getStringAttrs())
      ));
      Id id = registry
          .createId(MappingExpr.substitute(nameMapping, data.getStringAttrs()))
          .withTags(tags);
  
      Map<String, Number> numberAttrs = new HashMap<>(data.getNumberAttrs());
      JmxData previous = previousData.put(data.getName(), data);
      if (previous != null) {
        previous.getNumberAttrs().forEach((key, value) -> numberAttrs.put("previous:" + key, value));
      }
  
      Double v = MappingExpr.eval(valueMapping, numberAttrs);
  
      if (v != null && !v.isNaN()) {
        if (counter) {
          updateCounter(registry, id, v.longValue());
        } else {
          ms.add(new Measurement(id, registry.clock().wallTime(), v));
        }
      }
    }