Skip to content

Commit b5dbfaf

Browse files
committed
Merge pull request #137 from slomek/master
Allow to write lines directly to the database
2 parents abde80b + c64e751 commit b5dbfaf

File tree

3 files changed

+96
-0
lines changed

3 files changed

+96
-0
lines changed

src/main/java/org/influxdb/InfluxDB.java

+20
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,26 @@ public String value() {
129129
*/
130130
public void write(final BatchPoints batchPoints);
131131

132+
/**
133+
* Write a set of Points to the influxdb database with the string records.
134+
*
135+
* {@linkplain "https://github.com/influxdb/influxdb/pull/2696"}
136+
*
137+
* @param records
138+
*/
139+
public void write(final String database, final String retentionPolicy, final ConsistencyLevel consistency, final String records);
140+
141+
/**
142+
* Write a set of Points to the influxdb database with the list of string records.
143+
*
144+
* {@linkplain "https://github.com/influxdb/influxdb/pull/2696"}
145+
*
146+
* @param records
147+
*/
148+
public void write(final String database, final String retentionPolicy, final ConsistencyLevel consistency, final List<String> records);
149+
150+
/**
151+
132152
/**
133153
* Execute a query agains a database.
134154
*

src/main/java/org/influxdb/impl/InfluxDBImpl.java

+18
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import java.util.concurrent.atomic.AtomicBoolean;
66
import java.util.concurrent.atomic.AtomicLong;
77

8+
import com.google.common.base.Joiner;
89
import org.influxdb.InfluxDB;
910
import org.influxdb.dto.BatchPoints;
1011
import org.influxdb.dto.Point;
@@ -153,6 +154,23 @@ public void write(final BatchPoints batchPoints) {
153154

154155
}
155156

157+
@Override
158+
public void write(final String database, final String retentionPolicy, final ConsistencyLevel consistency, final String records) {
159+
this.influxDBService.writePoints(
160+
this.username,
161+
this.password,
162+
database,
163+
retentionPolicy,
164+
TimeUtil.toTimePrecision(TimeUnit.NANOSECONDS),
165+
consistency.value(),
166+
new TypedString(records));
167+
}
168+
@Override
169+
public void write(final String database, final String retentionPolicy, final ConsistencyLevel consistency, final List<String> records) {
170+
final String joinedRecords = Joiner.on("\n").join(records);
171+
write(database, retentionPolicy, consistency, joinedRecords);
172+
}
173+
156174
/**
157175
* {@inheritDoc}
158176
*/

src/test/java/org/influxdb/InfluxDBTest.java

+58
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.influxdb;
22

33
import java.io.IOException;
4+
import java.util.Arrays;
45
import java.util.List;
56
import java.util.logging.Level;
67
import java.util.logging.Logger;
@@ -184,6 +185,63 @@ public void testWrite() {
184185
this.influxDB.deleteDatabase(dbName);
185186
}
186187

188+
/**
189+
* Test writing to the database using string protocol.
190+
*/
191+
@Test(enabled = true)
192+
public void testWriteStringData() {
193+
String dbName = "write_unittest_" + System.currentTimeMillis();
194+
this.influxDB.createDatabase(dbName);
195+
196+
this.influxDB.write(dbName, "default", InfluxDB.ConsistencyLevel.ONE, "cpu,atag=test idle=90,usertime=9,system=1");
197+
Query query = new Query("SELECT * FROM cpu GROUP BY *", dbName);
198+
QueryResult result = this.influxDB.query(query);
199+
Assert.assertFalse(result.getResults().get(0).getSeries().get(0).getTags().isEmpty());
200+
this.influxDB.deleteDatabase(dbName);
201+
}
202+
203+
/**
204+
* Test writing multiple records to the database using string protocol.
205+
*/
206+
@Test(enabled = true)
207+
public void testWriteMultipleStringData() {
208+
String dbName = "write_unittest_" + System.currentTimeMillis();
209+
this.influxDB.createDatabase(dbName);
210+
211+
this.influxDB.write(dbName, "default", InfluxDB.ConsistencyLevel.ONE, "cpu,atag=test1 idle=100,usertime=10,system=1\ncpu,atag=test2 idle=200,usertime=20,system=2\ncpu,atag=test3 idle=300,usertime=30,system=3");
212+
Query query = new Query("SELECT * FROM cpu GROUP BY *", dbName);
213+
QueryResult result = this.influxDB.query(query);
214+
215+
Assert.assertEquals(result.getResults().get(0).getSeries().size(), 3);
216+
Assert.assertEquals(result.getResults().get(0).getSeries().get(0).getTags().get("atag"), "test1");
217+
Assert.assertEquals(result.getResults().get(0).getSeries().get(1).getTags().get("atag"), "test2");
218+
Assert.assertEquals(result.getResults().get(0).getSeries().get(2).getTags().get("atag"), "test3");
219+
this.influxDB.deleteDatabase(dbName);
220+
}
221+
222+
/**
223+
* Test writing multiple separate records to the database using string protocol.
224+
*/
225+
@Test(enabled = true)
226+
public void testWriteMultipleStringDataLines() {
227+
String dbName = "write_unittest_" + System.currentTimeMillis();
228+
this.influxDB.createDatabase(dbName);
229+
230+
this.influxDB.write(dbName, "default", InfluxDB.ConsistencyLevel.ONE, Arrays.asList(
231+
"cpu,atag=test1 idle=100,usertime=10,system=1",
232+
"cpu,atag=test2 idle=200,usertime=20,system=2",
233+
"cpu,atag=test3 idle=300,usertime=30,system=3"
234+
));
235+
Query query = new Query("SELECT * FROM cpu GROUP BY *", dbName);
236+
QueryResult result = this.influxDB.query(query);
237+
238+
Assert.assertEquals(result.getResults().get(0).getSeries().size(), 3);
239+
Assert.assertEquals(result.getResults().get(0).getSeries().get(0).getTags().get("atag"), "test1");
240+
Assert.assertEquals(result.getResults().get(0).getSeries().get(1).getTags().get("atag"), "test2");
241+
Assert.assertEquals(result.getResults().get(0).getSeries().get(2).getTags().get("atag"), "test3");
242+
this.influxDB.deleteDatabase(dbName);
243+
}
244+
187245
/**
188246
* Test that creating database which name is composed of numbers only works
189247
*/

0 commit comments

Comments
 (0)