- Notifications
You must be signed in to change notification settings - Fork8
💙 C write client for InfluxDB.
License
orca-zhang/influxdb-c
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
A header-only C write client for InfluxDB.
- Supported versions:
- InfluxDB v0.9 ~ v1.4
- Check yourself while using other versions.
- 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
The very simple thing you should do before using is only:
#include"influxdb.h"
You should according to thewrite 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_tc;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_tc= { .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()
isprecision
for floating point value. usr
andpwd
is optional for authorization.INFLUX_END
is the delimiter for variable arguments list thatshould 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_http
tosend_udp
for UDP request. And onlyhost
andport
are required for UDP operation.influx_client_tc= {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 1INFLUX_F_INT("x",10),INFLUX_MEAS("foo"),// series 2INFLUX_F_FLT("y",10.3,2),INFLUX_END);
The series sent are:
foo x=10ibar y=10.30
If measurement data is sent from within a loop, but higher write performanceis needed, one has to format each measurement separately, then at the endsend the formatted line to the database. This example sends 10 measurementswith a single http request:
influx_client_tc= {strdup("127.0.0.1"),8091,NULL,NULL,NULL};char*line=NULL;intlen=0;intused=0;for (inti=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);
- Add more test cases for send functions.
- Supports DSN initializatin for influx_client_t.
- Add query function.
- Do not need to connect every time.
- 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.