summaryrefslogtreecommitdiff
path: root/src/fieldstat.c
diff options
context:
space:
mode:
authorchenzizhan <[email protected]>2023-11-21 10:59:23 +0800
committerchenzizhan <[email protected]>2023-11-21 10:59:23 +0800
commit4db907d86a36ff8d7db9f651ba35b393765abd6f (patch)
tree9c9bf7c29cd6f452cc883b8238ee985c287703de /src/fieldstat.c
parentc36286e590e3a169c011a2a15c2eb4e46785865d (diff)
incrby batch
Diffstat (limited to 'src/fieldstat.c')
-rw-r--r--src/fieldstat.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/fieldstat.c b/src/fieldstat.c
index 210103e..2e71952 100644
--- a/src/fieldstat.c
+++ b/src/fieldstat.c
@@ -608,6 +608,36 @@ int fieldstat_counter_incrby(struct fieldstat *instance, int cube_id, int metric
return FS_OK;
}
+int fieldstat_counter_incrby_batch(struct fieldstat *instance, int cube_id, int metric_ids[], const struct fieldstat_tag *tags, size_t n_tag, long long increments[], int n_metric)
+{
+ int ret = check_before_add(instance, cube_id, metric_ids[0], METRIC_TYPE_COUNTER);
+ if (ret != FS_OK) {
+ return ret;
+ }
+ const struct fs_cube *cube = instance->cube[cube_id];
+ long long occurrence = 0;
+ if (cube->sampling_mode == SAMPLING_MODE_TOPK) {
+ for (int i = 0; i < n_metric; i++) {
+ if (metric_ids[i] == cube->primary_metric_id) {
+ if (increments[i] < 0) {
+ return FS_ERR_INVALID_PARAM;
+ }
+ occurrence += increments[i];
+ }
+ }
+ }
+ int cell_id = fieldstat_cube_add(instance, cube_id, tags, n_tag, occurrence);
+ if (cell_id < 0) {
+ return FS_ERR_TOO_MANY_CELLS;
+ }
+
+ for (int i = 0; i < n_metric; i++) {
+ struct metric *metric = find_or_add_metric(instance, cube_id, metric_ids[i]);
+ metric_counter_incrby(metric, cell_id, increments[i]);
+ }
+ return FS_OK;
+}
+
int fieldstat_counter_set(struct fieldstat *instance, int cube_id, int metric_id, const struct fieldstat_tag *tags, size_t n_tag, long long value)
{
int ret = check_before_add(instance, cube_id, metric_id, METRIC_TYPE_COUNTER);