28
28
#include <fluent-bit/flb_kv.h>
29
29
#include <fluent-bit/flb_log_event_decoder.h>
30
30
#include <fluent-bit/flb_log_event_encoder.h>
31
+ #include <fluent-bit/flb_msgpack_append_message.h>
31
32
#include <msgpack.h>
32
33
33
34
#include <string.h>
34
35
#include <fluent-bit.h>
35
- #include <time.h>
36
36
37
37
#include "filter_parser.h"
38
38
@@ -186,6 +186,8 @@ static int cb_parser_filter(const void *data, size_t bytes,
186
186
int key_len ;
187
187
const char * val_str ;
188
188
int val_len ;
189
+ char * parsed_buf ;
190
+ size_t parsed_size ;
189
191
char * out_buf ;
190
192
size_t out_size ;
191
193
struct flb_time parsed_time ;
@@ -229,6 +231,7 @@ static int cb_parser_filter(const void *data, size_t bytes,
229
231
& log_decoder ,
230
232
& log_event )) == FLB_EVENT_DECODER_SUCCESS ) {
231
233
out_buf = NULL ;
234
+ parsed_buf = NULL ;
232
235
append_arr_i = 0 ;
233
236
234
237
flb_time_copy (& tm , & log_event .timestamp );
@@ -276,7 +279,7 @@ static int cb_parser_filter(const void *data, size_t bytes,
276
279
flb_time_zero (& parsed_time );
277
280
278
281
parse_ret = flb_parser_do (fp -> parser , val_str , val_len ,
279
- (void * * ) & out_buf , & out_size ,
282
+ (void * * ) & parsed_buf , & parsed_size ,
280
283
& parsed_time );
281
284
if (parse_ret >= 0 ) {
282
285
/*
@@ -320,13 +323,13 @@ static int cb_parser_filter(const void *data, size_t bytes,
320
323
& log_encoder , log_event .metadata );
321
324
}
322
325
323
- if (out_buf != NULL ) {
326
+ if (parsed_buf != NULL ) {
327
+
324
328
if (ctx -> reserve_data ) {
325
329
char * new_buf = NULL ;
326
330
int new_size ;
327
331
int ret ;
328
-
329
- ret = flb_msgpack_expand_map (out_buf , out_size ,
332
+ ret = flb_msgpack_expand_map (parsed_buf , parsed_size ,
330
333
append_arr , append_arr_len ,
331
334
& new_buf , & new_size );
332
335
if (ret == -1 ) {
@@ -339,6 +342,30 @@ static int cb_parser_filter(const void *data, size_t bytes,
339
342
return FLB_FILTER_NOTOUCH ;
340
343
}
341
344
345
+ out_buf = new_buf ;
346
+ out_size = new_size ;
347
+ }
348
+ else {
349
+ out_buf = strdup (parsed_buf );
350
+ out_size = parsed_size ;
351
+ }
352
+ if (ctx -> hash_value_field ) {
353
+ char * new_buf = NULL ;
354
+ size_t new_size ;
355
+ int ret ;
356
+ ret = flb_msgpack_append_map_to_record (& new_buf , & new_size ,
357
+ flb_sds_create ("parsed" ),
358
+ out_buf , out_size ,
359
+ parsed_buf ,parsed_size );
360
+ if ( ret != FLB_MAP_EXPAND_SUCCESS ){
361
+ flb_plg_error (ctx -> ins , "cannot append parsed entry to record" );
362
+
363
+ flb_log_event_decoder_destroy (& log_decoder );
364
+ flb_log_event_encoder_destroy (& log_encoder );
365
+ flb_free (append_arr );
366
+
367
+ return FLB_FILTER_NOTOUCH ;
368
+ }
342
369
flb_free (out_buf );
343
370
out_buf = new_buf ;
344
371
out_size = new_size ;
@@ -351,6 +378,7 @@ static int cb_parser_filter(const void *data, size_t bytes,
351
378
}
352
379
353
380
flb_free (out_buf );
381
+ flb_free (parsed_buf );
354
382
ret = FLB_FILTER_MODIFIED ;
355
383
}
356
384
else {
0 commit comments