aboutsummaryrefslogtreecommitdiffstats
path: root/lualib
diff options
context:
space:
mode:
authorMikhail Galanin <mgalanin@mimecast.com>2018-08-24 09:18:06 +0100
committerMikhail Galanin <mgalanin@mimecast.com>2018-08-24 09:18:06 +0100
commit0fbaf1290c84643c94712ca26fd53872fddc5fc4 (patch)
tree045173eee17842da3d1bc7ded49c3fb7633a9817 /lualib
parent3c0b613742ac6fa4fc75f384387d69d753f8a682 (diff)
downloadrspamd-0fbaf1290c84643c94712ca26fd53872fddc5fc4.tar.gz
rspamd-0fbaf1290c84643c94712ca26fd53872fddc5fc4.zip
[Minor] Reworked clickhouse routines using new API
Diffstat (limited to 'lualib')
-rw-r--r--lualib/lua_clickhouse.lua101
1 files changed, 101 insertions, 0 deletions
diff --git a/lualib/lua_clickhouse.lua b/lualib/lua_clickhouse.lua
index cf6e9d894..e14518ca6 100644
--- a/lualib/lua_clickhouse.lua
+++ b/lualib/lua_clickhouse.lua
@@ -229,6 +229,65 @@ exports.select = function (upstream, settings, params, query, ok_cb, fail_cb)
end
--[[[
+-- @function lua_clickhouse.select_sync(upstream, settings, params, query,
+ ok_cb, fail_cb)
+-- Make select request to clickhouse
+-- @param {upstream} upstream clickhouse server upstream
+-- @param {table} settings global settings table:
+-- * use_gsip: use gzip compression
+-- * timeout: request timeout
+-- * no_ssl_verify: skip SSL verification
+-- * user: HTTP user
+-- * password: HTTP password
+-- @param {params} HTTP request params
+-- @param {string} query select query (passed in HTTP body)
+-- @param {function} ok_cb callback to be called in case of success
+-- @param {function} fail_cb callback to be called in case of some error
+-- @return
+-- {string} error message if exists
+-- nil | {rows} | {http_response}
+-- @example
+--
+--]]
+exports.select_sync = function (upstream, settings, params, query, ok_cb, fail_cb)
+ local http_params = {}
+
+ for k,v in pairs(params) do http_params[k] = v end
+
+ http_params.gzip = settings.use_gzip
+ http_params.mime_type = 'text/plain'
+ http_params.timeout = settings.timeout or default_timeout
+ http_params.no_ssl_verify = settings.no_ssl_verify
+ http_params.user = settings.user
+ http_params.password = settings.password
+ http_params.body = query
+ http_params.log_obj = params.task or params.config
+
+ lua_util.debugm(N, http_params.log_obj, "clickhouse select request: %s", http_params.body)
+
+ if not http_params.url then
+ local connect_prefix = "http://"
+ if settings.use_https then
+ connect_prefix = 'https://'
+ end
+ local ip_addr = upstream:get_addr():to_string(true)
+ http_params.url = connect_prefix .. ip_addr .. '/?default_format=JSONEachRow'
+ end
+
+ local err, response = rspamd_http.request(http_params)
+
+ if err then
+ return err, nil
+ elseif response.code ~= 200 then
+ return response.content, response
+ else
+ lua_util.debugm(N, http_params.log_obj, "clickhouse select response: %1", response)
+ local rows = parse_clickhouse_response(params, response.content)
+ return nil, rows
+ end
+end
+
+--[[[
-- @function lua_clickhouse.insert(upstream, settings, params, query, rows,
ok_cb, fail_cb)
-- Insert data rows to clickhouse
@@ -330,5 +389,47 @@ exports.generic = function (upstream, settings, params, query,
return rspamd_http.request(http_params)
end
+--[[[
+-- @function lua_clickhouse.generic_sync(upstream, settings, params, query,
+ ok_cb, fail_cb)
+-- Make a generic request to Clickhouse (e.g. alter)
+-- @param {upstream} upstream clickhouse server upstream
+-- @param {table} settings global settings table:
+-- * use_gsip: use gzip compression
+-- * timeout: request timeout
+-- * no_ssl_verify: skip SSL verification
+-- * user: HTTP user
+-- * password: HTTP password
+-- @param {params} HTTP request params
+-- @param {string} query Clickhouse query (passed in `query` request element with spaces escaped)
+-- @return {boolean} whether a connection was successful
+-- @example
+--
+--]]
+exports.generic_sync = function (upstream, settings, params, query)
+ local http_params = {}
+
+ for k,v in pairs(params) do http_params[k] = v end
+
+ http_params.gzip = settings.use_gzip
+ http_params.mime_type = 'text/plain'
+ http_params.timeout = settings.timeout or default_timeout
+ http_params.no_ssl_verify = settings.no_ssl_verify
+ http_params.user = settings.user
+ http_params.password = settings.password
+ http_params.log_obj = params.task or params.config
+ http_params.body = query
+
+ if not http_params.url then
+ local connect_prefix = "http://"
+ if settings.use_https then
+ connect_prefix = 'https://'
+ end
+ local ip_addr = upstream:get_addr():to_string(true)
+ http_params.url = connect_prefix .. ip_addr .. '/?default_format=JSONEachRow'
+ end
+
+ return rspamd_http.request(http_params)
+end
return exports \ No newline at end of file