guchar *checked;
guchar *results;
struct rspamd_re_cache *cache;
+ struct rspamd_re_cache_stat stat;
};
static GQuark
return rt;
}
+const struct rspamd_re_cache_stat *
+rspamd_re_cache_get_stat (struct rspamd_re_runtime *rt)
+{
+ g_assert (rt != NULL);
+
+ return &rt->stat;
+}
+
static guint
rspamd_re_cache_process_pcre (struct rspamd_re_runtime *rt,
rspamd_regexp_t *re, const guchar *in, gsize len,
}
}
+ rt->stat.regexp_checked ++;
+ rt->stat.bytes_scanned_pcre += len;
+ rt->stat.bytes_scanned += len;
+
+ if (r > 0) {
+ rt->stat.regexp_matched ++;
+ }
+
return r;
}
to - from,
FALSE);
}
+ else {
+ rt->stat.regexp_matched++;
+ }
setbit (rt->checked, id);
cbdata.in = in;
cbdata.re = re;
cbdata.rt = rt;
+ rt->stat.bytes_scanned += len;
if ((hs_scan (re_class->hs_db, in, len, 0, re_class->hs_scratch,
rspamd_re_cache_hyperscan_cb, &cbdata)) != HS_SUCCESS) {
RSPAMD_RE_MAX
};
+struct rspamd_re_cache_stat {
+ guint64 bytes_scanned;
+ guint64 bytes_scanned_pcre;
+ guint regexp_checked;
+ guint regexp_matched;
+};
+
/**
* Initialize re_cache persistent structure
*/
*/
struct rspamd_re_runtime* rspamd_re_cache_runtime_new (struct rspamd_re_cache *cache);
+/**
+ * Get runtime statistics
+ */
+const struct rspamd_re_cache_stat *
+ rspamd_re_cache_get_stat (struct rspamd_re_runtime *rt);
+
/**
* Process regexp runtime and return the result for a specific regexp
* @param task task object