diff options
| author | chenzizhan <[email protected]> | 2024-08-01 14:12:46 +0800 |
|---|---|---|
| committer | chenzizhan <[email protected]> | 2024-08-01 14:12:46 +0800 |
| commit | ae4c5b46775a0b730169c2d3b13190163d50f262 (patch) | |
| tree | 5a3f3b9eee24be9117f29e655f5117b3a97aafc6 | |
| parent | f9dde08bcb7805c6ae8dd717100780def1fbc289 (diff) | |
api for stellar monitor query
| -rw-r--r-- | fs_easy_example.json | 35 | ||||
| -rw-r--r-- | include/fieldstat/fieldstat.h | 9 | ||||
| -rw-r--r-- | include/fieldstat/fieldstat_exporter.h | 1 | ||||
| -rw-r--r-- | src/cube.c | 16 | ||||
| -rw-r--r-- | src/cube.h | 2 | ||||
| -rw-r--r-- | src/fieldstat.c | 11 | ||||
| -rw-r--r-- | test/test_metric_counter.cpp | 5 | ||||
| -rw-r--r-- | test/test_register_and_reset.cpp | 21 |
8 files changed, 32 insertions, 68 deletions
diff --git a/fs_easy_example.json b/fs_easy_example.json deleted file mode 100644 index 2935a34..0000000 --- a/fs_easy_example.json +++ /dev/null @@ -1,35 +0,0 @@ -[ - { - "name": "-", - "tags": { - "direction": "incoming", - "app id": 1 - }, - "fields": { - "bytes": 585167, - "delay": "HISTEwAAAUYAAAAAAAAAAQAAAAAAAAABAAAAAAAAJxA/8AAAAAAAAJABbHh8ZnZccHp2gAFUaIABdmaCAXx0YoQBdGyMAXhsggF6eowBggGCAfAB6AGWAvQB9AHyAdYB4AHoAeoB3gHEAcwBrgKKAtgB5gPQA7QD5APIA8wD4gO+A+YDxAO2A8ADwgPAA8QD5gOEB5wHhAfQB9gHvAfwB6QHuAe6B/QGxAecB7QHqAfeB/INsA+ODtIO2g2QDo4OrA7WDtYN/A7qDcQN9A6WDpYP3h7OHqwdnhyeHYge7B2EHaQesB7QHaId+B2MHaYejh3gOvI6jDuyOqI7qjqMOpo7mDqeOvI6iDuiOrQ7lDqKOpZztHDuc+x2onbkdoR0hnSAdZR03naWdK5z6nX8dZh1vugBvOcBqusB2OsBkOgB+OkB3OoBxOoB9ukB9uwBqOwBnuoB8OkBxusBsugB7OoBptMD5tEDpNUDivcBAAAAAAAAAA==", - }, - "fields_delta": { - "bytes": 123, - "delay": "HISTEwAAAUYAAAAAAAAAAQAAAAAAAAABAAAAAAAAJxA/8AAAAAAAAJABbHh8ZnZccHp2gAFUaIABdmaCAXx0YoQBdGyMAXhsggF6eowBggGCAfAB6AGWAvQB9AHyAdYB4AHoAeoB3gHEAcwBrgKKAtgB5gPQA7QD5APIA8wD4gO+A+YDxAO2A8ADwgPAA8QD5gOEB5wHhAfQB9gHvAfwB6QHuAe6B/QGxAecB7QHqAfeB/INsA+ODtIO2g2QDo4OrA7WDtYN/A7qDcQN9A6WDpYP3h7OHqwdnhyeHYge7B2EHaQesB7QHaId+B2MHaYejh3gOvI6jDuyOqI7qjqMOpo7mDqeOvI6iDuiOrQ7lDqKOpZztHDuc+x2onbkdoR0hnSAdZR03naWdK5z6nX8dZh1vugBvOcBqusB2OsBkOgB+OkB3OoBxOoB9ukB9uwBqOwBnuoB8OkBxusBsugB7OoBptMD5tEDpNUDivcBAAAAAAAAAA==", - }, - "timestamp_ms": 5507527913, - "timestamp_ms_delta": 1002 - }, - { - "name": "-", - "tags": { - "direction": "outgoing", - "app id": 1 - }, - "fields": { - "bytes": 5857, - "delay": "HISTEwAAAUYAAAAAAAAAAQAAAAAAAAABAAAAAAAAJxA/8AAAAAAAAJABbHh8ZnZccHp2gAFUaIABdmaCAXx0YoQBdGyMAXhsggF6eowBggGCAfAB6AGWAvQB9AHyAdYB4AHoAeoB3gHEAcwBrgKKAtgB5gPQA7QD5APIA8wD4gO+A+YDxAO2A8ADwgPAA8QD5gOEB5wHhAfQB9gHvAfwB6QHuAe6B/QGxAecB7QHqAfeB/INsA+ODtIO2g2QDo4OrA7WDtYN/A7qDcQN9A6WDpYP3h7OHqwdnhyeHYge7B2EHaQesB7QHaId+B2MHaYejh3gOvI6jDuyOqI7qjqMOpo7mDqeOvI6iDuiOrQ7lDqKOpZztHDuc+x2onbkdoR0hnSAdZR03naWdK5z6nX8dZh1vugBvOcBqusB2OsBkOgB+OkB3OoBxOoB9ukB9uwBqOwBnuoB8OkBxusBsugB7OoBptMD5tEDpNUDivcBAAAAAAAAAA==", - "bytes_delta": 31, - "delay_delta": "HISTEwAAAOgAAAAAAAAAAQAAAAAAAAABAAAAAAAAJxA/8AAAAAAAAAQEAQYKCgIEAggECgYECgQGBAYIDgoMAgQBCgQECAICEAIUDBIUEg4ECAwKDBQGFCAWFBYYFBIcIhogGhYiEhg6JDQ4NDw+GjouOC4oMC4ufGZidGhaYGBMXGJYYk5eXugBrAHYAdQB7AHeAcoB3AHAAfIBwAHYAdgBwgG+Ae4BzgOqA6QDsAOUA64DrAOMA4gD5gL4ArAD4AKYA44DtAOCBvgFkgaiBrIG1AasBswG0ga2BqAGpAaKBrYGpAamBvAM3AzWDI4NgA2mDKIMkg2uDIANiA3gDMQMlA2ODfIM2hikGf4XjA0AAAAAAAAA" - }, - "timestamp_ms": 5507527913, - "timestamp_ms_delta": 1002 - } -] - diff --git a/include/fieldstat/fieldstat.h b/include/fieldstat/fieldstat.h index 0bffe6c..86b20d8 100644 --- a/include/fieldstat/fieldstat.h +++ b/include/fieldstat/fieldstat.h @@ -15,6 +15,7 @@ extern "C" #define FS_ERR_INVALID_METRIC_ID -4 #define FS_ERR_INVALID_DIMENSION -5 #define FS_ERR_INVALID_PARAM -6 +#define FS_ERR_INVALID_METRIC_NAME -7 #define FS_ERR_INVALID_METRIC_TYPE -8 #define FS_ERR_MAX_N_CELL_LESS_THAN_ZERO -9 #define FS_ERR_DIMENSION_ALREADY_EXISTS -10 @@ -174,11 +175,6 @@ struct field_list */ void fieldstat_get_cubes(const struct fieldstat *instance, int **cube_ids, int *n_cube); -/* - * @brief Get all the registered metrics by fieldstat_register_counter, fieldstat_register_hll, fieldstat_register_histogram. -*/ -void fieldstat_cube_get_metrics(const struct fieldstat *instance, int cube_id, int **metric_id_out, size_t *n_metric); - void fieldstat_get_metric_in_cell(const struct fieldstat *instance, int cube_id, const struct field_list *cell_dimensions, int **metric_id_out, size_t *n_metric_out); // query the name of the metric, return NULL if metric_id is invalid. @@ -191,6 +187,8 @@ enum metric_type fieldstat_get_metric_type(const struct fieldstat *instance, int get the cell_dimensions added to cube when calling fieldstat_counter_incrby, fieldstat_counter_set, fieldstat_hll_add, fieldstat_histogram_record. */ void fieldstat_cube_get_cells(const struct fieldstat *instance, int cube_id, struct field_list **cell_dimensions, size_t *n_cell); +//todo: topk 的输出应该是有序的,总不能外面再排一遍 +// todo:_cube_删了,因为其实所有的都跟cube有关 /* get the field of fieldstat_cube_create. User free them by calling fieldstat_field_list_arr_free(struct field_list *, 1) @@ -198,6 +196,7 @@ void fieldstat_cube_get_cells(const struct fieldstat *instance, int cube_id, str */ struct field_list *fieldstat_cube_get_dimensions(const struct fieldstat *instance, int cube_id); +int fieldstat_cube_get_metric_id_by_name(const struct fieldstat *instance, int cube_id, const char *metric_name); /* return a cube id corresponding to `cube_dimensions`. FS_ERR_INVALID_KEY is returned if the cube is not found. diff --git a/include/fieldstat/fieldstat_exporter.h b/include/fieldstat/fieldstat_exporter.h index e890167..dfa5782 100644 --- a/include/fieldstat/fieldstat_exporter.h +++ b/include/fieldstat/fieldstat_exporter.h @@ -16,6 +16,7 @@ struct fieldstat_json_exporter; struct fieldstat_json_exporter *fieldstat_json_exporter_new(); void fieldstat_json_exporter_set_global_dimension(struct fieldstat_json_exporter *exporter, const struct field tag_list[], size_t n_field); void fieldstat_json_exporter_set_name(struct fieldstat_json_exporter *exporter, const char *name); +// todo: 这个删除,对于easy,额外记录下,其实就是单独给奇怪的global tag 开个后门,python 和 .c 之间达成约定 void fieldstat_json_exporter_free(struct fieldstat_json_exporter *exporter); /* @@ -1376,18 +1376,12 @@ enum metric_type cube_get_metric_type(const struct cube *cube, int metric_id) { return metric->type; } -void cube_get_metrics(const struct cube *cube, int **metric_id_out, size_t *n_metric) +int cube_get_metric_id_by_name(const struct cube *cube, const char *metric_name) { - const struct metric_manifest **list = metric_manifest_manager_list(cube->manifest_manager, n_metric); - if (*n_metric == 0) { - *metric_id_out = NULL; - return; + const struct metric_manifest *metric = metric_manifest_manager_get_by_name(cube->manifest_manager, metric_name); + if (metric == NULL) { + return FS_ERR_INVALID_METRIC_NAME; } - int *tmp_ids = (int *)malloc(sizeof(int) * (*n_metric)); - *metric_id_out = tmp_ids; - - for (int i = 0; i < *n_metric; i++) { - tmp_ids[i] = list[i]->id; - } + return metric->id; } @@ -41,11 +41,11 @@ int cube_get_serialization_as_base64(const struct cube *cube, int metric_id, con int cube_get_cell_count(const struct cube *cube); enum sampling_mode cube_get_sampling_mode(const struct cube *cube); void cube_get_cells(const struct cube *cube, struct field_list **cell_dimensions, size_t *n_cell); -void cube_get_metrics(const struct cube *cube, int **metric_id_out, size_t *n_metric); void cube_get_metrics_in_cell(const struct cube *cube, const struct field_list *dimensions, int **metric_id_out, size_t *n_metric_out); struct field_list *cube_get_identifier(const struct cube *cube); const char *cube_get_metric_name(const struct cube *cube, int metric_id); enum metric_type cube_get_metric_type(const struct cube *cube, int metric_id); +int cube_get_metric_id_by_name(const struct cube *cube, const char *metric_name); /* -------------------------------------------------------------------------- */ /* cube manager */ diff --git a/src/fieldstat.c b/src/fieldstat.c index bb530f1..3ba01e4 100644 --- a/src/fieldstat.c +++ b/src/fieldstat.c @@ -383,7 +383,12 @@ void fieldstat_get_metric_in_cell(const struct fieldstat *instance, int cube_id, return cube_get_metrics_in_cell(cube, cell_dimensions, metric_id_out, n_metric_out); } -void fieldstat_cube_get_metrics(const struct fieldstat *instance, int cube_id, int **metric_id_out, size_t *n_metric) { +int fieldstat_cube_get_metric_id_by_name(const struct fieldstat *instance, int cube_id, const char *metric_name) +{ const struct cube *cube = cube_manager_get_cube_by_id(instance->cube_manager, cube_id); - cube_get_metrics(cube, metric_id_out, n_metric); -} + if (cube == NULL) { + return FS_ERR_INVALID_CUBE_ID; + } + + return cube_get_metric_id_by_name(cube, metric_name); +}
\ No newline at end of file diff --git a/test/test_metric_counter.cpp b/test/test_metric_counter.cpp index 98b52dd..b5b231d 100644 --- a/test/test_metric_counter.cpp +++ b/test/test_metric_counter.cpp @@ -167,6 +167,11 @@ TEST(metric_test_counter, topk_add_and_test_accuracy) printf("topk_add_and_test_accuracy Mean ratio e: %lld\n", error); EXPECT_LT(error, tag_list_num * 0.005); + // test sorting + for (size_t i = 0; i < n_cell - 1; i++) { + EXPECT_GE(my_fieldstat_counter_get(instance, 0, 0, &tag_list[i]), my_fieldstat_counter_get(instance, 0, 0, &tag_list[i + 1])); + } + fieldstat_field_list_arr_free(tag_list, n_cell); fieldstat_free(instance); diff --git a/test/test_register_and_reset.cpp b/test/test_register_and_reset.cpp index b79da54..110fe65 100644 --- a/test/test_register_and_reset.cpp +++ b/test/test_register_and_reset.cpp @@ -76,15 +76,6 @@ TEST(test_register, delete_spreadsketch_cube_with_cells_and_metrics) fieldstat_free(instance); } -int test_get_max_metric_id(const struct fieldstat *instance) -{ - int *metric_id_out; - size_t n_metric; - (void)fieldstat_cube_get_metrics(instance, 0, &metric_id_out, &n_metric); - free(metric_id_out); - return n_metric - 1; -} - TEST(test_register, reset_and_try_to_query_cell_comprehensive) { struct fieldstat *instance = fieldstat_new(); @@ -583,8 +574,9 @@ TEST(calibrate, target_one_more_metric) fieldstat_calibrate(master, target); - EXPECT_EQ(test_get_max_metric_id(target), 0); EXPECT_STREQ(fieldstat_get_metric_name(target, cube_id, 0), "counter"); + EXPECT_EQ(fieldstat_cube_get_metric_id_by_name(target, cube_id, "counter"), 0); + EXPECT_EQ(fieldstat_cube_get_metric_id_by_name(target, cube_id, "counter2"), FS_ERR_INVALID_METRIC_NAME); struct field_list *tag_list = fieldstat_cube_get_dimensions(target, cube_id); EXPECT_STREQ(tag_list->field[0].key, TEST_SHARED_TAG.key); @@ -603,9 +595,10 @@ TEST(calibrate, master_one_more_metric) fieldstat_calibrate(master, target); - EXPECT_EQ(test_get_max_metric_id(target), 1); EXPECT_STREQ(fieldstat_get_metric_name(target, cube_id,0), "counter"); EXPECT_STREQ(fieldstat_get_metric_name(target, cube_id,1), "counter2"); + EXPECT_EQ(fieldstat_cube_get_metric_id_by_name(target, cube_id, "counter"), 0); + EXPECT_EQ(fieldstat_cube_get_metric_id_by_name(target, cube_id, "counter2"), 1); struct field_list *tag_list = fieldstat_cube_get_dimensions(target, cube_id); EXPECT_STREQ(tag_list->field[0].key, TEST_SHARED_TAG.key); @@ -626,9 +619,12 @@ TEST(calibrate, different_metric) fieldstat_calibrate(master, target); - EXPECT_EQ(test_get_max_metric_id(target), 1); EXPECT_STREQ(fieldstat_get_metric_name(target, cube_id, 0), "counter"); EXPECT_STREQ(fieldstat_get_metric_name(target, cube_id, 1), "hi i am master new"); + EXPECT_EQ(fieldstat_cube_get_metric_id_by_name(target, cube_id, "counter2"), FS_ERR_INVALID_METRIC_NAME); + EXPECT_EQ(fieldstat_cube_get_metric_id_by_name(target, cube_id, "counter"), 0); + EXPECT_EQ(fieldstat_cube_get_metric_id_by_name(target, cube_id, "hi i am master new"), 1); + struct field_list *tag_list = fieldstat_cube_get_dimensions(target, cube_id); EXPECT_STREQ(tag_list->field[0].key, TEST_SHARED_TAG.key); @@ -656,7 +652,6 @@ TEST(calibrate, target_more_cube) EXPECT_EQ(cube_ids[0], cube_id); free(cube_ids); - EXPECT_EQ(test_get_max_metric_id(target), 0); EXPECT_STREQ(fieldstat_get_metric_name(target, cube_id, 0), "counter"); struct field_list *tag_list = fieldstat_cube_get_dimensions(target, cube_id); EXPECT_STREQ(tag_list->field[0].key, TEST_SHARED_TAG.key); |
