/* Adjust CDP */
for (i = 0; i < file->stat_head->rra_cnt; i++) {
file->cdp_prep->scratch[CDP_unkn_pdp_cnt].lv = 0;
- /* Randomize row pointer */
- file->rra_ptr->cur_row = g_random_int () % file->rra_def[i].row_cnt;
+ /* Randomize row pointer (disabled) */
+ /* file->rra_ptr->cur_row = g_random_int () % file->rra_def[i].row_cnt; */
+ file->rra_ptr->cur_row = file->rra_def[i].row_cnt - 1;
/* Calculate values count */
count += file->rra_def[i].row_cnt * file->stat_head->ds_cnt;
}
}
}
- msg_debug_rrd ("update cdp %d with value %.3f, "
+ scratch[CDP_unkn_pdp_cnt].lv = 0;
+
+ msg_debug_rrd ("update cdp for DS %d with value %.3f, "
"stored value: %.3f, carry: %.3f",
- i, last_cdp, cur_cdp, scratch[CDP_val].dv);
+ i, last_cdp,
+ scratch[CDP_primary_val].dv, scratch[CDP_val].dv);
}
/* In this case we just need to update cdp_prep for this RRA */
else {
void
rspamd_rrd_write_rra (struct rspamd_rrd_file *file, gulong *rra_steps)
{
- guint i, j, scratch_idx, cdp_idx, k;
+ guint i, j, ds_cnt;
struct rrd_rra_def *rra;
- gdouble *rra_row;
+ struct rrd_cdp_prep *cdp;
+ gdouble *rra_row = file->rrd_value, *cur_row;
+
+ ds_cnt = file->stat_head->ds_cnt;
/* Iterate over all RRA */
for (i = 0; i < file->stat_head->rra_cnt; i++) {
rra = &file->rra_def[i];
- /* How much steps need to be updated */
- for (j = 0, scratch_idx = CDP_primary_val;
- j < rra_steps[i];
- j++, scratch_idx = CDP_secondary_val) {
+
+ if (rra_steps[i] > 0) {
+
/* Move row ptr */
if (++file->rra_ptr[i].cur_row >= rra->row_cnt) {
file->rra_ptr[i].cur_row = 0;
}
/* Calculate seek */
- rra_row = file->rrd_value +
- (file->stat_head->ds_cnt * i + file->rra_ptr[i].cur_row);
+ cdp = &file->cdp_prep[ds_cnt * i];
+ cur_row = rra_row + ds_cnt * file->rra_ptr[i].cur_row;
/* Iterate over DS */
- for (k = 0; k < file->stat_head->ds_cnt; k++) {
- cdp_idx = i * file->stat_head->ds_cnt + k;
- memcpy (rra_row,
- &file->cdp_prep[cdp_idx].scratch[scratch_idx].dv,
- sizeof (gdouble));
- rra_row++;
+ for (j = 0; j < ds_cnt; j++) {
+ cur_row[j] = cdp[j].scratch[CDP_primary_val].dv;
}
}
+
+ rra_row += rra->row_cnt * ds_cnt;
}
}