summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2017-07-12 18:29:09 +0100
committerVsevolod Stakhov <vsevolod@highsecure.ru>2017-07-13 13:42:57 +0100
commita79ffcd17eb2fcc8b5ee0780b75d5b74d8e2a24e (patch)
tree4398b83d01555348871f858f3a18f21dc50f81a5
parent3be2002b3605f3792221122283cacb3f7c5c0cb9 (diff)
downloadrspamd-a79ffcd17eb2fcc8b5ee0780b75d5b74d8e2a24e.tar.gz
rspamd-a79ffcd17eb2fcc8b5ee0780b75d5b74d8e2a24e.zip
[Feature] Automatically create tables in clickhouse
-rw-r--r--src/plugins/lua/clickhouse.lua52
1 files changed, 44 insertions, 8 deletions
diff --git a/src/plugins/lua/clickhouse.lua b/src/plugins/lua/clickhouse.lua
index eb4ad57b7..e424b9d67 100644
--- a/src/plugins/lua/clickhouse.lua
+++ b/src/plugins/lua/clickhouse.lua
@@ -57,10 +57,9 @@ local settings = {
use_https = false,
}
---[[
-Clickhouse schema:
-
-CREATE TABLE rspamd
+local clickhouse_schema = {
+rspamd = [[
+CREATE TABLE rspamd IF NOT EXISTS
(
Date Date,
TS DateTime,
@@ -85,8 +84,10 @@ CREATE TABLE rspamd
ListId String,
Digest FixedString(32)
) ENGINE = MergeTree(Date, (TS, From), 8192)
+]],
-CREATE TABLE rspamd_attachments (
+ attachments = [[
+CREATE TABLE rspamd_attachments IF NOT EXISTS (
Date Date,
Digest FixedString(32),
`Attachments.FileName` Array(String),
@@ -94,23 +95,29 @@ CREATE TABLE rspamd_attachments (
`Attachments.Length` Array(UInt32),
`Attachments.Digest` Array(FixedString(16))
) ENGINE = MergeTree(Date, Digest, 8192)
+]],
-CREATE TABLE rspamd_urls (
+ urls = [[
+CREATE TABLE rspamd_urls IF NOT EXISTS (
Date Date,
Digest FixedString(32),
`Urls.Tld` Array(String),
`Urls.Url` Array(String)
) ENGINE = MergeTree(Date, Digest, 8192)
+]],
-CREATE TABLE rspamd_asn (
+ asn = [[
+CREATE TABLE rspamd_asn IF NOT EXISTS (
Date Date,
Digest FixedString(32),
ASN String,
Country FixedString(2),
IPNet String
) ENGINE = MergeTree(Date, Digest, 8192)
+]],
-CREATE TABLE rspamd_symbols (
+ symbols = [[
+CREATE TABLE rspamd_symbols IF NOT EXISTS (
Date Date,
Digest FixedString(32),
`Symbols.Names` Array(String),
@@ -118,6 +125,7 @@ CREATE TABLE rspamd_symbols (
`Symbols.Options` Array(String)
) ENGINE = MergeTree(Date, Digest, 8192)
]]
+}
local function clickhouse_main_row(tname)
local fields = {
@@ -656,5 +664,33 @@ if opts then
clickhouse_send_data(task)
end
end)
+ -- Create tables on load
+ rspamd_config:add_on_load(function(cfg, ev_base, worker)
+ local function http_cb(err_message, code, _, _)
+ if code ~= 200 or err_message then
+ rspamd_logger.errx(task, "cannot create table in clickhouse server %s: %s:%s",
+ settings['server'], code, err_message)
+ end
+ end
+
+ local function send_req(elt, sql)
+ if not rspamd_http.request({
+ ev_base = ev_base,
+ config = cfg,
+ url = connect_prefix .. settings['server'],
+ body = sql,
+ callback = http_cb,
+ mime_type = 'text/plain',
+ timeout = settings['timeout'],
+ }) then
+ rspamd_logger.errx(task, "cannot create table %s in clickhouse server %s: cannot make request",
+ elt, settings['server'])
+ end
+ end
+
+ for tab,sql in pairs(clickhouse_schema) do
+ send_req(tab, sql)
+ end
+ end)
end
end