private ByteBuffer lineProtocol(Measurement measurement) { try { final Point.Builder builder = Point.measurement(measurement.name()); builder.time(measurement.time(), measurement.timeUnit()); builder.tag(measurement.tags()); builder.tag("type", measurement.type().toString()); if (measurement.isSimple()) { builder.addField("value", measurement.getValue()); } for (Map.Entry<String, String> field : measurement.fields().entrySet()) { builder.addField(field.getKey(), field.getValue()); } Charset charset = StandardCharsets.UTF_8; CharsetEncoder encoder = charset.newEncoder(); return encoder.encode(CharBuffer.wrap(builder.build().lineProtocol().concat("\r\n").toCharArray())); } catch (Exception e) { logger.warn("Failed to send report to influx", e); return null; } } }
@Override public void report(Measurement measurement) { if (influx == null) { logger.warn("InfluxDB client is not initialized"); return; } logger.debug("Sending Query: {}", measurement.toString()); try { final Point.Builder builder = Point.measurement(measurement.name()); builder.time(measurement.time(), measurement.timeUnit()); builder.tag("type", measurement.type().toString()); for (Map.Entry<String, String> tag : measurement.tags().entrySet()) { builder.tag(tag.getKey(), tag.getValue()); } for (Map.Entry<String, String> field : measurement.fields().entrySet()) { builder.addField(field.getKey(), field.getValue()); } if (measurement.isSimple()) { builder.addField("value", measurement.getValue()); } influx.write(dbName, retentionPolicy, builder.build()); } catch (Exception e) { logger.warn("Failed to send report to influx", e); } }
@Override public void report(Measurement measurement) { if (measurement.isSimple()) { String name = measurement.name().replaceAll(ILLEGAL_CHARACTERS_REGEX, ALLOWED_DELIMITER); Gauge gauge = getOrCreateGaugeMeasurement(measurement, name); String[] tagValues = convertTagValues(measurement.tags()); double value = measurement.getValue(); gauge.labels(tagValues).set(value); } else { String baseName = measurement.name().replaceAll(ILLEGAL_CHARACTERS_REGEX, ALLOWED_DELIMITER); for (String key : measurement.fields().keySet()) { if (!isNumeric(measurement.fields().get(key))) { continue; } String metricName = baseName + ":" + key.replaceAll(ILLEGAL_CHARACTERS_REGEX, ALLOWED_DELIMITER); Gauge gauge = getOrCreateGaugeMeasurement(measurement, metricName); double value = Double.parseDouble(measurement.fields().get(key)); String[] tagValues = convertTagValues(measurement.tags()); gauge.labels(tagValues).set(value); } } }
@Override public void report(Measurement measurement) { if (client == null) { logger.warn("Datadog client is not initialized. Skipping measurement {} with value {}.", measurement.name(), measurement.getOrDefault(null)); return; } try { if (measurement.isSimple()) { client.recordGaugeValue(measurement.name(), measurement.getValue(), convertTagsMap(measurement.tags())); logger.debug("Reporting measurement {}, value {} and tags {}", measurement.name(), measurement.getValue(), convertTagsMap(measurement.tags())); } else { for (String key : measurement.fields().keySet()) { if (!isNumeric(measurement.fields().get(key))) { continue; } client.recordGaugeValue(measurement.name() + "." + key, Double.parseDouble(measurement.fields().get(key)), convertTagsMap(measurement.tags())); } } } catch (Exception e) { logger.warn("Sending measurement failed: execTime={}, exception: {}", measurement.time(), e.getMessage()); } }
/** * Method which is sending event. * * @param measurement Measurement to send * @throws IOException */ private void sendEvent(Measurement measurement) throws IOException { final EventDSL event = riemannClient.event(); event.service(measurement.name()); event.state("ok"); if (measurement.isSimple()) { event.metric(measurement.getValue()); } event.time(measurement.time()); event.ttl(30); for (Map.Entry<String, String> tag : measurement.tags().entrySet()) { event.tag(tag.getKey()); event.attribute(tag.getKey(), tag.getValue()); } event.tag("type"); event.attribute("type", measurement.type().toString()); for (Map.Entry<String, String> field : measurement.fields().entrySet()) { event.attribute(field.getKey(), field.getValue()); } riemannClient.sendEvent(event.build()); }