influxdb-c
influxdb-c copied to clipboard
💙 C write client for InfluxDB.
influxdb-c
A header-only C write client for InfluxDB.
- Supported versions:
- InfluxDB v0.9 ~ v1.4
- Check yourself while using other versions.
Why use influxdb-c?
- Exactly small:
- Less than 300 lines and only about 10KB.
- Easy to use:
- It's designed to be used without extra studies.
- Easy to assemble:
- Only a tiny header file needs to be included.
- No dependencies:
- Unless std C libraries.
- Under serious testing:
- Uses gtest & mockcpp
Examples
Before using
-
The very simple thing you should do before using is only:
#include "influxdb.h"
Write example
-
You should according to the write syntax while writing series(metrics).
measurement[,tag-key=tag-value...] field-key=field-value[,field2-key=field2-value...] [unix-nano-timestamp] -
You can rapidly start writing series by using one of the following examples:
-
Client configurations:
influx_client_t c; c.host = strdup("127.0.0.1"); c.port = 8086; c.db = strdup("db"); c.usr = strdup("usr"); c.pwd = strdup("pwd"); -
Under C99, you can use:
influx_client_t c = { .host = strdup("127.0.0.1"), .port = 8086, .db = strdup("db"), .usr = strdup("usr"), .pwd = strdup("pwd") }; -
Then send out the series by calling
post_http:post_http(&c, INFLUX_MEAS("foo"), INFLUX_TAG("k", "v"), INFLUX_TAG("x", "y"), INFLUX_F_INT("x", 10), INFLUX_F_FLT("y", 10.3, 2), INFLUX_F_FLT("z", 10.3456, 2), INFLUX_F_BOL("b", 10), INFLUX_TS(1512722735522840439), INFLUX_END);- NOTE:
- 3rd parameter of
INFLUX_F_FLT()isprecisionfor floating point value. usrandpwdis optional for authorization.INFLUX_ENDis the delimiter for variable arguments list that should not be ommitted.
- 3rd parameter of
- NOTE:
-
The series sent is:
foo,k=v,x=y x=10i,y=10.30,z=10.35,b=t 1512722735522840439 -
You could change
post_httptosend_udpfor UDP request. And onlyhostandportare required for UDP operation.influx_client_t c = {strdup("127.0.0.1"), 8091, NULL, NULL, NULL}; send_udp(&c, INFLUX_MEAS("foo"), INFLUX_TAG("k", "v"), INFLUX_F_INT("x", 10), INFLUX_END); -
Bulk/batch write is also supported:
send_udp(&c, INFLUX_MEAS("foo"), // series 1 INFLUX_F_INT("x", 10), INFLUX_MEAS("foo"), // series 2 INFLUX_F_FLT("y", 10.3, 2), INFLUX_END); -
The series sent are:
foo x=10i bar y=10.30 -
If measurement data is sent from within a loop, but higher write performance is needed, one has to format each measurement separately, then at the end send the formatted line to the database. This example sends 10 measurements with a single http request:
influx_client_t c = {strdup("127.0.0.1"), 8091, NULL, NULL, NULL}; char *line = NULL; int len = 0; int used = 0; for (int i = 0; i < 10; ++i) { used = format_line(line, &len, used, INFLUX_MEAS("foo"), INFLUX_TAG("k", "v"), INFLUX_F_INT("x", i), INFLUX_END); } post_http_send_line(&c, line, used);
TODO
- Add more test cases for send functions.
- Supports DSN initializatin for influx_client_t.
- Add query function.
- Do not need to connect every time.
Misc
- Please feel free to use influxdb-c.
- Looking forward to your suggestions.
- If your project is using influxdb-c, you can show your project or company here by creating a issue or let me know.