diff options
| author | chenzizhan <[email protected]> | 2023-11-21 10:59:23 +0800 |
|---|---|---|
| committer | chenzizhan <[email protected]> | 2023-11-21 10:59:23 +0800 |
| commit | 4db907d86a36ff8d7db9f651ba35b393765abd6f (patch) | |
| tree | 9c9bf7c29cd6f452cc883b8238ee985c287703de /src/fieldstat.c | |
| parent | c36286e590e3a169c011a2a15c2eb4e46785865d (diff) | |
incrby batch
Diffstat (limited to 'src/fieldstat.c')
| -rw-r--r-- | src/fieldstat.c | 30 |
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); |
