summaryrefslogtreecommitdiff
path: root/src/common/Metric/Metric.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/common/Metric/Metric.cpp')
-rw-r--r--src/common/Metric/Metric.cpp49
1 files changed, 41 insertions, 8 deletions
diff --git a/src/common/Metric/Metric.cpp b/src/common/Metric/Metric.cpp
index 7c4771dcad..c35fa30b6c 100644
--- a/src/common/Metric/Metric.cpp
+++ b/src/common/Metric/Metric.cpp
@@ -99,25 +99,48 @@ void Metric::LoadFromConfigs()
// Cancel any scheduled operation if the config changed from Enabled to Disabled.
if (_enabled && !previousValue)
{
- std::string connectionInfo = sConfigMgr->GetOption<std::string>("Metric.ConnectionInfo", "");
+ std::string connectionInfo = sConfigMgr->GetOption<std::string>("Metric.InfluxDB.Connection", "");
if (connectionInfo.empty())
{
- LOG_ERROR("metric", "'Metric.ConnectionInfo' not specified in configuration file.");
+ LOG_ERROR("metric", "Metric.InfluxDB.Connection not specified in configuration file.");
return;
}
std::vector<std::string_view> tokens = Acore::Tokenize(connectionInfo, ';', true);
- if (tokens.size() != 3)
+ if (tokens.size() != 2)
{
- LOG_ERROR("metric", "'Metric.ConnectionInfo' specified with wrong format in configuration file.");
+ LOG_ERROR("metric", "Metric.InfluxDB.Connection specified with wrong format in configuration file.");
return;
}
_hostname.assign(tokens[0]);
_port.assign(tokens[1]);
- _databaseName.assign(tokens[2]);
- Connect();
+ _useV2 = sConfigMgr->GetOption<bool>("Metric.InfluxDB.v2", false);
+ if (_useV2)
+ {
+ _org = sConfigMgr->GetOption<std::string>("Metric.InfluxDB.Org", "");
+ _bucket = sConfigMgr->GetOption<std::string>("Metric.InfluxDB.Bucket", "");
+ _token = sConfigMgr->GetOption<std::string>("Metric.InfluxDB.Token", "");
+
+ if (_org.empty() || _bucket.empty() || _token.empty())
+ {
+ LOG_ERROR("metric", "InfluxDB v2 parameters missing: org, bucket, or token.");
+ return;
+ }
+ }
+ else
+ {
+ if (tokens.size() != 3)
+ {
+ LOG_ERROR("metric", "Metric.InfluxDB.Connection specified with wrong format in configuration file.");
+ return;
+ }
+
+ _databaseName.assign(tokens[2]);
+ }
+
+ Connect();
ScheduleSend();
ScheduleOverallStatusLog();
}
@@ -206,8 +229,18 @@ void Metric::SendBatch()
if (!GetDataStream().good() && !Connect())
return;
- GetDataStream() << "POST " << "/write?db=" << _databaseName << " HTTP/1.1\r\n";
- GetDataStream() << "Host: " << _hostname << ":" << _port << "\r\n";
+ if (_useV2)
+ {
+ GetDataStream() << "POST " << "/api/v2/write?bucket=" << _bucket
+ << "&org=" << _org << "&precision=ns HTTP/1.1\r\n";
+ GetDataStream() << "Host: " << _hostname << ":" << _port << "\r\n";
+ GetDataStream() << "Authorization: Token " << _token << "\r\n";
+ }
+ else
+ {
+ GetDataStream() << "POST " << "/write?db=" << _databaseName << " HTTP/1.1\r\n";
+ GetDataStream() << "Host: " << _hostname << ":" << _port << "\r\n";
+ }
GetDataStream() << "Accept: */*\r\n";
GetDataStream() << "Content-Type: application/octet-stream\r\n";
GetDataStream() << "Content-Transfer-Encoding: binary\r\n";