local function toversion(version)

local _, _, maj, min, pat = string.find(version, "(%d+)%.(%d+)%.(%d+)")

return {
  ["version"] = version,
  ["major"]   = tonumber(maj),
  ["minor"]   = tonumber(min),
  ["patch"]   = tonumber(pat)
}

end

local function toboolean(val)

val = tostring(val)
return val == "1" or val == "true"

end

local function log_debug( … )

if debug_lua ~= true then return end

local result = ""
for _,v in ipairs(arg) do
  result = result .. " " .. tostring(v)
end
redis.log(redis.LOG_DEBUG, script_name .. " -" ..  result)

end

local function log(message, prev_jid)

if not max_history or max_history == 0 then return end
local entry = cjson.encode({digest = digest, job_id = job_id, script = script_name, message = message, time = current_time, prev_jid = prev_jid })

log_debug("ZADD", changelog, current_time, entry);
redis.call("ZADD", changelog, current_time, entry);
local total_entries = redis.call("ZCARD", changelog)
local removed_entries = redis.call("ZREMRANGEBYRANK", changelog, max_history, -1)
if removed_entries > 0 then
  log_debug("Removing", removed_entries , "entries from changelog (total entries", total_entries, "exceeds max_history:", max_history ..")");
end
log_debug("PUBLISH", changelog, entry);
redis.call("PUBLISH", changelog, entry);

end