diff options
| -rw-r--r-- | include/fieldstat/fieldstat.h | 5 | ||||
| -rw-r--r-- | src/cube.c | 9 | ||||
| -rw-r--r-- | src/fieldstat.c | 17 | ||||
| -rw-r--r-- | test/test_metric_histogram.cpp | 2 |
4 files changed, 14 insertions, 19 deletions
diff --git a/include/fieldstat/fieldstat.h b/include/fieldstat/fieldstat.h index 28eb03c..8bb5c8f 100644 --- a/include/fieldstat/fieldstat.h +++ b/include/fieldstat/fieldstat.h @@ -163,7 +163,7 @@ int fieldstat_histogram_record(struct fieldstat *instance, int cube_id, int metr struct histogram provides a way to update the histogram metric in batch created and updated by user. Example: - struct histogram *histogram = fieldstat_histogram_fork(instance, cube_id, metric_id); + struct histogram *histogram = histogram_new(1, 1000000, 3); for (int i = 0; i < many_packet_length; i++) { histogram_record(histogram, packet_length[i]); } @@ -175,7 +175,8 @@ struct histogram provides a way to update the histogram metric in batch created // after many times of histogram_record histogram_free(histogram); */ -struct histogram *fieldstat_histogram_fork(const struct fieldstat *instance, int cube_id, int metric_id); +// struct histogram *fieldstat_histogram_fork(const struct fieldstat *instance, int cube_id, int metric_id); +struct histogram *histogram_new(long long lowest_trackable_value, long long highest_trackable_value, int significant_figures); void histogram_free(struct histogram *histogram); void histogram_reset(struct histogram *histogram); int fieldstat_histogram_merge(struct fieldstat *instance, int cube_id, int metric_id, const struct field *cell_dimensions, size_t n_dimensions, const struct histogram *src); @@ -802,13 +802,18 @@ int cube_histogram_merge(struct cube *cube, int metric_id, const struct field *d const struct metric_manifest *manifest = metric_manifest_manager_get_by_id(cube->manifest_manager, metric_id); if (manifest == NULL || manifest->type != METRIC_TYPE_HISTOGRAM) { - printf("invalid metric id\n"); return FS_ERR_INVALID_METRIC_ID; } + // check if the parameters matches + if (src->lowest_discernible_value != manifest->parameters->hdr.lowest_trackable_value || + src->highest_trackable_value != manifest->parameters->hdr.highest_trackable_value || + src->significant_figures != manifest->parameters->hdr.significant_figures) { + return FS_ERR_INVALID_PARAM; + } + struct cell *cell_data = get_cell_in_cube_generic(cube, dimensions, n_dimensions); if (cell_data == NULL) { - printf("too many cells\n"); return FS_ERR_TOO_MANY_CELLS; } diff --git a/src/fieldstat.c b/src/fieldstat.c index d8ecc2f..703861b 100644 --- a/src/fieldstat.c +++ b/src/fieldstat.c @@ -240,21 +240,10 @@ void fieldstat_calibrate(const struct fieldstat *master, struct fieldstat *repli /* -------------------------------------------------------------------------- */ /* histogram fast batch transaction */ /* -------------------------------------------------------------------------- */ -struct histogram *fieldstat_histogram_fork(const struct fieldstat *instance, int cube_id, int metric_id) { - const struct cube *cube = cube_manager_get_cube_by_id(instance->cube_manager, cube_id); - if (cube == NULL) { - return NULL; - } - - const struct metric_manifest *manifest = cube_get_metric_manifest_by_id(cube, metric_id); - if (manifest == NULL || manifest->type != METRIC_TYPE_HISTOGRAM) { - return NULL; - } - const struct histogram_parameters *parameters = &(manifest->parameters->hdr); - +struct histogram *histogram_new(long long lowest_trackable_value, long long highest_trackable_value, int significant_figures) { struct hdr_histogram* inner = NULL; - int ret = hdr_init(parameters->lowest_trackable_value, parameters->highest_trackable_value, parameters->significant_figures, &inner); - if (ret != 0) { + int ret = hdr_init(lowest_trackable_value, highest_trackable_value, significant_figures, &inner); + if (ret != 0) { return NULL; } diff --git a/test/test_metric_histogram.cpp b/test/test_metric_histogram.cpp index e82000e..66fb6b4 100644 --- a/test/test_metric_histogram.cpp +++ b/test/test_metric_histogram.cpp @@ -196,7 +196,7 @@ TEST(metric_test_histogram, histogram_batch_transaction) { int cube_id = test_fieldstat_cube_create(instance, &TEST_SHARED_TAG, 1, SAMPLING_MODE_COMPREHENSIVE, 10); int metric_id = fieldstat_register_histogram(instance, cube_id, "test_histogram_metric", 1, 10000, 5); - struct histogram *histogram = fieldstat_histogram_fork(instance, cube_id, metric_id); + struct histogram *histogram = histogram_new(1, 10000, 5); ASSERT_NE(histogram, nullptr); long long packet_lengths[] = {1234, 1234, 123, 567, 890, 1234, 1500}; |
