summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@rspamd.com>2022-04-13 22:16:01 +0100
committerVsevolod Stakhov <vsevolod@rspamd.com>2022-04-13 22:16:01 +0100
commit491ff2c2d609bb2d7e35a8203413223c586f3f98 (patch)
tree4f3110f918b6299ba52ab872fbf4d9eb71d4c14c
parentc211ce57b9b3a7ddac08bc996ad3ca6a6ee28dac (diff)
downloadrspamd-491ff2c2d609bb2d7e35a8203413223c586f3f98.tar.gz
rspamd-491ff2c2d609bb2d7e35a8203413223c586f3f98.zip
[Minor] Add some more helpers
-rw-r--r--src/libserver/symcache/symcache_c.cxx51
-rw-r--r--src/libserver/symcache/symcache_internal.hxx10
2 files changed, 60 insertions, 1 deletions
diff --git a/src/libserver/symcache/symcache_c.cxx b/src/libserver/symcache/symcache_c.cxx
index c61b17340..88a0d5605 100644
--- a/src/libserver/symcache/symcache_c.cxx
+++ b/src/libserver/symcache/symcache_c.cxx
@@ -93,4 +93,53 @@ rspamd_symcache_add_condition_delayed (struct rspamd_symcache *cache,
real_cache->add_delayed_condition(sym, cbref);
return TRUE;
-} \ No newline at end of file
+}
+
+gint rspamd_symcache_find_symbol (struct rspamd_symcache *cache,
+ const gchar *name)
+{
+ auto *real_cache = C_API_SYMCACHE(cache);
+
+ auto sym_maybe = real_cache->get_item_by_name(name, false);
+
+ if (sym_maybe != nullptr) {
+ return sym_maybe->id;
+ }
+
+ return -1;
+}
+
+gboolean rspamd_symcache_stat_symbol (struct rspamd_symcache *cache,
+ const gchar *name,
+ gdouble *frequency,
+ gdouble *freq_stddev,
+ gdouble *tm,
+ guint *nhits)
+{
+ auto *real_cache = C_API_SYMCACHE(cache);
+
+ auto sym_maybe = real_cache->get_item_by_name(name, false);
+
+ if (sym_maybe != nullptr) {
+ *frequency = sym_maybe->st->avg_frequency;
+ *freq_stddev = sqrt(sym_maybe->st->stddev_frequency);
+ *tm = sym_maybe->st->time_counter.mean;
+
+ if (nhits) {
+ *nhits = sym_maybe->st->hits;
+ }
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+
+guint
+rspamd_symcache_stats_symbols_count (struct rspamd_symcache *cache)
+{
+ auto *real_cache = C_API_SYMCACHE(cache);
+ return real_cache->get_stats_symbols_count();
+}
+
diff --git a/src/libserver/symcache/symcache_internal.hxx b/src/libserver/symcache/symcache_internal.hxx
index e967bbe83..155efa1ae 100644
--- a/src/libserver/symcache/symcache_internal.hxx
+++ b/src/libserver/symcache/symcache_internal.hxx
@@ -377,6 +377,8 @@ private:
double total_weight;
std::size_t used_items;
std::size_t stats_symbols_count;
+
+private:
std::uint64_t total_hits;
struct rspamd_config *cfg;
@@ -509,6 +511,14 @@ public:
* @param cbref
*/
auto add_delayed_condition(std::string_view sym, int cbref) -> void;
+
+ /**
+ * Returns number of symbols that needs to be checked in statistical algorithm
+ * @return
+ */
+ auto get_stats_symbols_count() const {
+ return stats_symbols_count;
+ }
};
/*