Browse Source

[Project] Write a function to adjust grow factor properly

pull/4912/head
Vsevolod Stakhov 3 weeks ago
parent
commit
d1e16266e1
No account linked to committer's email address
1 changed files with 42 additions and 0 deletions
  1. 42
    0
      src/libmime/scan_result.c

+ 42
- 0
src/libmime/scan_result.c View File

@@ -1078,3 +1078,45 @@ rspamd_find_metric_result(struct rspamd_task *task,

return NULL;
}

void rspamd_task_result_adjust_grow_factor(struct rspamd_task *task,
struct rspamd_scan_result *result,
double grow_factor)
{
const char *kk;
struct rspamd_symbol_result *res;
double final_grow_factor = grow_factor;
double max_limit = G_MINDOUBLE;

for (unsigned int i = 0; i < result->nactions; i++) {
struct rspamd_action_config *cur = &result->actions_config[i];

if (cur->cur_limit > 0 && max_limit < cur->cur_limit) {
max_limit = cur->cur_limit;
}
}

if (grow_factor > 1.0) {


kh_foreach(result->symbols, kk, res, {
if (res->score > 0) {
double mult = 1.0 - grow_factor;
if (max_limit > 0 && !isnan(res->score)) {
mult *= res->score / max_limit;
final_grow_factor *= 1.0 + mult;
}
}
});

if (final_grow_factor > grow_factor) {
msg_info_task("calculated final grow factor for task: %.3f (%.2f the original one)",
final_grow_factor, grow_factor);
kh_foreach(result->symbols, kk, res, {
if (res->score > 0) {
res->score *= final_grow_factor;
}
});
}
}
}

Loading…
Cancel
Save