Skip to content

Commit b98b935

Browse files
Aditya Prajapatiedsiper
authored andcommitted
in_opentelemetry: add support for raw traces
Signed-off-by: Aditya Prajapati <[email protected]>
1 parent 14e3c2d commit b98b935

File tree

2 files changed

+43
-9
lines changed

2 files changed

+43
-9
lines changed

plugins/in_opentelemetry/opentelemetry.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,5 +172,5 @@ struct flb_input_plugin in_opentelemetry_plugin = {
172172
.cb_exit = in_opentelemetry_exit,
173173
.config_map = config_map,
174174
.flags = FLB_INPUT_NET,
175-
.event_type = FLB_INPUT_METRICS
175+
.event_type = FLB_INPUT_LOGS | FLB_INPUT_METRICS
176176
};

plugins/in_opentelemetry/opentelemetry_prot.c

Lines changed: 42 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -84,10 +84,10 @@ static int send_response(struct http_conn *conn, int http_status, char *message)
8484
}
8585

8686

87-
static int process_payload(struct flb_opentelemetry *ctx, struct http_conn *conn,
88-
flb_sds_t tag,
89-
struct mk_http_session *session,
90-
struct mk_http_request *request)
87+
static int process_payload_metrics(struct flb_opentelemetry *ctx, struct http_conn *conn,
88+
flb_sds_t tag,
89+
struct mk_http_session *session,
90+
struct mk_http_request *request)
9191
{
9292
struct cmt *decoded_context;
9393
size_t offset;
@@ -109,6 +109,30 @@ static int process_payload(struct flb_opentelemetry *ctx, struct http_conn *conn
109109
return 0;
110110
}
111111

112+
static int process_payload_traces(struct flb_opentelemetry *ctx, struct http_conn *conn,
113+
flb_sds_t tag,
114+
struct mk_http_session *session,
115+
struct mk_http_request *request)
116+
{
117+
msgpack_packer mp_pck;
118+
msgpack_sbuffer mp_sbuf;
119+
120+
msgpack_sbuffer_init(&mp_sbuf);
121+
msgpack_packer_init(&mp_pck, &mp_sbuf, msgpack_sbuffer_write);
122+
123+
msgpack_pack_array(&mp_pck, 2);
124+
flb_pack_time_now(&mp_pck);
125+
msgpack_pack_map(&mp_pck, 1);
126+
msgpack_pack_str_with_body(&mp_pck, "trace", 5);
127+
msgpack_pack_str_with_body(&mp_pck, request->data.data, request->data.len);
128+
129+
ctx->ins->event_type = FLB_INPUT_LOGS;
130+
131+
flb_input_chunk_append_raw(ctx->ins, tag, flb_sds_len(tag), mp_sbuf.data, mp_sbuf.size);
132+
msgpack_sbuffer_destroy(&mp_sbuf);
133+
return 0;
134+
}
135+
112136
static inline int mk_http_point_header(mk_ptr_t *h,
113137
struct mk_http_parser *parser, int key)
114138
{
@@ -161,6 +185,12 @@ int opentelemetry_prot_handle(struct flb_opentelemetry *ctx, struct http_conn *c
161185
uri[request->uri.len] = '\0';
162186
}
163187

188+
if (strcmp(uri, "/metrics") != 0 && strcmp(uri, "/traces") != 0) {
189+
send_response(conn, 400, "error: invalid endpoint\n");
190+
mk_mem_free(uri);
191+
return -1;
192+
}
193+
164194
/* Try to match a query string so we can remove it */
165195
qs = strchr(uri, '?');
166196
if (qs) {
@@ -193,8 +223,6 @@ int opentelemetry_prot_handle(struct flb_opentelemetry *ctx, struct http_conn *c
193223
}
194224
}
195225

196-
mk_mem_free(uri);
197-
198226
/* Check if we have a Host header: Hostname ; port */
199227
mk_http_point_header(&request->host, &session->parser, MK_HEADER_HOST);
200228

@@ -227,7 +255,13 @@ int opentelemetry_prot_handle(struct flb_opentelemetry *ctx, struct http_conn *c
227255
return -1;
228256
}
229257

230-
ret = process_payload(ctx, conn, tag, session, request);
258+
if (strcmp(uri, "/metrics") == 0) {
259+
ret = process_payload_metrics(ctx, conn, tag, session, request);
260+
}
261+
else if (strcmp(uri, "/traces") == 0) {
262+
ret = process_payload_traces(ctx, conn, tag, session, request);
263+
}
264+
mk_mem_free(uri);
231265
flb_sds_destroy(tag);
232266
send_response(conn, ctx->successful_response_code, NULL);
233267
return ret;
@@ -242,4 +276,4 @@ int opentelemetry_prot_handle_error(struct flb_opentelemetry *ctx, struct http_c
242276
{
243277
send_response(conn, 400, "error: invalid request\n");
244278
return -1;
245-
}
279+
}

0 commit comments

Comments
 (0)