packagecom.test.repository.utils;importcom.test.domain.entry.bo.common.InfluxDbRow;importorg.influxdb.InfluxDB;importorg.influxdb.InfluxDBFactory;importorg.influxdb.dto.BatchPoints;importorg.influxdb.dto.Point;importorg.influxdb.dto.Query;importorg.influxdb.dto.QueryResult;importjava.util.List;importjava.util.concurrent.TimeUnit;
public classInfluxDBConnect {privateString username;privateString password;privateString url;privateString database;private intretentionDay;private intreplicationCount;privateInfluxDB influxDB;public InfluxDBConnect(String username, String password, String url, String database, int retentionDay, intreplicationCount) {this.username =username;this.password =password;this.url =url;this.database =database;this.retentionDay =retentionDay;this.replicationCount =replicationCount;
}/**连接时序数据库;获得InfluxDB **/
voidconnection() {if (influxDB == null) {
influxDB=InfluxDBFactory.connect(url, username, password);
}
}/*** 设置数据保存策略
* defalut 策略名 /database 数据库名/ 30d 数据保存时限30天/ 1 副本个数为1/ 结尾DEFAULT 表示 设为默认的策略*/
voidcreateRetentionPolicy() {
String command= String.format("CREATE RETENTION POLICY \"%s\" ON \"%s\" DURATION %s REPLICATION %s DEFAULT","default", database, retentionDay + "d", replicationCount);this.query(command);
}/*** 查询
*@paramcommand 查询语句
*@return查询结果*/QueryResult query(String command) {return influxDB.query(newQuery(command, database));
}/*** 插入*/
public voidinsert(InfluxDbRow influxDbRow) {if (influxDbRow == null) {return;
}
Point.Builder builder=Point.measurement(influxDbRow.getMeasurement());
builder.tag(influxDbRow.getTags());
builder.fields(influxDbRow.getFields());if (influxDbRow.getTimeSecond() != null) {
builder.time(influxDbRow.getTimeSecond(), TimeUnit.SECONDS);
}
influxDB.write(database,"default", builder.build());
}/*** 删除
*@paramcommand 删除语句
*@return返回错误信息*/
publicString deleteMeasurementData(String command) {
QueryResult result= influxDB.query(newQuery(command, database));returnresult.getError();
}/*** 创建数据库
*@paramdbName 库名称*/
public voidcreateDB(String dbName) {this.query("create database " +dbName);
}/*** 删除数据库
*@paramdbName*/
public voiddeleteDB(String dbName) {this.query("drop database " +dbName);
}public voidclose() {this.influxDB.close();
}/*** 指导导入
*@paraminfluxDbRows 行记录*/
public void batchPointsImport(ListinfluxDbRows) {if (influxDbRows == null || influxDbRows.size() == 0) {return;
}
BatchPoints batchPoints= BatchPoints.database(this.database).retentionPolicy("default").build();for(InfluxDbRow influxDbRow : influxDbRows) {if (influxDbRow.getTags().size() + influxDbRow.getFields().size() == 0) continue;
Point.Builder builder=Point.measurement(influxDbRow.getMeasurement());
builder.tag(influxDbRow.getTags());
builder.fields(influxDbRow.getFields());if (influxDbRow.getTimeSecond() != null) {
builder.time(influxDbRow.getTimeSecond(), TimeUnit.SECONDS);
}else{
builder.time(System.currentTimeMillis()/ 1000, TimeUnit.SECONDS);
}
batchPoints.point(builder.build());
}
influxDB.write(batchPoints);
}
}