Skip to content

Commit

Permalink
decode_statsd: Make optional for parsing label
Browse files Browse the repository at this point in the history
Signed-off-by: Hiroshi Hatake <[email protected]>
  • Loading branch information
cosmo0920 committed Jul 22, 2024
1 parent 01c9034 commit c00a8a6
Showing 1 changed file with 50 additions and 49 deletions.
99 changes: 50 additions & 49 deletions src/cmt_decode_statsd.c
Original file line number Diff line number Diff line change
Expand Up @@ -120,67 +120,68 @@ static int decode_labels(struct cmt *cmt,
return CMT_DECODE_STATSD_ALLOCATION_ERROR;
}

label_kv = strtok_r(labels, ",", &store);

while (label_kv != NULL) {
colon = strchr(label_kv, ':');
label_k = cfl_sds_create_len(label_kv, colon - label_kv);
if (label_k == NULL) {
free(value_index_list);
return CMT_DECODE_STATSD_INVALID_TAG_FORMAT_ERROR;
}
label_v = cfl_sds_create_len(colon + 1, strlen(label_kv) - strlen(label_k) - 1);
if (label_v == NULL) {
cfl_sds_destroy(label_k);
free(value_index_list);
label_found = CMT_FALSE;
label_index = 0;

return CMT_DECODE_STATSD_INVALID_TAG_FORMAT_ERROR;
}

label_found = CMT_FALSE;
label_index = 0;
if (incremental) {
label_k = cfl_sds_create("incremental");
result = append_new_map_label_key(map, label_k);
cfl_sds_destroy(label_k);

cfl_list_foreach(label_iterator, &map->label_keys) {
current_label = cfl_list_entry(label_iterator, struct cmt_map_label, _head);
if (result == CMT_DECODE_STATSD_SUCCESS) {
value_index_list[label_index] = (void *) cfl_sds_create("true");
}
}

if (strcmp(current_label->name, label_k) == 0) {
label_found = CMT_TRUE;
if (labels != NULL) {
label_kv = strtok_r(labels, ",", &store);

while (label_kv != NULL) {
colon = strchr(label_kv, ':');
label_k = cfl_sds_create_len(label_kv, colon - label_kv);
if (label_k == NULL) {
free(value_index_list);
return CMT_DECODE_STATSD_INVALID_TAG_FORMAT_ERROR;
}
label_v = cfl_sds_create_len(colon + 1, strlen(label_kv) - strlen(label_k) - 1);
if (label_v == NULL) {
cfl_sds_destroy(label_k);
free(value_index_list);

break;
return CMT_DECODE_STATSD_INVALID_TAG_FORMAT_ERROR;
}

label_index++;
}
cfl_list_foreach(label_iterator, &map->label_keys) {
current_label = cfl_list_entry(label_iterator, struct cmt_map_label, _head);

if (label_index > 127) {
cfl_sds_destroy(label_k);
cfl_sds_destroy(label_v);
free(value_index_list);
if (strcmp(current_label->name, label_k) == 0) {
label_found = CMT_TRUE;

return CMT_DECODE_STATSD_INVALID_ARGUMENT_ERROR;
}
break;
}

if (label_found == CMT_FALSE) {
result = append_new_map_label_key(map, label_k);
}
label_index++;
}

if (result == CMT_DECODE_STATSD_SUCCESS) {
value_index_list[label_index] = (void *) label_v;
}
if (label_index > 127) {
cfl_sds_destroy(label_k);
cfl_sds_destroy(label_v);
free(value_index_list);

cfl_sds_destroy(label_k);
return CMT_DECODE_STATSD_INVALID_ARGUMENT_ERROR;
}

label_kv = strtok_r(NULL, ",", &store);
}
if (label_found == CMT_FALSE) {
result = append_new_map_label_key(map, label_k);
}

if (incremental) {
label_k = cfl_sds_create("incremental");
result = append_new_map_label_key(map, label_k);
cfl_sds_destroy(label_k);
label_index++;
if (result == CMT_DECODE_STATSD_SUCCESS) {
value_index_list[label_index] = (void *) label_v;
}

if (result == CMT_DECODE_STATSD_SUCCESS) {
value_index_list[label_index] = (void *) cfl_sds_create("true");
cfl_sds_destroy(label_k);

label_kv = strtok_r(NULL, ",", &store);
}
}

Expand Down Expand Up @@ -456,8 +457,8 @@ static int cmt_get_statsd_type(char *str)

static int statsd_process_line(struct cmt *cmt, char *line, int flags)
{
char *colon, *bar, *atmark, *labels;
struct cmt_statsd_message m;
char *colon = NULL, *bar = NULL, *atmark = NULL, *labels = NULL;
struct cmt_statsd_message m = {0};

/*
* bucket:value|type|@sample_rate|#key1:value1,key2:value2,...
Expand Down

0 comments on commit c00a8a6

Please sign in to comment.