@ReadOperation public MetricResponse metric(@Selector String requiredMetricName, @Nullable List<String> tag) { List<Tag> tags = parseTags(tag); Collection<Meter> meters = findFirstMatchingMeters(this.registry, requiredMetricName, tags); if (meters.isEmpty()) { return null; } Map<Statistic, Double> samples = getSamples(meters); Map<String, Set<String>> availableTags = getAvailableTags(meters); tags.forEach((t) -> availableTags.remove(t.getKey())); Meter.Id meterId = meters.iterator().next().getId(); return new MetricResponse(requiredMetricName, meterId.getDescription(), meterId.getBaseUnit(), asList(samples, Sample::new), asList(availableTags, AvailableTag::new)); }
public CustomPrometheusLongTaskTimer(Meter.Id id, Clock clock) { this.name = id.getConventionName(); this.description = id.getDescription(); this.clock = clock; this.tagKeys = id.getConventionTags().stream().map(Tag::getKey).collect(toList()); this.activeTasksName = name + "_active_count"; this.durationName = name + "_sum"; }
public CustomPrometheusSummary(Meter.Id id) { this.name = id.getConventionName(); this.description = id.getDescription(); this.countName = name + "_count"; this.sumName = name + "_sum"; this.tagKeys = id.getConventionTags().stream().map(Tag::getKey).collect(toList()); }
return new Meter.Id(name, newTags, id.getBaseUnit(), id.getDescription(), id.getType());
return new Meter.Id(name, newTags, id.getBaseUnit(), id.getDescription(), id.getType());
idBuilder.addAllTag(meterTags); idBuilder.setType(convert(type)); if (id.getDescription() != null) { idBuilder.setDescription(id.getDescription());
private void createMetricDescriptorIfNecessary(MetricServiceClient client, Meter.Id id, MetricDescriptor.ValueType valueType, @Nullable String statistic) { if (!verifiedDescriptors.contains(id.getName())) { MetricDescriptor descriptor = MetricDescriptor.newBuilder() .setType(metricType(id, statistic)) .setDescription(id.getDescription() == null ? "" : id.getDescription()) .setMetricKind(MetricDescriptor.MetricKind.GAUGE) .setValueType(valueType) .build(); ProjectName name = ProjectName.of(config.projectId()); CreateMetricDescriptorRequest request = CreateMetricDescriptorRequest.newBuilder() .setName(name.toString()) .setMetricDescriptor(descriptor) .build(); if (logger.isTraceEnabled()) { logger.trace("creating metric descriptor:\n{}", request); } try { client.createMetricDescriptor(request); verifiedDescriptors.add(id.getName()); } catch (ApiException e) { logger.warn("failed to create metric descriptor in stackdriver for meter " + id + " {}", e.getCause().getMessage()); } } }
private Meter convert(io.micrometer.core.instrument.Meter meter) { Meter.Builder meterBuilder = Meter.newBuilder(); MeterId.Builder idBuilder = MeterId.newBuilder(); io.micrometer.core.instrument.Meter.Id id = meter.getId(); io.micrometer.core.instrument.Meter.Type type = id.getType(); for (Tag tag : id.getTags()) { idBuilder.addTag(MeterTag.newBuilder().setKey(tag.getKey()).setValue(tag.getValue())); } idBuilder.setName(id.getName()); idBuilder.setType(convert(type)); if (id.getDescription() != null) { idBuilder.setDescription(id.getDescription()); } if (id.getBaseUnit() != null) { idBuilder.setBaseUnit(id.getBaseUnit()); } meterBuilder.setId(idBuilder); for (Measurement measurement : meter.measure()) { meterBuilder.addMeasure( MeterMeasurement.newBuilder() .setValue(measurement.getValue()) .setStatistic(convert(measurement.getStatistic()))); } return meterBuilder.build(); }
String editMetadataBody() { String body = "{\"type\":\"" + type + "\""; String baseUnit = overrideBaseUnit != null ? overrideBaseUnit : id.getBaseUnit(); if (baseUnit != null) { String whitelistedBaseUnit = UNIT_WHITELIST.contains(baseUnit) ? baseUnit : PLURALIZED_UNIT_MAPPING.get(baseUnit); if (whitelistedBaseUnit != null) { body += ",\"unit\":\"" + whitelistedBaseUnit + "\""; } } if (descriptionsEnabled && id.getDescription() != null) { body += ",\"description\":\"" + StringEscapeUtils.escapeJson(id.getDescription()) + "\""; } body += "}"; return body; } }
private <B extends SimpleCollector.Builder<B, C>, C extends SimpleCollector<D>, D> C buildCollector(Meter.Id id, SimpleCollector.Builder<B, C> builder) { return builder .name(id.getConventionName()) .help(!sendDescriptions || id.getDescription() == null ? " " : id.getDescription()) .labelNames(id.getConventionTags().stream() .map(Tag::getKey) .collect(Collectors.toList()) .toArray(new String[]{})) .register(registry); }