local argparse = require "argparse"
local parser = argparse()
- :name "rspamadm confighelp"
+ :name "rspamadm control fuzzystat"
:description "Shows help for the specified configuration options"
:help_description_margin(32)
parser:flag "--no-ips"
:description "Short output mode"
parser:flag "-n --number"
:description "Disable numbers humanization"
-parser:option "-s --sort"
+parser:option "--sort"
:description "Sort order"
:convert {
+ checked = "checked",
matched = "matched",
errors = "errors",
- ip = "ip"
+ name = "name"
}
local function add_data(target, src)
end
-- Sort by checked
-local function sort_ips(tbl, sort_opts)
+local function sort_hash_table(tbl, sort_opts, key_key)
local res = {}
for k,v in pairs(tbl) do
- table.insert(res, {ip = k, data = v})
+ table.insert(res, {[key_key] = k, data = v})
end
local function sort_order(elt)
local key = 'checked'
- local _res = 0
+ local sort_res = 0
if sort_opts['sort'] then
if sort_opts['sort'] == 'matched' then
key = 'matched'
elseif sort_opts['sort'] == 'errors' then
key = 'errors'
- elseif sort_opts['sort'] == 'ip' then
- return elt['ip']
+ elseif sort_opts['sort'] == 'name' then
+ return elt[key_key]
end
end
- if elt['data'][key] then
- _res = elt['data'][key]
+ if elt.data[key] then
+ sort_res = elt.data[key]
end
- return _res
+ return sort_res
end
table.sort(res, function(a, b)
local res_keys = st['keys']
if res_keys and not opts['no-keys'] and not opts['short'] then
print('Keys statistics:')
- for k, key_stat in pairs(res_keys) do
+ -- Convert into an array to allow sorting
+ local sorted_keys = sort_hash_table(res_keys, opts, 'key')
+
+ for _, key in ipairs(sorted_keys) do
+ local key_stat = key.data
if key_stat.name then
- print(string.format('Key id: %s, name: %s', k, key_stat.name))
+ print(string.format('Key id: %s, name: %s', key.key, key_stat.name))
else
- print(string.format('Key id: %s', k))
+ print(string.format('Key id: %s', key.key))
end
print_stat(key_stat, '\t')
if key_stat['ips'] and not opts['no-ips'] then
print('')
print('\tIPs stat:')
- local sorted_ips = sort_ips(key_stat['ips'], opts)
+ local sorted_ips = sort_hash_table(key_stat['ips'], opts, 'ip')
for _,v in ipairs(sorted_ips) do
print(string.format('\t%s', v['ip']))
print('')
print('IPs statistics:')
- local sorted_ips = sort_ips(res_ips, opts)
+ local sorted_ips = sort_hash_table(res_ips, opts)
for _, v in ipairs(sorted_ips) do
print(string.format('%s', v['ip']))
print_stat(v['data'], '\t')