package org.sef4j.ext.influxdb;
import java.util.Collection;
import java.util.concurrent.TimeUnit;
import org.influxdb.InfluxDB;
import org.influxdb.dto.Serie;
import org.sef4j.core.api.EventSender;
/**
* InfluxDB Exporter to send <code>org.influxdb.dto.Serie</code>.
*
* cf Rest API java proxy, with optional thirdparty maven dependency: org.influxdb:influxdb-java
* (+ transitive jar dependencies: retrofit, okio, httpok, guava, gson ... )
*
*/
public class RestApiInfluxDBSerieSender implements EventSender<Serie> {
protected String url;
/**
* injected in ctor...
* to create with <code>InfluxDBFactory.connect("http://<<host>>:8086", <<username>>, <<password>>)</connect>
* can be itself configured for http client implementation: javax or apache httpcli
*/
protected InfluxDB influxDB;
protected String influxDBDatabase;
private TimeUnit influxDBPrecision = TimeUnit.SECONDS;
// ------------------------------------------------------------------------
public RestApiInfluxDBSerieSender(String url, org.influxdb.InfluxDB influxDB, String influxDBDatabase) {
this.url = url;
this.influxDB = influxDB;
this.influxDBDatabase = influxDBDatabase;
}
// ------------------------------------------------------------------------
@Override
public void sendEvent(Serie serie) {
influxDB.write(influxDBDatabase, influxDBPrecision, serie);
}
@Override
public void sendEvents(Collection<Serie> series) {
Serie[] serieArray = series.toArray(new Serie[series.size()]);
influxDB.write(influxDBDatabase, influxDBPrecision, serieArray);
}
// delegate methods to influxDB Rest Api
// ------------------------------------------------------------------------
public void ping() {
influxDB.ping();
}
// ------------------------------------------------------------------------
@Override
public String toString() {
return "RestApiInfluxDBSerieSender [url=" + url + ", db=" + influxDBDatabase + "]";
}
}