瀏覽代碼

[Minor] Implement C API to obtain timeouts information

tags/3.3
Vsevolod Stakhov 1 年之前
父節點
當前提交
256a3e0a29
沒有連結到貢獻者的電子郵件帳戶。
共有 2 個檔案被更改,包括 50 行新增0 行删除
  1. 24
    0
      src/libserver/rspamd_symcache.h
  2. 26
    0
      src/libserver/symcache/symcache_c.cxx

+ 24
- 0
src/libserver/rspamd_symcache.h 查看文件

@@ -542,6 +542,30 @@ const struct rspamd_symcache_item_stat *
*/
void rspamd_symcache_enable_profile (struct rspamd_task *task);

struct rspamd_symcache_timeout_item {
double timeout;
const struct rspamd_symcache_item *item;
};

struct rspamd_symcache_timeout_result {
double max_timeout;
struct rspamd_symcache_timeout_item *items;
size_t nitems;
};
/**
* Gets maximum timeout announced by symbols cache
* @param cache
* @return new symcache timeout_result structure, that should be freed by call
* `rspamd_symcache_timeout_result_free`
*/
struct rspamd_symcache_timeout_result* rspamd_symcache_get_max_timeout(struct rspamd_symcache *cache);

/**
* Frees results obtained from the previous function
* @param res
*/
void rspamd_symcache_timeout_result_free(struct rspamd_symcache_timeout_result *res);

/**
* Destroy internal state of the symcache runtime
* @param task

+ 26
- 0
src/libserver/symcache/symcache_c.cxx 查看文件

@@ -491,6 +491,32 @@ void rspamd_symcache_enable_symbol_static (struct rspamd_symcache *cache,
real_cache->enable_symbol_delayed(symbol);
}

/* A real structure to match C results without extra copying */
struct rspamd_symcache_real_timeout_result {
struct rspamd_symcache_timeout_result c_api_result;
std::vector<std::pair<double, const rspamd::symcache::cache_item *>> elts;
};

struct rspamd_symcache_timeout_result*
rspamd_symcache_get_max_timeout(struct rspamd_symcache *cache)
{
auto *real_cache = C_API_SYMCACHE(cache);
auto *res = new rspamd_symcache_real_timeout_result;

res->c_api_result.max_timeout = real_cache->get_max_timeout(res->elts);
res->c_api_result.items = reinterpret_cast<struct rspamd_symcache_timeout_item *>(res->elts.data());
res->c_api_result.nitems = res->elts.size();

return &res->c_api_result;
}

void
rspamd_symcache_timeout_result_free(struct rspamd_symcache_timeout_result *res)
{
auto *real_result = reinterpret_cast<rspamd_symcache_real_timeout_result *>(res);
delete real_result;
}

gboolean
rspamd_symcache_is_checked(struct rspamd_task *task,
struct rspamd_symcache *cache,

Loading…
取消
儲存