diff --git a/README.md b/README.md index e3db5c0..1c19d7a 100644 --- a/README.md +++ b/README.md @@ -127,7 +127,7 @@ Functions in table returned by `require("pgmoon")`: Creates a new `Postgres` object from a configuration object. All fields are optional unless otherwise stated. The newly created object will not -automatically connect, you must call `conect` after creating the object. +automatically connect, you must call `connect` after creating the object. Available options: @@ -139,7 +139,7 @@ Available options: * `"ssl"`: enable ssl (default: `false`) * `"ssl_verify"`: verify server certificate (default: `nil`) * `"ssl_required"`: abort the connection if the server does not support SSL connections (default: `nil`) -* `"socket_type"`: the type of socket to use, one of: `"nginx"`, `"luasocket"`, `cqueues` (default: `"nginx"` if in nginx, `"luasocket"` otherwise) +* `"socket_type"`: the type of socket to use, one of: `"nginx"`, `"haproxy"`, `"luasocket"`, `"cqueues"` (default: `"nginx"` if in nginx, `"haproxy"` if in haproxy, `"luasocket"` otherwise) * `"application_name"`: set the name of the connection as displayed in `pg_stat_activity`. (default: `"pgmoon"`) * `"pool"`: (OpenResty only) name of pool to use when using OpenResty cosocket (default: `"#{host}:#{port}:#{database}"`) * `"pool_size"`: (OpenResty only) Passed directly to OpenResty cosocket connect function, [see docs](https://github.com/openresty/lua-nginx-module#tcpsockconnect) diff --git a/lint_config.lua b/lint_config.lua index 15031ad..5a9b816 100644 --- a/lint_config.lua +++ b/lint_config.lua @@ -1,6 +1,6 @@ return { whitelist_globals = { - ["."] = {"ngx"} + ["."] = {"ngx", "core"} } } diff --git a/pgmoon/socket.lua b/pgmoon/socket.lua index 8db4fc1..52f7ad3 100644 --- a/pgmoon/socket.lua +++ b/pgmoon/socket.lua @@ -72,10 +72,15 @@ do return true end } - create_luasocket = function(...) - local socket = require("socket") + create_luasocket = function(socket_type, ...) + local socket + if socket_type == "haproxy" then + socket = core.tcp(...) + else + socket = require("socket").tcp(...) + end local proxy = { - sock = socket.tcp(...) + sock = socket } for k, v in pairs(method_overrides) do proxy[k] = v @@ -89,6 +94,8 @@ return { if socket_type == nil then if ngx and ngx.get_phase() ~= "init" then socket_type = "nginx" + elseif core and core.get_info() then + socket_type = "haproxy" else socket_type = "luasocket" end @@ -99,6 +106,8 @@ return { socket = ngx.socket.tcp() elseif "luasocket" == _exp_0 then socket = create_luasocket() + elseif "haproxy" == _exp_0 then + socket = create_luasocket("haproxy") elseif "cqueues" == _exp_0 then socket = require("pgmoon.cqueues").CqueuesSocket() else diff --git a/pgmoon/socket.moon b/pgmoon/socket.moon index 6874a96..7b69c6b 100644 --- a/pgmoon/socket.moon +++ b/pgmoon/socket.moon @@ -64,10 +64,14 @@ create_luasocket = do true } - (...) -> - socket = require("socket") + (socket_type, ...) -> + socket = if socket_type == "haproxy" + core.tcp ... + else + require("socket").tcp ... + proxy = { - sock: socket.tcp ... + sock: socket } for k,v in pairs method_overrides proxy[k] = v @@ -85,6 +89,8 @@ create_luasocket = do -- luasocket socket_type = if ngx and ngx.get_phase! != "init" "nginx" + elseif core and core.get_info! + "haproxy" else "luasocket" @@ -93,6 +99,8 @@ create_luasocket = do ngx.socket.tcp! when "luasocket" create_luasocket! + when "haproxy" + create_luasocket("haproxy") when "cqueues" require("pgmoon.cqueues").CqueuesSocket! else