@@ -112,6 +112,45 @@ static void mpack_buffer_flush(mpack_writer_t* writer, const char* buffer, size_
112112 flb_sds_cat_safe (& ctx -> packbuf , buffer , count );
113113}
114114
115+ static void pack_result_mpack (lua_State * l ,
116+ mpack_writer_t * writer ,
117+ struct flb_lua_l2c_config * l2cc ,
118+ struct flb_time * t )
119+ {
120+ int i ;
121+ int len ;
122+
123+ if (lua_type (l , -1 ) != LUA_TTABLE ) {
124+ return ;
125+ }
126+
127+ len = flb_lua_arraylength (l );
128+ if (len > 0 ) {
129+ /* record split */
130+ for (i = 1 ; i <= len ; i ++ ) {
131+ /* write array tag */
132+ mpack_write_tag (writer , mpack_tag_array (2 ));
133+ /* write timestamp */
134+ flb_time_append_to_mpack (writer , t , 0 );
135+ /* get the subrecord */
136+ lua_rawgeti (l , -1 , i );
137+ /* convert */
138+ flb_lua_tompack (l , writer , 0 , l2cc );
139+ lua_pop (l , 1 );
140+ }
141+ }
142+ else {
143+ /* write array tag */
144+ mpack_write_tag (writer , mpack_tag_array (2 ));
145+ /* write timestamp */
146+ flb_time_append_to_mpack (writer , t , 0 );
147+ /* convert */
148+ flb_lua_tompack (l , writer , 0 , l2cc );
149+ }
150+ /* pop */
151+ lua_pop (l , 1 );
152+ }
153+
115154static int cb_lua_filter_mpack (const void * data , size_t bytes ,
116155 const char * tag , int tag_len ,
117156 void * * out_buf , size_t * out_bytes ,
@@ -251,13 +290,8 @@ static int cb_lua_filter_mpack(const void *data, size_t bytes,
251290 mpack_writer_init (& writer , writebuf , sizeof (writebuf ));
252291 mpack_writer_set_context (& writer , ctx );
253292 mpack_writer_set_flush (& writer , mpack_buffer_flush );
254- /* write array tag */
255- mpack_write_tag (& writer , mpack_tag_array (2 ));
256- /* write timestamp: convert from double to Fluent Bit format */
257- flb_time_append_to_mpack (& writer , & t , 0 );
258- /* write the lua table */
259- flb_lua_tompack (ctx -> lua -> state , & writer , 0 , & ctx -> l2cc );
260- lua_pop (ctx -> lua -> state , 1 );
293+ /* write the result */
294+ pack_result_mpack (ctx -> lua -> state , & writer , & ctx -> l2cc , & t );
261295 /* flush the writer */
262296 mpack_writer_flush_message (& writer );
263297 mpack_writer_destroy (& writer );
0 commit comments