2525#include <fluent-bit/flb_pack.h>
2626#include <fluent-bit/flb_sds.h>
2727#include <fluent-bit/flb_log_event_decoder.h>
28+ #include <fluent-bit/flb_record_accessor.h>
29+ #include <fluent-bit/flb_ra_key.h>
2830
2931#include "syslog_conf.h"
3032
@@ -545,100 +547,68 @@ static flb_sds_t msgpack_to_sd(struct flb_syslog *ctx,
545547 return * s ;
546548}
547549
550+ /* Use val array to return its string value unless its a string and return its pointer */
551+ static void extract_value_from_ra_result (struct flb_ra_value * rval , char * * val ,
552+ int val_size , int * val_len ) {
553+ if (rval -> o .type == MSGPACK_OBJECT_BOOLEAN ) {
554+ * val = rval -> o .via .boolean ? "true" : "false" ;
555+ * val_len = rval -> o .via .boolean ? 4 : 5 ;
556+ }
557+ else if (rval -> o .type == MSGPACK_OBJECT_POSITIVE_INTEGER ) {
558+ * val_len = snprintf (* val , val_size - 1 ,
559+ "%" PRIu64 , rval -> o .via .u64 );
560+ }
561+ else if (rval -> o .type == MSGPACK_OBJECT_NEGATIVE_INTEGER ) {
562+ * val_len = snprintf (* val , val_size - 1 ,
563+ "%" PRId64 , rval -> o .via .i64 );
564+ }
565+ else if (rval -> o .type == MSGPACK_OBJECT_FLOAT ) {
566+ * val_len = snprintf (* val , val_size - 1 ,
567+ "%f" , rval -> o .via .f64 );
568+ }
569+ else if (rval -> o .type == MSGPACK_OBJECT_STR ) {
570+ /* String value */
571+ * val = rval -> o .via .str .ptr ;
572+ * val_len = rval -> o .via .str .size ;
573+ }
574+ else if (rval -> o .type == MSGPACK_OBJECT_BIN ) {
575+ /* Bin value */
576+ * val = rval -> o .via .bin .ptr ;
577+ * val_len = rval -> o .via .bin .size ;
578+ }
579+ else {
580+ * val = NULL ;
581+ * val_len = 0 ;
582+ }
583+ }
584+
548585static int msgpack_to_syslog (struct flb_syslog * ctx , msgpack_object * o ,
549586 struct syslog_msg * msg )
550587{
551588 int i ;
552- int loop ;
553589 struct mk_list * head ;
554- struct flb_config_map_val * mv ;
590+ struct mk_list * tmp ;
591+ struct flb_syslog_sd_key * sd_key_item ;
592+ struct flb_ra_value * rval = NULL ;
593+ char * val = NULL ;
594+ int val_len = 0 ;
595+ char temp [48 ] = {0 };
555596
556597 if (o == NULL ) {
557598 return -1 ;
558599 }
559600
560- loop = o -> via .map .size ;
561- if (loop != 0 ) {
562- msgpack_object_kv * p = o -> via .map .ptr ;
563-
564- for (i = 0 ; i < loop ; i ++ ) {
565- char temp [48 ] = {0 };
566- const char * key = NULL ;
567- int key_len = 0 ;
568- const char * val = NULL ;
569- int val_len = 0 ;
570-
571- msgpack_object * k = & p [i ].key ;
572- msgpack_object * v = & p [i ].val ;
573-
574- if (k -> type != MSGPACK_OBJECT_BIN && k -> type != MSGPACK_OBJECT_STR ){
575- continue ;
576- }
577-
578- if (k -> type == MSGPACK_OBJECT_STR ) {
579- key = k -> via .str .ptr ;
580- key_len = k -> via .str .size ;
581- }
582- else {
583- key = k -> via .bin .ptr ;
584- key_len = k -> via .bin .size ;
585- }
586-
587- if (v -> type == MSGPACK_OBJECT_MAP ) {
588- if (ctx -> sd_keys ) {
589- flb_config_map_foreach (head , mv , ctx -> sd_keys ) {
590- if ((key_len == flb_sds_len (mv -> val .str )) &&
591- strncmp (key , mv -> val .str , flb_sds_len (mv -> val .str )) == 0 ) {
592- msgpack_to_sd (ctx , & (msg -> sd ), key , key_len , v );
593- break ;
594- }
595- }
596- }
597- continue ;
598- }
599-
600- if (v -> type == MSGPACK_OBJECT_BOOLEAN ) {
601- val = v -> via .boolean ? "true" : "false" ;
602- val_len = v -> via .boolean ? 4 : 5 ;
603- }
604- else if (v -> type == MSGPACK_OBJECT_POSITIVE_INTEGER ) {
601+ if (ctx -> ra_severity_key != NULL ) {
602+ if (msg -> severity == -1 ) {
603+ rval = flb_ra_get_value_object (ctx -> ra_severity_key , * o );
604+ if (rval ) {
605605 val = temp ;
606- val_len = snprintf (temp , sizeof (temp ) - 1 ,
607- "%" PRIu64 , v -> via .u64 );
608- }
609- else if (v -> type == MSGPACK_OBJECT_NEGATIVE_INTEGER ) {
610- val = temp ;
611- val_len = snprintf (temp , sizeof (temp ) - 1 ,
612- "%" PRId64 , v -> via .i64 );
613- }
614- else if (v -> type == MSGPACK_OBJECT_FLOAT ) {
615- val = temp ;
616- val_len = snprintf (temp , sizeof (temp ) - 1 ,
617- "%f" , v -> via .f64 );
618- }
619- else if (v -> type == MSGPACK_OBJECT_STR ) {
620- /* String value */
621- val = v -> via .str .ptr ;
622- val_len = v -> via .str .size ;
623- }
624- else if (v -> type == MSGPACK_OBJECT_BIN ) {
625- /* Bin value */
626- val = v -> via .bin .ptr ;
627- val_len = v -> via .bin .size ;
628- }
629-
630- if (!val || !key ) {
631- continue ;
632- }
633-
634- if ((ctx -> severity_key != NULL ) &&
635- flb_sds_cmp (ctx -> severity_key , key , key_len ) == 0 ) {
636- if (msg -> severity == -1 ) {
606+ extract_value_from_ra_result (rval , & val , sizeof (temp ) - 1 , & val_len );
607+ if (val != NULL ) {
637608 if ((val_len == 1 ) && (val [0 ] >= '0' && val [0 ] <= '7' )) {
638609 msg -> severity = val [0 ]- '0' ;
639610 }
640611 else {
641- int i ;
642612 for (i = 0 ; syslog_severity [i ].name != NULL ; i ++ ) {
643613 if ((syslog_severity [i ].len == val_len ) &&
644614 (!strncasecmp (syslog_severity [i ].name , val , val_len ))) {
@@ -651,10 +621,17 @@ static int msgpack_to_syslog(struct flb_syslog *ctx, msgpack_object *o,
651621 }
652622 }
653623 }
624+ flb_ra_key_value_destroy (rval );
654625 }
655- else if ((ctx -> facility_key != NULL ) &&
656- flb_sds_cmp (ctx -> facility_key , key , key_len ) == 0 ) {
657- if (msg -> facility == -1 ) {
626+ }
627+ }
628+ if (ctx -> ra_facility_key != NULL ) {
629+ if (msg -> facility == -1 ) {
630+ rval = flb_ra_get_value_object (ctx -> ra_facility_key , * o );
631+ if (rval ) {
632+ val = temp ;
633+ extract_value_from_ra_result (rval , & val , sizeof (temp ) - 1 , & val_len );
634+ if (val != NULL ) {
658635 if ((val_len == 1 ) && (val [0 ] >= '0' && val [0 ] <= '9' )) {
659636 msg -> facility = val [0 ]- '0' ;
660637 }
@@ -670,7 +647,6 @@ static int msgpack_to_syslog(struct flb_syslog *ctx, msgpack_object *o,
670647 }
671648 }
672649 else {
673- int i ;
674650 for (i = 0 ; syslog_facility [i ].name != NULL ; i ++ ) {
675651 if ((syslog_facility [i ].len == val_len ) &&
676652 (!strncasecmp (syslog_facility [i ].name , val , val_len ))) {
@@ -683,36 +659,81 @@ static int msgpack_to_syslog(struct flb_syslog *ctx, msgpack_object *o,
683659 }
684660 }
685661 }
662+ flb_ra_key_value_destroy (rval );
686663 }
687- else if ((ctx -> hostname_key != NULL ) &&
688- flb_sds_cmp (ctx -> hostname_key , key , key_len ) == 0 ) {
689- if (!msg -> hostname ) {
690- msg -> hostname = flb_sds_create_len (val , val_len );
691- }
664+ }
665+ }
666+
667+ if (ctx -> ra_hostname_key != NULL ) {
668+ rval = flb_ra_get_value_object (ctx -> ra_hostname_key , * o );
669+ if (rval ) {
670+ val = temp ;
671+ extract_value_from_ra_result (rval , & val , sizeof (temp ) - 1 , & val_len );
672+ if (!msg -> hostname ) {
673+ msg -> hostname = flb_sds_create_len (val , val_len );
692674 }
693- else if ((ctx -> appname_key != NULL ) &&
694- flb_sds_cmp (ctx -> appname_key , key , key_len ) == 0 ) {
695- if (!msg -> appname ) {
696- msg -> appname = flb_sds_create_len (val , val_len );
697- }
675+ flb_ra_key_value_destroy (rval );
676+ }
677+ }
678+
679+ if (ctx -> ra_appname_key != NULL ) {
680+ rval = flb_ra_get_value_object (ctx -> ra_appname_key , * o );
681+ if (rval ) {
682+ val = temp ;
683+ extract_value_from_ra_result (rval , & val , sizeof (temp ) - 1 , & val_len );
684+ if (!msg -> appname ) {
685+ msg -> appname = flb_sds_create_len (val , val_len );
698686 }
699- else if ((ctx -> procid_key != NULL ) &&
700- flb_sds_cmp (ctx -> procid_key , key , key_len ) == 0 ) {
701- if (!msg -> procid ) {
702- msg -> procid = flb_sds_create_len (val , val_len );
703- }
687+ flb_ra_key_value_destroy (rval );
688+ }
689+ }
690+
691+ if (ctx -> ra_procid_key != NULL ) {
692+ rval = flb_ra_get_value_object (ctx -> ra_procid_key , * o );
693+ if (rval ) {
694+ val = temp ;
695+ extract_value_from_ra_result (rval , & val , sizeof (temp ) - 1 , & val_len );
696+ if (!msg -> procid ) {
697+ msg -> procid = flb_sds_create_len (val , val_len );
704698 }
705- else if ((ctx -> msgid_key != NULL ) &&
706- flb_sds_cmp (ctx -> msgid_key , key , key_len ) == 0 ) {
707- if (!msg -> msgid ) {
708- msg -> msgid = flb_sds_create_len (val , val_len );
709- }
699+ flb_ra_key_value_destroy (rval );
700+ }
701+ }
702+
703+ if (ctx -> ra_msgid_key != NULL ) {
704+ rval = flb_ra_get_value_object (ctx -> ra_msgid_key , * o );
705+ if (rval ) {
706+ val = temp ;
707+ extract_value_from_ra_result (rval , & val , sizeof (temp ) - 1 , & val_len );
708+ if (!msg -> msgid ) {
709+ msg -> msgid = flb_sds_create_len (val , val_len );
710+ }
711+ flb_ra_key_value_destroy (rval );
712+ }
713+ }
714+
715+ if (ctx -> ra_message_key != NULL ) {
716+ rval = flb_ra_get_value_object (ctx -> ra_message_key , * o );
717+ if (rval ) {
718+ val = temp ;
719+ extract_value_from_ra_result (rval , & val , sizeof (temp ) - 1 , & val_len );
720+ if (!msg -> message ) {
721+ msg -> message = flb_sds_create_len (val , val_len );
710722 }
711- else if ((ctx -> message_key != NULL ) &&
712- flb_sds_cmp (ctx -> message_key , key , key_len ) == 0 ) {
713- if (!msg -> message ) {
714- msg -> message = flb_sds_create_len (val , val_len );
723+ flb_ra_key_value_destroy (rval );
724+ }
725+ }
726+
727+ if (ctx -> ra_sd_keys != NULL ) {
728+ mk_list_foreach_safe (head , tmp , ctx -> ra_sd_keys ) {
729+ sd_key_item = mk_list_entry (head , struct flb_syslog_sd_key , _head );
730+ rval = flb_ra_get_value_object (sd_key_item -> ra_sd_key , * o );
731+ if (rval ) {
732+ if (rval -> o .type == MSGPACK_OBJECT_MAP ) {
733+ msgpack_to_sd (ctx , & (msg -> sd ), sd_key_item -> key_normalized ,
734+ flb_sds_len (sd_key_item -> key_normalized ), & rval -> o );
715735 }
736+ flb_ra_key_value_destroy (rval );
716737 }
717738 }
718739 }
0 commit comments