]> git.ipfire.org Git - thirdparty/collectd.git/commitdiff
write_http plugin: Add initial support for exporting OTLP via HTTP.
authorFlorian Forster <octo@collectd.org>
Thu, 14 Dec 2023 11:58:03 +0000 (12:58 +0100)
committerFlorian Forster <octo@collectd.org>
Wed, 3 Jan 2024 15:39:36 +0000 (16:39 +0100)
src/write_http.c

index 13b260c82334b0a0a01e3617712715019972b8e1..e1e335564ee00ca152fa54a6efba8be1d78c6c40 100644 (file)
@@ -26,6 +26,7 @@
 #include "collectd.h"
 
 #include "plugin.h"
+#include "utils/avltree/avltree.h"
 #include "utils/cmds/putmetric.h"
 #include "utils/common/common.h"
 #include "utils/curl_stats/curl_stats.h"
@@ -71,6 +72,8 @@ struct wh_callback_s {
 #define WH_FORMAT_JSON 1
 #define WH_FORMAT_KAIROSDB 2
 #define WH_FORMAT_INFLUXDB 3
+#define WH_FORMAT_OTLP_PROTO 4
+#define WH_FORMAT_OTLP_JSON 5
   int format;
   bool send_metrics;
   bool send_notifications;
@@ -85,6 +88,9 @@ struct wh_callback_s {
   strbuf_t send_buffer;
   cdtime_t send_buffer_init_time;
 
+  c_avl_tree_t *staged_metrics;         // char* metric_identity() -> NULL
+  c_avl_tree_t *staged_metric_families; // char* fam->name -> metric_family_t*
+
   char response_buffer[WRITE_HTTP_RESPONSE_BUFFER_SIZE];
   unsigned int response_buffer_pos;
 
@@ -437,6 +443,16 @@ static int wh_write_influxdb(metric_family_t const *fam, wh_callback_t *cb) {
   return 0;
 } /* wh_write_influxdb */
 
+static int wh_write_otlp_proto(metric_family_t const *fam, wh_callback_t *cb) {
+  ERROR("wh_write_otlp_proto: Not implemented yet.");
+  return -1;
+}
+
+static int wh_write_otlp_json(metric_family_t const *fam, wh_callback_t *cb) {
+  ERROR("wh_write_otlp_json: Not implemented yet.");
+  return -1;
+}
+
 static int wh_write(metric_family_t const *fam, user_data_t *user_data) {
   if ((fam == NULL) || (user_data == NULL)) {
     return EINVAL;
@@ -457,6 +473,12 @@ static int wh_write(metric_family_t const *fam, user_data_t *user_data) {
   case WH_FORMAT_INFLUXDB:
     status = wh_write_influxdb(fam, cb);
     break;
+  case WH_FORMAT_OTLP_PROTO:
+    status = wh_write_otlp_proto(fam, cb);
+    break;
+  case WH_FORMAT_OTLP_JSON:
+    status = wh_write_otlp_json(fam, cb);
+    break;
   default:
     status = wh_write_command(fam, cb);
     break;