Я отправляю точки данных в InfluxDB, используя libcurl
в C ++.Одиночные точки данных работают, но для нескольких точек я борюсь за необходимый разрыв строки (\ n), как определено в InfluxDB HTTP API :
Напишите несколько точек длябаза данных с одним запросом, разделяя каждую точку новой строкой.
Запись точек из файла с флагом @.Файл должен содержать пакет точек в формате Line Protocol.Отдельные точки должны быть на отдельной строке и разделены символами новой строки (\ n).Файлы, содержащие возврат каретки, вызовут ошибки синтаксического анализатора.
Я думаю, это может быть проблема с форматированием символа, но я не могу понять, почему?Следующий код просто записывает 5 в расстоянии, но должен записать оба расстояния.
#include "stdafx.h"
#include "tchar.h"
#include <string>
#include <curl\curl.h>
#include <sstream>
int main()
{
int dataPoints[] = { 3, 5 };
std::string fieldIdentifier = "distance";
std::stringstream ss;
for (int i = 0; i < 1; i++) {
ss << "aufbau1,ort=halle ";
ss << fieldIdentifier;
ss << "=" << dataPoints[i];
ss << std::endl; //I guess this is the problem, it adds \n
}
ss << "aufbau1,ort=halle ";
ss << fieldIdentifier;
ss << "=" << dataPoints[1];
std::string data = ss.str();
const char *dataChar = data.c_str();
CURL *curl;
CURLcode res;
curl_global_init(CURL_GLOBAL_ALL);
curl = curl_easy_init();
if (curl) {
curl_easy_setopt(curl, CURLOPT_URL, "http://myIP:8086/write?db=testdb&u=myUser&p=myPwd");
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, dataChar);
res = curl_easy_perform(curl);
/* Check for errors */
if (res != CURLE_OK)
fprintf(stderr, "curl_easy_perform() failed: %s\n",
curl_easy_strerror(res));
curl_easy_cleanup(curl);
}
return 0;
}