summaryrefslogtreecommitdiffstats
path: root/remote/lib/support.lua
diff options
context:
space:
mode:
authorSuren A. Chilingaryan <csa@suren.me>2019-08-25 06:06:41 +0200
committerSuren A. Chilingaryan <csa@suren.me>2019-08-25 06:06:41 +0200
commit16e27beaa24c6c551eaa0d3e6d115017939593a1 (patch)
tree61aea994bfc76e9f0053b26a42406e456c2a962e /remote/lib/support.lua
parentb2d1ca40d5bd1015a37cc243000b636eefc3d128 (diff)
downloadconky-16e27beaa24c6c551eaa0d3e6d115017939593a1.tar.gz
conky-16e27beaa24c6c551eaa0d3e6d115017939593a1.tar.bz2
conky-16e27beaa24c6c551eaa0d3e6d115017939593a1.tar.xz
conky-16e27beaa24c6c551eaa0d3e6d115017939593a1.zip
Support multi-reports
Diffstat (limited to 'remote/lib/support.lua')
-rw-r--r--remote/lib/support.lua669
1 files changed, 0 insertions, 669 deletions
diff --git a/remote/lib/support.lua b/remote/lib/support.lua
deleted file mode 100644
index 984d677..0000000
--- a/remote/lib/support.lua
+++ /dev/null
@@ -1,669 +0,0 @@
-require "luarocks.require"
-require "md5"
-require "lfs"
-
-home = os.getenv( "HOME" )
-
-os.execute("mkdir -p " .. home .. "/.conky/requests");
-os.execute("mkdir -p " .. home .. "/.conky/info");
-c_timer_init = -1
-
-do
- function conky_eval(...)
- return conky_parse(table.concat(arg, " "))
- end
-
- function conky_multiply_line(times, ...)
- local str = table.concat(arg, " ")
- local tbl = {}
- for i=1,times,1 do
- tbl[i] = string.gsub(str,"@i@", i-1)
- end
- local res = table.concat(tbl,"\n")
- return res;
- end
-
- function split(delimiter, text)
- local list = {}
- local pos = 1
- if string.find("", delimiter, 1) then -- this would result in endless loops
- error("delimiter matches empty string!")
- end
- while 1 do
- local first, last = string.find(text, delimiter, pos)
- if first then -- found?
- table.insert(list, string.sub(text, pos, first-1))
- pos = last+1
- else
- table.insert(list, string.sub(text, pos))
- break
- end
- end
- return list
- end
-
- function conky_filter_real_ip(iface)
- local req = string.format('${addrs %s}', iface)
- local ips = conky_parse(req);
---[[
- print(ips)
---]]
- local list = split(",", ips)
- for i, item in ipairs(list) do
- if (string.match(item, "141\.52\.64")) then
- return item
- end
- end
- return "Unknown"
- end
-
- user = split('/', home)
- user = user[#user]
-
- result_check_server_status = {}
- result_check_adei_source = {}
- result_check_server_ = {}
- result_check_service_ = {}
- online = {}
- status = {}
- tested = {}
- c_timer = c_timer_init
- width = 80
- update_time = 0
- outdate_time = 0
- timeout = 2
-
- function conky_set_width (w)
- width = tonumber(w)
- return ""
- end
-
- function conky_set_timeout (t)
- timeout = tonumber(t)
- return ""
- end
-
- function cmd_popen(server, port, cmd)
- if (c_timer_init == 0) then
- return io.popen(cmd)
- else
- local cmd_md5 = md5.sumhexa(cmd)
- local fn = string.format("%s/.conky/info/%s:%s-%s.srv", home, server, port, cmd_md5)
- stat = lfs.attributes(fn)
- if (stat == nil) then
- return nil
- end
-
- local since = os.difftime(stat['modification'], update_time)
- if (since < 0) then
- return nil
- end
- since = os.difftime(outdate_time, os.time())
- if (since < 0) then
- return nil
- end
- return io.open(fn, "r")
- end
- end
-
- function conky_check_server_status(server, port, ...)
- port = port or 22
- local name = string.format("%s:%i", server, port);
-
- if (c_timer < 0) then
- if (c_timer == -1) then
- local fn = string.format("%s/.conky/requests/%s:%i.srv", home, server, port)
-
- tested[string.format("%s:%i", server, port)] = false;
-
- local f = assert(io.open(fn, "w"))
-
- local cmd = string.format("/etc/conky/scripts/ping.pl %s:%i %i", server, port, timeout)
- f:write(cmd .. "\n")
-
- if (arg[1] ~= "-") then
- cmd = string.format("ssh -x -p %i -o ConnectTimeout=%i root@%s /opt/scripts/check_server_status.sh 2>&1 | fold -w %i", port, timeout, server, width)
- f:write(cmd .. "\n")
-
- for i, service in ipairs(arg)
- do
- cmd = string.format("ssh -x -p %i -o ConnectTimeout=%i root@%s /opt/scripts/check_%s_status.sh 2>&1 | fold -w %i", port, timeout, server, service, width)
- f:write(cmd .. "\n")
- end
- end
- f:close()
- end
- if (result_check_server_status[name] == nil) then
- local res
- if (math.abs(c_timer)%2 > 0) then
- res = "${color yellow}?${color}"
- else
- res = "${color yellow}.${color}"
- end
-
- if (arg[1] ~= "-") then
- res = res .. " "
- for i, service in ipairs(arg) do
- res = res .. " "
- end
- end
- --result_check_server_status[server] = res
- --status[server] = false
- return res
- end
- elseif (c_timer == 0) then
- result_check_server_status[name] = check_server_status(server, port, arg)
- end
-
- return result_check_server_status[name];
- end
-
- function check_server_status(server, port, additional)
- port = port or 22
-
- local res
- local cmd = string.format("/etc/conky/scripts/ping.pl %s:%i %i", server, port, timeout)
- local cmdf = cmd_popen(server, port, cmd)
- if (cmdf == nil) then
- res = -1
- else
- local data = cmdf:read("*a")
- res = tonumber(data)
- cmdf:close()
- end
-
- if (additional[1] == "-") then
- if (res > 0) then
- online[server] = true
- return "${color green}*"
- elseif (res < 0) then
- return "${color red}?"
- else
- online[server] = false
- return "${color red}*"
- end
- end
-
- if (res > 0) then
- online[server] = true
-
- local output
-
- cmd = string.format("ssh -x -p %i -o ConnectTimeout=%i root@%s /opt/scripts/check_server_status.sh 2>&1 | fold -w %i", port, timeout, server, width)
- cmdf = cmd_popen(server, port, cmd)
- if (cmdf == nil) then
- output = string.format("${color green}* ${color red}?")
- else
- local res = {}
- local line = cmdf:read("*l")
- while line do
- local m1 = string.match(line, "^\(.*[^%s]\)%s*$")
- if (m1) then
- table.insert(res, m1)
- end
- line = cmdf:read("*l")
- end
--- res = cmdf:read("*a")
- cmdf:close()
-
- res = table.concat(res, "\n")
-
- if (string.match(res, "[%a%d]")) then
- table.insert(status, string.format("${color yellow}%s:%i${color gray}\n%s", server, port, res))
- output = string.format("${color green}* ${color red}*")
- else
- output = string.format("${color green}* *")
- end
- end
-
- for i, service in ipairs(additional)
- do
- cmd = string.format("ssh -x -p %i -o ConnectTimeout=%i root@%s /opt/scripts/check_%s_status.sh 2>&1 | fold -w %i", port, timeout, server, service, width)
- cmdf = cmd_popen(server, port, cmd)
- if (cmdf == nil) then
- output = output .. string.format(" ${color red}?")
- else
- local res = {}
- local line = cmdf:read("*l")
- while line do
- local m1 = string.match(line, "^\(.*[^%s]\)%s*$")
- if (m1) then
- table.insert(res, m1)
- end
- line = cmdf:read("*l")
- end
- cmdf:close()
-
- if (res[1]) then
- local info = table.remove(res)
- local s = 0
- local extra = ""
-
- local m1, m2 = string.match(info, "^\(%d+\)\(%s.+\)$")
- if (m1 == nil) then
- m1 = string.match(info, "^\%d+$");
- end
- if (m1 == nil) then
- table.insert(res, info)
- else
- s = tonumber(m1)
- if (m2 ~= nil) then
- extra = string.sub(m2,2)
- end
- end
-
- if (res[1]) then
- res = table.concat(res, "\n")
- table.insert(status, string.format("${color yellow}%s:%i:%s${color gray}\n%s", server, port, service, res))
- end
- if (s == 0) then
- output = output .. string.format(" ${color red}*")
- elseif (s == 1) then
- output = output .. string.format(" ${color green}*")
- else
- output = output .. string.format(" ${color yellow}*")
- end
- output=output .. " ${color white}" .. extra;
- else
- output = output .. string.format(" ${color green}*")
- end
- end
- end
-
- return output
- else
- if (res < 0) then
- res = string.format("${color red}? ")
- else
- online[server] = false
- res = string.format("${color red}* ")
- end
- for i, service in ipairs(additional) do
- res = res .. " "
- end
-
- return res
- end
- end
-
- function conky_check_adei_source(server, port, config, setup, db_server, db_name, ignore_list)
- port = port or 22
- local name = string.format("%s:%i__%s__%s", server, port, db_server, db_name)
- if (c_timer < 0) then
- if (c_timer == -1) then
- ignore_list = ignore_list or ""
-
- local fn = string.format("%s/.conky/requests/%s:%i.srv", home, server, port)
-
- local f = assert(io.open(fn, "a+"))
- local cmd = string.format('ssh -x -p %i -o ConnectTimeout=%i root@%s /opt/scripts/check_adei_source.sh %s %s %s %s "%s" 2>&1', port, timeout, server, config, setup, db_server, db_name, ignore_list)
- f:write(cmd .. "\n")
- f:close()
- end
-
- if (result_check_adei_source[name] == nil) then
- return "${color yellow}?${color}"
- else
- if (online[server]) then
- return result_check_adei_source[name];
- else
- return "${color red}?${color}"
- end
- end
- elseif (online[server]) then
- if (c_timer == 0) then
- result_check_adei_source[name] = check_adei_source(server, port, config, setup, db_server, db_name, ignore_list)
- end
- return result_check_adei_source[name];
- else
- return "${color red}?${color}"
- end
- end
-
- function check_adei_source(server, port, config, setup, db_server, db_name, ignore_list)
- ignore_list = ignore_list or ""
- cmd = string.format('ssh -x -p %i -o ConnectTimeout=%i root@%s /opt/scripts/check_adei_source.sh %s %s %s %s "%s" 2>&1', port, timeout, server, config, setup, db_server, db_name, ignore_list)
- cmdf = cmd_popen(server, port, cmd)
- if (cmdf == nil) then
- return "${color red}?"
- end
-
- local res = {}
- line = cmdf:read("*l")
- while line do
- local m1 = string.match(line, "^\(.*[^%s]\)%s*$")
- if (m1) then
- table.insert(res, m1)
- end
- line = cmdf:read("*l")
- end
- cmdf:close()
-
- local info = table.remove(res)
-
- local t1, t2, t3 = string.match(info, "^\(%d+\)%s+\(%d+\)%s+\(%d+\)")
-
- local s = tonumber(t1)
- if (s == nil) then
- table.insert(res, info)
- s = 0
- end
-
- res = table.concat(res, "\n")
-
- local output
- if (s == 1) then
- output="${color green}*"
- else
---[[
- table.insert(status, string.format("${color yellow}%s -- %s${color gray}\n%s\n", db_server, db_name, res))
---]]
- if (s == 0) then output="${color red}*"
- else output="${color yellow}*" end
- end
-
--- if (s ~= 0) then
- local groups = tonumber(t2)
- if (groups) then
- output = output .. string.format("${color white} %i groups", groups);
- else
- output = output .. string.format("${color red} ? groups");
- end
-
- local size = tonumber(t3)
- if (groups and size) then
- output = output .. string.format("${color white}, %i GB", size);
- else
- output = output .. string.format("${color red}, ? GB");
- end
--- end
-
- if (string.match(res, "[%a%d]")) then
- output = output .. "${color gray}\n ${font Bitstream Vera Sans Mono:size=7}" .. string.gsub(res,"\n", "${font}\n ${font Bitstream Vera Sans Mono:size=7}") .. "${font}${color white}"
- end
-
- return output
- end
-
- function conky_check_server_(service, server, port, ...)
- port = port or 22
- local name = string.format("%s:%i:%s", server, port, service)
- if (c_timer < 0) then
- if (c_timer == -1) then
- ignore_list = ignore_list or ""
-
- local fn = string.format("%s/.conky/requests/%s:%i.srv", home, server, port)
-
- local f = assert(io.open(fn, "a+"))
- local cmd = string.format("ssh -x -p %i -o ConnectTimeout=%i root@%s /opt/scripts/check_server_%s.sh 2>&1", port, timeout, server, service)
- f:write(cmd .. "\n")
- f:close()
- end
-
- if (result_check_server_[name] == nil) then
- return "${color yellow}?${color}"
- else
- if (online[server]) then
- return result_check_server_[name];
- else
- return "${color red}?${color}"
- end
- end
- elseif (online[server]) then
- if (c_timer == 0) then
- result_check_server_[name] = check_server_(service, server, port, arg)
- end
- return result_check_server_[name];
- else
- return "${color red}?${color}"
- end
- end
-
- function conky_check_service_(service, id, ...)
- local name = string.format("%s:%s", service, id)
- if (c_timer < 0) then
- if (c_timer == -1) then
- ignore_list = ignore_list or ""
-
- tested[string.format("%s:%s", service, id)] = false;
-
- local fn = string.format("%s/.conky/requests/%s:%s.srv", home, service, id)
-
- local f = assert(io.open(fn, "a+"))
- local cmd = string.format("/etc/conky/service/check_%s.sh %s %s 2>&1", service, id, table.concat(arg, " "))
- f:write(cmd .. "\n")
- f:close()
- end
-
- if (result_check_server_[name] == nil) then
- return "${color yellow}?${color}"
- else
- return result_check_server_[name];
- end
- else
- if (c_timer == 0) then
- result_check_server_[name] = check_service_(service, id, arg)
- end
- return result_check_server_[name];
- end
- end
-
-
- function format_traffic(value, yellow, red)
- yellow = yellow or 100
- red = red or 1000
-
- local value = math.floor(tonumber(value) / 1073741824)
-
- local res
- if (value > red) then res="${color red}"
- elseif (value > yellow) then res="${color yellow}"
- else res="${color white}" end
-
- if (value < 10) then res = res .. " " .. value
- elseif (value < 100) then res = res .. " " .. value
- else res = res .. value end
-
- return res .. " GB${color gray}"
- end
-
- function check_server_(service, server, port, opts)
- port = port or 22
- local cmd = string.format("ssh -x -p %i -o ConnectTimeout=%i root@%s /opt/scripts/check_server_%s.sh 2>&1", port, timeout, server, service)
- cmdf = cmd_popen(server, port, cmd)
- if (cmdf == nil) then
- return "${color red}?"
- end
-
- local res = {}
- line = cmdf:read("*l")
- while line do
- local m1 = string.match(line, "^\(.*[^%s]\)%s*$")
- if (m1) then
- table.insert(res, m1)
- end
- line = cmdf:read("*l")
- end
- cmdf:close()
-
- if (service == "traffic") then
- if (res[1]) then
- local t1, t2, t3 = string.match(res[1], "^\(%d+\)%s+\(%d+\)%s+\(%d+\)")
-
- if (t1 and t2 and t3) then
- if ((opts) and (opts[1])) then yellow = tonumber(opts[1])
- else yellow = nil end
- if ((opts) and (opts[2])) then red = tonumber(opts[2])
- else red = nil end
-
- t1=format_traffic(t1,yellow,red)
- t2=format_traffic(t2,yellow,red)
- t3=format_traffic(t3,yellow,red)
- return string.format("${color gray}i: %s, o: %s, f: %s", t1, t2, t3)
- else
- return "${color red}" .. res[1]
- end
- end
- end
-
-
- return ""
- end
-
-
- function check_service_(service, id, opts)
- local cmd = string.format("/etc/conky/service/check_%s.sh %s %s 2>&1", service, id, table.concat(opts, " "))
- cmdf = cmd_popen(service, id, cmd)
- if (cmdf == nil) then
- return "${color red}?"
- end
-
- local res = {}
- local local_res = {}
- line = cmdf:read("*l")
- while line do
- local t, m1 = string.match(line, "^\(\*?\)\(.*[^%s]\)%s*$")
- if (m1) then
- if (t == nil) or (t == '') then
- table.insert(res, m1)
- else
- table.insert(local_res, string.sub(m1,1))
- end
- end
- line = cmdf:read("*l")
- end
- cmdf:close()
-
- local output
- local info = table.remove(res)
- local t1 = 0
- local t2 = nil
- local msg = ''
-
- if (info) then
- t1, t2, msg = string.match(info, "^\(%d+\)%s+\(%d+\)\(.*\)")
- end
-
- local s = tonumber(t1)
- if (s == nil) then
- table.insert(res, info)
- s = 0
- end
-
- if (s == 1) then
- output="${color green}*"
- else
- if (s == 0) then output="${color red}*"
- else output="${color yellow}*" end
- end
-
- s = tonumber(t2)
- if (s == nil) then
- s = 0
- else
- if (s == 1) then
- output=output .. " ${color green}*"
- else
- if (s == 0) then output=output .. " ${color red}*"
- else output=output .. " ${color yellow}*" end
- end
- end
-
- output = output .. " ${color white}" .. msg
-
- res = table.concat(res, "\n")
- local_res = table.concat(local_res, "\n")
-
-
- if (string.match(res, "[%a%d]")) then
- table.insert(status, string.format("${color yellow}%s:%s${color gray}\n%s", service, id, res))
- end
-
- if (string.match(local_res, "[%a%d]")) then
- output = output .. "${color gray}\n ${font Bitstream Vera Sans Mono:size=7}" .. string.gsub(local_res,"\n", "${font}\n ${font Bitstream Vera Sans Mono:size=7}") .. "${font}${color white}"
- end
-
- return output
- end
-
-
-
- function conky_print_server_errors(interval, tag)
- local res = table.concat(status, "\n")
-
- if (c_timer < 0) then
- tag = user .. "_" .. tag
-
- if (c_timer == -1) then
- update_time = os.time()
-
- local result = 0;
- while (result == 0) do
- result = os.execute("ps x | grep conky_process_requests | grep " .. tag .. " | grep -v grep > /dev/null")
- end
-
- for item, s in pairs(tested) do
- os.execute("/etc/conky/scripts/conky_process_requests.pl \"" .. item .. ".srv\" " .. tag .. " &")
- end
- end
-
- local result=os.execute("ps x | grep conky_process_requests | grep " .. tag .. " | grep -v grep > /dev/null")
- if (result == 0) then
- c_timer = c_timer - 1;
- local since = os.difftime(os.time(), update_time)
- if (since > tonumber(interval)) then
- result_check_server_status = {}
- result_check_adei_source = {}
- result_check_server_ = {}
- end
- else
- outdate_time = os.time() + 2 * tonumber(interval)
- c_timer = 0
- end
- return ""
- else
- c_timer = c_timer + conky_info.update_interval
- if (c_timer > tonumber(interval)) then
- status = {}
- tested = {}
- c_timer = c_timer_init
- end
- end
-
- if (string.match(res, "[%a%d]")) then
- return string.format("\n\n%s", res)
- else
- return ""
- end
- end
-
- function conky_outcon(pos1, pos2)
- local n = tonumber(conky_parse('${tcp_portmon 32768 65535 count}'))
- local res = {}
- local str = ""
- for i=1,n do
- local val = tostring(conky_parse(string.format('${tcp_portmon 32768 65535 rhost %i}:${tcp_portmon 32768 65535 rport %i}',i - 1,i - 1)))
-
- if (res[val] == nil) then
- res[val] = 1
- else
- res[val] = res[val] + 1
- end
- end
-
-
- local names = {}
- for addr,num in pairs(res) do
- table.insert(names, addr)
- end
-
- table.sort(names, function(a,b) return res[a]>res[b] end)
-
- for i=1,#names do
- local name = names[i]
- str = str .. string.format("${goto %i}%s${goto %i}cnt %3i\n",pos1,name,pos2,res[name])
- end
-
- return str
- end
-end