Skip to content
Merged
56 changes: 54 additions & 2 deletions include/fluent-bit/flb_opentelemetry.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,9 @@
#include <msgpack.h>
#include <stdint.h>

/* Error code values from flb_opentelemetry_logs.c */
/* Error code values from flb_opentelemetry logs/traces helpers */
#define FLB_OTEL_LOGS_ERR_GENERIC_ERROR -1
#define FLB_OTEL_TRACES_ERR_GENERIC_ERROR -1

enum {

Expand All @@ -50,7 +51,31 @@ enum {
FLB_OTEL_LOGS_ERR_ENCODER_FAILURE,
FLB_OTEL_LOGS_ERR_APPEND_BODY_FAILURE,
FLB_OTEL_LOGS_ERR_INVALID_TRACE_ID,
FLB_OTEL_LOGS_ERR_INVALID_SPAN_ID
FLB_OTEL_LOGS_ERR_INVALID_SPAN_ID,

/* trace specific errors */
FLB_OTEL_TRACES_ERR_UNEXPECTED_ROOT_OBJECT_TYPE,
FLB_OTEL_TRACES_ERR_INVALID_JSON,
FLB_OTEL_TRACES_ERR_RESOURCE_SPANS_MISSING,
FLB_OTEL_TRACES_ERR_UNEXPECTED_RESOURCE_SPANS_TYPE,
FLB_OTEL_TRACES_ERR_UNEXPECTED_RESOURCE_SPANS_ENTRY_TYPE,
FLB_OTEL_TRACES_ERR_SCOPE_SPANS_MISSING,
FLB_OTEL_TRACES_ERR_UNEXPECTED_SCOPE_SPANS_TYPE,
FLB_OTEL_TRACES_ERR_UNEXPECTED_SCOPE_SPANS_ENTRY_TYPE,
FLB_OTEL_TRACES_ERR_SPANS_MISSING,
FLB_OTEL_TRACES_ERR_UNEXPECTED_SPANS_TYPE,
FLB_OTEL_TRACES_ERR_UNEXPECTED_SPAN_ENTRY_TYPE,
FLB_OTEL_TRACES_ERR_SPAN_NAME_MISSING,
FLB_OTEL_TRACES_ERR_INVALID_ATTRIBUTES,
FLB_OTEL_TRACES_ERR_INVALID_TRACE_ID,
FLB_OTEL_TRACES_ERR_INVALID_SPAN_ID,
FLB_OTEL_TRACES_ERR_INVALID_PARENT_SPAN_ID,
FLB_OTEL_TRACES_ERR_INVALID_EVENT_ENTRY,
FLB_OTEL_TRACES_ERR_INVALID_EVENT_TIMESTAMP,
FLB_OTEL_TRACES_ERR_INVALID_LINK_ENTRY,
FLB_OTEL_TRACES_ERR_INVALID_LINK_TRACE_ID,
FLB_OTEL_TRACES_ERR_INVALID_LINK_SPAN_ID,
FLB_OTEL_TRACES_ERR_STATUS_FAILURE
};


Expand Down Expand Up @@ -88,7 +113,31 @@ static struct flb_otel_error_map otel_error_map[] = {
{"FLB_OTEL_LOGS_ERR_APPEND_BODY_FAILURE", FLB_OTEL_LOGS_ERR_APPEND_BODY_FAILURE},
{"FLB_OTEL_LOGS_ERR_INVALID_TRACE_ID", FLB_OTEL_LOGS_ERR_INVALID_TRACE_ID},
{"FLB_OTEL_LOGS_ERR_INVALID_SPAN_ID", FLB_OTEL_LOGS_ERR_INVALID_SPAN_ID},

{"FLB_OTEL_TRACES_ERR_UNEXPECTED_ROOT_OBJECT_TYPE", FLB_OTEL_TRACES_ERR_UNEXPECTED_ROOT_OBJECT_TYPE},
{"FLB_OTEL_TRACES_ERR_INVALID_JSON", FLB_OTEL_TRACES_ERR_INVALID_JSON},
{"FLB_OTEL_TRACES_ERR_RESOURCE_SPANS_MISSING", FLB_OTEL_TRACES_ERR_RESOURCE_SPANS_MISSING},
{"FLB_OTEL_TRACES_ERR_UNEXPECTED_RESOURCE_SPANS_TYPE", FLB_OTEL_TRACES_ERR_UNEXPECTED_RESOURCE_SPANS_TYPE},
{"FLB_OTEL_TRACES_ERR_UNEXPECTED_RESOURCE_SPANS_ENTRY_TYPE", FLB_OTEL_TRACES_ERR_UNEXPECTED_RESOURCE_SPANS_ENTRY_TYPE},
{"FLB_OTEL_TRACES_ERR_SCOPE_SPANS_MISSING", FLB_OTEL_TRACES_ERR_SCOPE_SPANS_MISSING},
{"FLB_OTEL_TRACES_ERR_UNEXPECTED_SCOPE_SPANS_TYPE", FLB_OTEL_TRACES_ERR_UNEXPECTED_SCOPE_SPANS_TYPE},
{"FLB_OTEL_TRACES_ERR_UNEXPECTED_SCOPE_SPANS_ENTRY_TYPE",FLB_OTEL_TRACES_ERR_UNEXPECTED_SCOPE_SPANS_ENTRY_TYPE},
{"FLB_OTEL_TRACES_ERR_SPANS_MISSING", FLB_OTEL_TRACES_ERR_SPANS_MISSING},
{"FLB_OTEL_TRACES_ERR_UNEXPECTED_SPANS_TYPE", FLB_OTEL_TRACES_ERR_UNEXPECTED_SPANS_TYPE},
{"FLB_OTEL_TRACES_ERR_UNEXPECTED_SPAN_ENTRY_TYPE", FLB_OTEL_TRACES_ERR_UNEXPECTED_SPAN_ENTRY_TYPE},
{"FLB_OTEL_TRACES_ERR_SPAN_NAME_MISSING", FLB_OTEL_TRACES_ERR_SPAN_NAME_MISSING},
{"FLB_OTEL_TRACES_ERR_INVALID_ATTRIBUTES", FLB_OTEL_TRACES_ERR_INVALID_ATTRIBUTES},
{"FLB_OTEL_TRACES_ERR_INVALID_TRACE_ID", FLB_OTEL_TRACES_ERR_INVALID_TRACE_ID},
{"FLB_OTEL_TRACES_ERR_INVALID_SPAN_ID", FLB_OTEL_TRACES_ERR_INVALID_SPAN_ID},
{"FLB_OTEL_TRACES_ERR_INVALID_PARENT_SPAN_ID", FLB_OTEL_TRACES_ERR_INVALID_PARENT_SPAN_ID},
{"FLB_OTEL_TRACES_ERR_INVALID_EVENT_ENTRY", FLB_OTEL_TRACES_ERR_INVALID_EVENT_ENTRY},
{"FLB_OTEL_TRACES_ERR_INVALID_EVENT_TIMESTAMP", FLB_OTEL_TRACES_ERR_INVALID_EVENT_TIMESTAMP},
{"FLB_OTEL_TRACES_ERR_INVALID_LINK_ENTRY", FLB_OTEL_TRACES_ERR_INVALID_LINK_ENTRY},
{"FLB_OTEL_TRACES_ERR_INVALID_LINK_TRACE_ID", FLB_OTEL_TRACES_ERR_INVALID_LINK_TRACE_ID},
{"FLB_OTEL_TRACES_ERR_INVALID_LINK_SPAN_ID", FLB_OTEL_TRACES_ERR_INVALID_LINK_SPAN_ID},
{"FLB_OTEL_TRACES_ERR_STATUS_FAILURE", FLB_OTEL_TRACES_ERR_STATUS_FAILURE},
{"GENERIC_ERROR", FLB_OTEL_LOGS_ERR_GENERIC_ERROR},
{"FLB_OTEL_TRACES_ERR_GENERIC_ERROR", FLB_OTEL_TRACES_ERR_GENERIC_ERROR},

/* ---- */
{"FLB_OTEL_LOGS_ERR_EMPTY_PAYLOAD", FLB_OTEL_LOGS_ERR_EMPTY_PAYLOAD},
Expand Down Expand Up @@ -124,6 +173,9 @@ int flb_opentelemetry_logs_json_to_msgpack(struct flb_log_event_encoder *encoder
const char *logs_body_key,
int *error_status);

struct ctrace *flb_opentelemetry_json_traces_to_ctrace(const char *body, size_t len,
int *error_status);

Comment on lines +176 to +178
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion | 🟠 Major

Fix incomplete type and missing header; define error_status semantics

  • Unknown type in some translation units: struct ctrace is not declared here. Either forward-declare it or include <ctraces/ctraces.h>.
  • strcmp is used but <string.h> isn’t included in this header.
  • error_status is exposed but not documented/guaranteed to be set by the implementation.

Apply:

@@
-#include <stdint.h>
+#include <stdint.h>
+#include <string.h>
+
+/* Forward declaration to allow users to include this header without
+ * pulling in <ctraces/ctraces.h> everywhere. */
+struct ctrace;
@@
-struct ctrace *flb_opentelemetry_json_traces_to_ctrace(const char *body, size_t len,
-                                                       int *error_status);
+/* Converts an OTLP JSON Traces payload to a CTraces context.
+ * On failure returns NULL and, if error_status != NULL, sets it to a non‑zero code. */
+struct ctrace *flb_opentelemetry_json_traces_to_ctrace(const char *body, size_t len,
+                                                       int *error_status);

Optionally, introduce trace‑specific error codes in this header in a follow‑up, instead of reusing LOGS codes.

Committable suggestion skipped: line range outside the PR's diff.

🤖 Prompt for AI Agents
In include/fluent-bit/flb_opentelemetry.h around lines 127-129, three issues
must be fixed: forward-declare or include the definition for struct ctrace
(e.g., add a forward declaration "struct ctrace;" or include the appropriate
header <ctraces/ctraces.h>) so translation units know the type; add #include
<string.h> to this header (or ensure the header that uses strcmp includes it) so
string functions are declared; and document and guarantee error_status semantics
by changing the function comment/signature notes to state when error_status is
set and what values mean (e.g., 0 on success, non-zero on error) — ensure the
implementation sets *error_status in all return paths; optionally leave room to
add trace-specific error codes later.

/* OpenTelemetry utils */
int flb_otel_utils_find_map_entry_by_key(msgpack_object_map *map,
char *key,
Expand Down
Loading
Loading