From: Vsevolod Stakhov Date: Thu, 28 May 2015 16:20:47 +0000 (+0100) Subject: Implement frequency incrementing. X-Git-Tag: 1.0.0~584 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=ec9032622aded1dc2fed4a758943e6ebccda4f98;p=rspamd.git Implement frequency incrementing. --- diff --git a/src/libmime/filter.c b/src/libmime/filter.c index b939a1785..1469cdfd7 100644 --- a/src/libmime/filter.c +++ b/src/libmime/filter.c @@ -297,7 +297,7 @@ insert_result_common (struct rspamd_task *task, /* Process cache item */ if (task->cfg->cache) { - /* XXX: increase frequency here */ + rspamd_symbols_cache_inc_frequency (task->cfg->cache, symbol); } if (opts != NULL) { diff --git a/src/libserver/symbols_cache.c b/src/libserver/symbols_cache.c index 2ee753fdb..8b0e1dcad 100644 --- a/src/libserver/symbols_cache.c +++ b/src/libserver/symbols_cache.c @@ -865,3 +865,25 @@ rspamd_symbols_cache_start_refresh (struct symbols_cache * cache, double_to_tv (tm, &tv); event_add (&cache->resort_ev, &tv); } + +void +rspamd_symbols_cache_inc_frequency (struct symbols_cache *cache, + const gchar *symbol) +{ + struct cache_item *item, *parent; + + g_assert (cache != NULL); + + item = g_hash_table_lookup (cache->items_by_symbol, symbol); + + if (item != NULL) { + /* We assume ++ as atomic op */ + item->frequency ++; + + /* For virtual symbols we also increase counter for parent */ + if (item->parent != -1) { + parent = g_ptr_array_index (cache->items_by_order, item->parent); + parent->frequency ++; + } + } +} diff --git a/src/libserver/symbols_cache.h b/src/libserver/symbols_cache.h index 013dc91ed..878d0a0bf 100644 --- a/src/libserver/symbols_cache.h +++ b/src/libserver/symbols_cache.h @@ -165,4 +165,12 @@ ucl_object_t *rspamd_symbols_cache_counters (struct symbols_cache * cache); void rspamd_symbols_cache_start_refresh (struct symbols_cache * cache, struct event_base *ev_base); +/** + * Increases counter for a specific symbol + * @param cache + * @param symbol + */ +void rspamd_symbols_cache_inc_frequency (struct symbols_cache *cache, + const gchar *symbol); + #endif