mirror of
https://github.com/bunkerity/bunkerweb
synced 2026-05-24 09:28:37 +00:00
bw - add init_workers phase to support incoming features
This commit is contained in:
parent
375b31e84c
commit
5f097741eb
3 changed files with 83 additions and 4 deletions
|
|
@ -787,6 +787,7 @@ utils.get_phases = function()
|
|||
"log_stream",
|
||||
"log_default",
|
||||
"timer",
|
||||
"init_workers"
|
||||
}
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -1,8 +1,84 @@
|
|||
lua_shared_dict worker_lock 16k;
|
||||
|
||||
init_worker_by_lua_block {
|
||||
-- Libs
|
||||
local helpers = require "bunkerweb.helpers"
|
||||
local utils = require "bunkerweb.utils"
|
||||
local ngx = ngx
|
||||
local ERR = ngx.ERR
|
||||
local INFO = ngx.INFO
|
||||
local worker = ngx.worker
|
||||
local worker_id = worker.id
|
||||
local worker_pid = worker.pid
|
||||
local timer_at = ngx.timer.at
|
||||
local require_plugin = helpers.require_plugin
|
||||
local new_plugin = helpers.new_plugin
|
||||
local call_plugin = helpers.call_plugin
|
||||
local get_variable = utils.get_variable
|
||||
local tostring = tostring
|
||||
local time = os.time
|
||||
local randomseed = math.randomseed
|
||||
|
||||
-- Instantiate objects
|
||||
local logger = require "bunkerweb.logger":new("INIT-WORKERS-" .. tostring(worker_id()))
|
||||
local datastore = require "bunkerweb.datastore":new()
|
||||
|
||||
-- Random seed
|
||||
math.randomseed(os.time() + ngx.worker.pid())
|
||||
randomseed(time() + worker_pid())
|
||||
|
||||
-- Don't go further we are in loading state
|
||||
local is_loading, err = get_variable("IS_LOADING", false)
|
||||
if not is_loading then
|
||||
logger:log(ERR, "utils.get_variable() failed : " .. err)
|
||||
return
|
||||
elseif is_loading == "yes" then
|
||||
return
|
||||
end
|
||||
|
||||
logger:log(INFO, "init_workers phase started")
|
||||
|
||||
-- Get plugins order
|
||||
local order, err = datastore:get("plugins_order", true)
|
||||
if not order then
|
||||
logger:log(ERR, "can't get plugins order from datastore : " .. err)
|
||||
return
|
||||
end
|
||||
|
||||
-- Call init_workers() methods
|
||||
logger:log(INFO, "calling init_workers() methods of plugins ...")
|
||||
for i, plugin_id in ipairs(order.init_workers) do
|
||||
-- Require call
|
||||
local plugin_lua, err = require_plugin(plugin_id)
|
||||
if plugin_lua == false then
|
||||
logger:log(ERR, err)
|
||||
elseif plugin_lua == nil then
|
||||
logger:log(INFO, err)
|
||||
else
|
||||
-- Check if plugin has init_worker method
|
||||
if plugin_lua.init_workers ~= nil then
|
||||
-- New call
|
||||
local ok, plugin_obj = new_plugin(plugin_lua)
|
||||
if not ok then
|
||||
logger:log(ERR, plugin_obj)
|
||||
else
|
||||
local ok, ret = call_plugin(plugin_obj, "init_workers")
|
||||
if not ok then
|
||||
logger:log(ERR, ret)
|
||||
elseif not ret.ret then
|
||||
logger:log(ERR, plugin_id .. ":init_workers() call failed : " .. ret.msg)
|
||||
else
|
||||
logger:log(INFO, plugin_id .. ":init_workers() call successful : " .. ret.msg)
|
||||
end
|
||||
end
|
||||
else
|
||||
logger:log(INFO, "skipped execution of " .. plugin_id .. " because method init_workers() is not defined")
|
||||
end
|
||||
end
|
||||
end
|
||||
logger:log(INFO, "called init_workers() methods of plugins")
|
||||
|
||||
-- End
|
||||
logger:log(INFO, "init_workers phase ended")
|
||||
|
||||
-- Our timer function
|
||||
local ready_work = function(premature)
|
||||
|
|
@ -26,9 +102,10 @@ init_worker_by_lua_block {
|
|||
local new_plugin = helpers.new_plugin
|
||||
local call_plugin = helpers.call_plugin
|
||||
local tostring = tostring
|
||||
local get_variable = utils.get_variable
|
||||
|
||||
-- Don't go further we are in loading state
|
||||
local is_loading, err = utils.get_variable("IS_LOADING", false)
|
||||
local is_loading, err = get_variable("IS_LOADING", false)
|
||||
if not is_loading then
|
||||
logger:log(ERR, "utils.get_variable() failed : " .. err)
|
||||
return
|
||||
|
|
@ -194,5 +271,5 @@ init_worker_by_lua_block {
|
|||
end
|
||||
|
||||
-- Start timer
|
||||
ngx.timer.at(5, ready_work)
|
||||
timer_at(5, ready_work)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -43,5 +43,6 @@
|
|||
],
|
||||
"log_stream": ["badbehavior", "bunkernet"],
|
||||
"log_default": ["badbehavior", "bunkernet", "errors", "misc", "metrics"],
|
||||
"timer": ["metrics"]
|
||||
"timer": ["metrics"],
|
||||
"init_workers": []
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue