Browse Source

[Minor] Fuzzystat: Allow to sort keys

tags/3.5
Vsevolod Stakhov 1 year ago
parent
commit
aff665421f
No account linked to committer's email address
1 changed files with 21 additions and 16 deletions
  1. 21
    16
      lualib/rspamadm/fuzzy_stat.lua

+ 21
- 16
lualib/rspamadm/fuzzy_stat.lua View File

@@ -4,7 +4,7 @@ local opts = {}

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"
@@ -15,12 +15,13 @@ parser:flag "--short"
: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)
@@ -75,31 +76,31 @@ local function print_stat(st, tabs)
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)
@@ -255,11 +256,15 @@ return function(args, res)
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')
@@ -267,7 +272,7 @@ return function(args, res)
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']))
@@ -299,7 +304,7 @@ return function(args, res)
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')

Loading…
Cancel
Save