diff --git a/.travis.yml b/.travis.yml index 8931443..cfb7c1a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -21,6 +21,8 @@ script: matrix: include: - d: dmd + - d: dmd-2.073.2 + - d: dmd-2.072.2 - d: dmd-2.071.2 - d: dmd-2.070.2 - d: ldc diff --git a/dub.json b/dub.json index da9466f..d27926e 100644 --- a/dub.json +++ b/dub.json @@ -4,7 +4,7 @@ "Atila Neves" ], "dependencies": { - "vibe-d": "~>0.7.30", + "vibe-d": "~>0.8.0-beta.5", "asdf": "~>0.1.1" }, "description": "InfluxDB wrapper", diff --git a/dub.selections.json b/dub.selections.json index 0b956ac..00b600b 100644 --- a/dub.selections.json +++ b/dub.selections.json @@ -1,13 +1,16 @@ { "fileVersion": 1, "versions": { - "asdf": "0.1.1", + "asdf": "0.1.3", "diet-ng": "1.2.0", - "libasync": "0.7.9", + "eventcore": "0.8.10", + "libasync": "0.8.3", "libevent": "2.0.2+2.0.16", "memutils": "0.4.9", "openssl": "1.1.5+1.0.1g", - "unit-threaded": "0.7.7", - "vibe-d": "0.7.30" + "taggedalgebraic": "0.10.5", + "unit-threaded": "0.7.14", + "vibe-core": "1.0.0-beta.5", + "vibe-d": "0.8.0-beta.5" } } diff --git a/integration/api.d b/integration/api.d index 990bb7f..dc9c718 100644 --- a/integration/api.d +++ b/integration/api.d @@ -31,3 +31,22 @@ unittest { series.rows.length.shouldEqual(1); } } + +@Serial +@("Database multiple inserts") +unittest { + + import influxdb.api: Database, Measurement; + + const database = Database(influxURL, "myspecialDB"); + scope(exit) database.drop; + + database.insert(Measurement("cpu", ["tag1": "foo"], ["temperature": "42"]), + Measurement("cpu", ["tag1": "bar"], ["temperature": "68"]), + Measurement("cpu", ["tag1": "baz"], ["temperature": "54"])); + + const response = database.query("SELECT * from cpu WHERE temperature > 50"); + const result = response.results[0]; + const series = result.series[0]; + series.rows.length.shouldEqual(2); +} diff --git a/source/influxdb/api.d b/source/influxdb/api.d index cf5a2f9..ccc0833 100644 --- a/source/influxdb/api.d +++ b/source/influxdb/api.d @@ -46,8 +46,9 @@ struct DatabaseImpl(alias manageFunc, alias queryFunc, alias writeFunc) { Insert data into the DB. */ void insert(in Measurement[] measurements) const { - foreach(ref const m; measurements) - writeFunc(url, db, m.toString); + import std.algorithm: map; + import std.array: array, join; + writeFunc(url, db, measurements.map!(a => a.toString).array.join("\n")); } /** @@ -74,8 +75,8 @@ struct DatabaseImpl(alias manageFunc, alias queryFunc, alias writeFunc) { string[string][] writes; alias TestDatabase = DatabaseImpl!( - (url, cmd) => manages ~= ["url": url, "cmd": cmd], - (url, db, query) { + (url, cmd) => manages ~= ["url": url, "cmd": cmd], // manage + (url, db, query) { // query queries ~= ["url": url, "db": db, "query": query]; return `{ @@ -125,6 +126,33 @@ struct DatabaseImpl(alias manageFunc, alias queryFunc, alias writeFunc) { ); } +@("insert") +@safe unittest { + + string[] lines; + + alias TestDatabase = DatabaseImpl!( + (url, cmd) { }, // manage + (url, db, query) => `{}`, // query + (url, db, line) => lines ~= line // write + ); + + const database = TestDatabase("http://db.com", "testdb"); + database.insert( + Measurement("cpu", ["index": "1"], ["temperature": "42"]), + Measurement("cpu", ["index": "2"], ["temperature": "42"]), + Measurement("cpu", ["index": "2"], ["temperature": "42"]), + ); + + () @trusted { + lines.shouldEqual( + [ + "cpu,index=1 temperature=42\ncpu,index=2 temperature=42\ncpu,index=2 temperature=42", + ] + ); + }(); +} + /** An InfluxDB measurement */