diff options
Diffstat (limited to 'src/cube.h')
| -rw-r--r-- | src/cube.h | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/src/cube.h b/src/cube.h new file mode 100644 index 0000000..1134aa6 --- /dev/null +++ b/src/cube.h @@ -0,0 +1,71 @@ +#pragma once +#include <stdio.h> +#ifdef __cplusplus +extern "C" +{ +#endif + +#include <stddef.h> +#include <stdbool.h> +#include "fieldstat.h" // for dimensions +#include "metric_manifest.h" + +struct cube; +struct cube_manager; + +struct cube *cube_new(const struct field *dimensions, size_t n_dimensions); +int cube_set_sampling(struct cube *cube, enum sampling_mode mode, int max_n_cell, int primary_metric_id); +void cube_free(struct cube *cube); +void cube_reset(struct cube *cube); +struct cube *cube_copy(const struct cube *cube); +int cube_merge(struct cube *dest, const struct cube *src); +struct cube *cube_fork(const struct cube *cube); // only copy the cube configurations, leave the cells empty + +int cube_register_counter(struct cube *cube, const char *metric_name); +int cube_register_hll(struct cube *cube,const char *metric_name, unsigned char precision); +int cube_register_hist(struct cube *cube,const char *metric_name, long long lowest_trackable_value, long long highest_trackable_value, int significant_figures); + +int cube_histogram_record(struct cube *cube, int metric_id, const struct field *dimensions, size_t n_dimensions, long long value); +int cube_hll_add(struct cube *cube, int metric_id, const struct field *dimensions, size_t n_dimensions, const char *key, size_t key_len); +int cube_hll_add_field(struct cube *cube, int metric_id, const struct field *dimensions, size_t n_dimensions, const struct field *item_fields, size_t n_item); +int cube_counter_incrby(struct cube *cube, int metric_id, const struct field *dimensions, size_t n_dimensions, long long increment); +int cube_counter_set(struct cube *cube, int metric_id, const struct field *dimensions, size_t n_dimensions, long long value); + +/* ---------------------------------- query --------------------------------- */ +int cube_counter_get(const struct cube *cube, int metric_id, const struct field_list *dimensions, long long *value); +int cube_hll_get(const struct cube *cube, int metric_id, const struct field_list *dimensions, double *value); +int cube_histogram_value_at_percentile(const struct cube *cube, int metric_id, const struct field_list *dimensions, double percentile, long long *value); +int cube_histogram_count_le_value(const struct cube *cube, int metric_id, const struct field_list *dimensions, long long value, long long *count); +int cube_get_serialization_as_base64(const struct cube *cube, int metric_id, const struct field_list *dimensions, char **blob, size_t *blob_size); + +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); + +/* -------------------------------------------------------------------------- */ +/* cube manager */ +/* -------------------------------------------------------------------------- */ +struct cube *cube_manager_get_cube_by_id(const struct cube_manager *manager, int cube_id); + +// the cube will be taken over by the manager, user do not free it. +int cube_manager_add(struct cube_manager *pthis, struct cube *cube); +void cube_manager_delete(struct cube_manager *pthis, struct cube *cube); // the cube will be freed by the manager +int cube_manager_find(const struct cube_manager *pthis, const struct field *cube_dimensions, size_t n_dimensions); +struct cube_manager *cube_manager_new(); +void cube_manager_free(struct cube_manager *pthis); +int cube_manager_merge(struct cube_manager *dest, const struct cube_manager *src); + +void cube_manager_reset(struct cube_manager *pthis); +void cube_manager_calibrate(struct cube_manager *pthis, const struct cube_manager *master); +struct cube_manager *cube_manager_fork(const struct cube_manager *src); + +void cube_manager_list(const struct cube_manager *pthis, int **cube_ids, int *n_cube); + +#ifdef __cplusplus +} +#endif
\ No newline at end of file |
