|
22 | 22 | #include <fluent-bit/flb_error.h> |
23 | 23 | #include <fluent-bit/flb_pack.h> |
24 | 24 | #include <fluent-bit/flb_gzip.h> |
| 25 | +#include <fluent-bit/flb_record_accessor.h> |
| 26 | +#include <fluent-bit/flb_ra_key.h> |
25 | 27 |
|
26 | 28 | #include <monkey/monkey.h> |
27 | 29 | #include <monkey/mk_core.h> |
@@ -245,67 +247,32 @@ static int send_response(struct in_elasticsearch_bulk_conn *conn, int http_statu |
245 | 247 | /* implements functionality to get tag from key in record */ |
246 | 248 | static flb_sds_t tag_key(struct flb_in_elasticsearch *ctx, msgpack_object *map) |
247 | 249 | { |
248 | | - size_t map_size = map->via.map.size; |
249 | | - msgpack_object_kv *kv; |
250 | | - msgpack_object key; |
251 | | - msgpack_object val; |
252 | | - char *key_str = NULL; |
253 | | - char *val_str = NULL; |
254 | | - size_t key_str_size = 0; |
255 | | - size_t val_str_size = 0; |
256 | | - int j; |
257 | | - int check = FLB_FALSE; |
258 | | - int found = FLB_FALSE; |
259 | | - flb_sds_t tag; |
260 | | - |
261 | | - kv = map->via.map.ptr; |
| 250 | + flb_sds_t tag = NULL; |
| 251 | + struct flb_ra_value *ra_val; |
262 | 252 |
|
263 | | - for(j=0; j < map_size; j++) { |
264 | | - check = FLB_FALSE; |
265 | | - found = FLB_FALSE; |
266 | | - key = (kv+j)->key; |
267 | | - if (key.type == MSGPACK_OBJECT_BIN) { |
268 | | - key_str = (char *) key.via.bin.ptr; |
269 | | - key_str_size = key.via.bin.size; |
270 | | - check = FLB_TRUE; |
271 | | - } |
272 | | - if (key.type == MSGPACK_OBJECT_STR) { |
273 | | - key_str = (char *) key.via.str.ptr; |
274 | | - key_str_size = key.via.str.size; |
275 | | - check = FLB_TRUE; |
276 | | - } |
277 | | - |
278 | | - if (check == FLB_TRUE) { |
279 | | - if (strncmp(ctx->tag_key, key_str, key_str_size) == 0) { |
280 | | - val = (kv+j)->val; |
281 | | - if (val.type == MSGPACK_OBJECT_BIN) { |
282 | | - val_str = (char *) val.via.bin.ptr; |
283 | | - val_str_size = val.via.str.size; |
284 | | - found = FLB_TRUE; |
285 | | - break; |
286 | | - } |
287 | | - if (val.type == MSGPACK_OBJECT_STR) { |
288 | | - val_str = (char *) val.via.str.ptr; |
289 | | - val_str_size = val.via.str.size; |
290 | | - found = FLB_TRUE; |
291 | | - break; |
292 | | - } |
293 | | - } |
294 | | - } |
| 253 | + /* If no record accessor is configured, return NULL */ |
| 254 | + if (!ctx->ra_tag_key) { |
| 255 | + return NULL; |
295 | 256 | } |
296 | 257 |
|
297 | | - if (found == FLB_TRUE) { |
298 | | - tag = flb_sds_create_len(val_str, val_str_size); |
299 | | - if (!tag) { |
300 | | - flb_errno(); |
301 | | - return NULL; |
302 | | - } |
303 | | - return tag; |
| 258 | + /* Use record accessor to get the value */ |
| 259 | + ra_val = flb_ra_get_value_object(ctx->ra_tag_key, *map); |
| 260 | + if (!ra_val) { |
| 261 | + flb_plg_warn(ctx->ins, "Could not find tag_key %s in record", ctx->tag_key); |
| 262 | + return NULL; |
304 | 263 | } |
305 | 264 |
|
| 265 | + /* Convert the value to string */ |
| 266 | + if (ra_val->type == FLB_RA_STRING) { |
| 267 | + tag = flb_sds_create_len(ra_val->o.via.str.ptr, ra_val->o.via.str.size); |
| 268 | + } |
| 269 | + else { |
| 270 | + flb_plg_error(ctx->ins, "tag_key %s value is not a string or binary", ctx->tag_key); |
| 271 | + } |
306 | 272 |
|
307 | | - flb_plg_error(ctx->ins, "Could not find tag_key %s in record", ctx->tag_key); |
308 | | - return NULL; |
| 273 | + /* Clean up the record accessor value */ |
| 274 | + flb_ra_key_value_destroy(ra_val); |
| 275 | + return tag; |
309 | 276 | } |
310 | 277 |
|
311 | 278 | static int get_write_op(struct flb_in_elasticsearch *ctx, msgpack_object *map, flb_sds_t *out_write_op, size_t *out_key_size) |
|
0 commit comments