summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorchenzizhan <[email protected]>2024-08-01 14:12:46 +0800
committerchenzizhan <[email protected]>2024-08-01 14:12:46 +0800
commitae4c5b46775a0b730169c2d3b13190163d50f262 (patch)
tree5a3f3b9eee24be9117f29e655f5117b3a97aafc6
parentf9dde08bcb7805c6ae8dd717100780def1fbc289 (diff)
api for stellar monitor query
-rw-r--r--fs_easy_example.json35
-rw-r--r--include/fieldstat/fieldstat.h9
-rw-r--r--include/fieldstat/fieldstat_exporter.h1
-rw-r--r--src/cube.c16
-rw-r--r--src/cube.h2
-rw-r--r--src/fieldstat.c11
-rw-r--r--test/test_metric_counter.cpp5
-rw-r--r--test/test_register_and_reset.cpp21
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);
/*
diff --git a/src/cube.c b/src/cube.c
index d6bfa09..344e273 100644
--- a/src/cube.c
+++ b/src/cube.c
@@ -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;
}
diff --git a/src/cube.h b/src/cube.h
index 1134aa6..6710e34 100644
--- a/src/cube.h
+++ b/src/cube.h
@@ -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);