Annotate

tools/cfgdump.lua @ 13030:1f89a2a9f532

util.human.io: Support for dynamic "proportional" columns Instead of a percentage, this allows you to specify e.g. `width="[N]p"`, where a width="2p" will be twice the width of a width="1p" column. Compatibility with the old %-based widths is preserved, and percentages adding up to more than 100 are handled more gracefully.
author Matthew Wild <mwild1@gmail.com>
date Thu, 06 Apr 2023 14:51:52 +0100
parent 11570:c3896c714a83
child 13142:879a6a33c21b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
11192
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
1 #!/usr/bin/env lua
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
2
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
3 -- cfgdump.lua prosody.cfg.lua [[host] option]
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
4
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
5 local s_format, print = string.format, print;
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
6 local printf = function(fmt, ...) return print(s_format(fmt, ...)); end
11569
08dab7df152b tools/cfgdump: Iterate in sort order to give stable output
Kim Alvefur <zash@zash.se>
parents: 11192
diff changeset
7 local it = require "util.iterators";
11570
c3896c714a83 tools/cfgdump: Serialize individual (table) settings in stable order too
Kim Alvefur <zash@zash.se>
parents: 11569
diff changeset
8 local function sort_anything(a, b)
c3896c714a83 tools/cfgdump: Serialize individual (table) settings in stable order too
Kim Alvefur <zash@zash.se>
parents: 11569
diff changeset
9 local typeof_a, typeof_b = type(a), type(b);
c3896c714a83 tools/cfgdump: Serialize individual (table) settings in stable order too
Kim Alvefur <zash@zash.se>
parents: 11569
diff changeset
10 if typeof_a ~= typeof_b then return typeof_a < typeof_b end
c3896c714a83 tools/cfgdump: Serialize individual (table) settings in stable order too
Kim Alvefur <zash@zash.se>
parents: 11569
diff changeset
11 return a < b -- should work for everything in a config file
c3896c714a83 tools/cfgdump: Serialize individual (table) settings in stable order too
Kim Alvefur <zash@zash.se>
parents: 11569
diff changeset
12 end
c3896c714a83 tools/cfgdump: Serialize individual (table) settings in stable order too
Kim Alvefur <zash@zash.se>
parents: 11569
diff changeset
13 local serialization = require "util.serialization";
c3896c714a83 tools/cfgdump: Serialize individual (table) settings in stable order too
Kim Alvefur <zash@zash.se>
parents: 11569
diff changeset
14 local serialize = serialization.new and serialization.new({
c3896c714a83 tools/cfgdump: Serialize individual (table) settings in stable order too
Kim Alvefur <zash@zash.se>
parents: 11569
diff changeset
15 unquoted = true, table_iterator = function(t) return it.sorted_pairs(t, sort_anything); end,
c3896c714a83 tools/cfgdump: Serialize individual (table) settings in stable order too
Kim Alvefur <zash@zash.se>
parents: 11569
diff changeset
16 }) or serialization.serialize;
11192
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
17 local configmanager = require"core.configmanager";
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
18 local startup = require "util.startup";
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
19
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
20 startup.set_function_metatable();
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
21 local config_filename, onlyhost, onlyoption = ...;
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
22
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
23 local ok, _, err = configmanager.load(config_filename or "./prosody.cfg.lua", "lua");
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
24 assert(ok, err);
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
25
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
26 if onlyhost then
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
27 if not onlyoption then
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
28 onlyhost, onlyoption = "*", onlyhost;
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
29 end
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
30 if onlyhost ~= "*" then
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
31 local component_module = configmanager.get(onlyhost, "component_module");
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
32
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
33 if component_module == "component" then
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
34 printf("Component %q", onlyhost);
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
35 elseif component_module then
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
36 printf("Component %q %q", onlyhost, component_module);
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
37 else
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
38 printf("VirtualHost %q", onlyhost);
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
39 end
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
40 end
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
41 printf("%s = %s", onlyoption or "?", serialize(configmanager.get(onlyhost, onlyoption)));
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
42 return;
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
43 end
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
44
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
45 local config = configmanager.getconfig();
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
46
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
47
11569
08dab7df152b tools/cfgdump: Iterate in sort order to give stable output
Kim Alvefur <zash@zash.se>
parents: 11192
diff changeset
48 for host, hostcfg in it.sorted_pairs(config) do
11192
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
49 local fixed = {};
11569
08dab7df152b tools/cfgdump: Iterate in sort order to give stable output
Kim Alvefur <zash@zash.se>
parents: 11192
diff changeset
50 for option, value in it.sorted_pairs(hostcfg) do
11192
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
51 fixed[option] = value;
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
52 if option:match("ports?$") or option:match("interfaces?$") then
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
53 if option:match("s$") then
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
54 if type(value) ~= "table" then
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
55 fixed[option] = { value };
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
56 end
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
57 else
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
58 if type(value) == "table" and #value > 1 then
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
59 fixed[option] = nil;
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
60 fixed[option.."s"] = value;
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
61 end
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
62 end
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
63 end
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
64 end
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
65 config[host] = fixed;
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
66 end
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
67
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
68 local globals = config["*"]; config["*"] = nil;
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
69
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
70 local function printsection(section)
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
71 local out, n = {}, 1;
11569
08dab7df152b tools/cfgdump: Iterate in sort order to give stable output
Kim Alvefur <zash@zash.se>
parents: 11192
diff changeset
72 for k,v in it.sorted_pairs(section) do
11192
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
73 out[n], n = s_format("%s = %s", k, serialize(v)), n + 1;
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
74 end
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
75 table.sort(out);
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
76 print(table.concat(out, "\n"));
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
77 end
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
78
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
79 print("-------------- Prosody Exported Configuration File -------------");
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
80 print();
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
81 print("------------------------ Global section ------------------------");
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
82 print();
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
83 printsection(globals);
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
84 print();
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
85
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
86 local has_components = nil;
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
87
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
88 print("------------------------ Virtual hosts -------------------------");
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
89
11569
08dab7df152b tools/cfgdump: Iterate in sort order to give stable output
Kim Alvefur <zash@zash.se>
parents: 11192
diff changeset
90 for host, hostcfg in it.sorted_pairs(config) do
11192
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
91 setmetatable(hostcfg, nil);
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
92 hostcfg.defined = nil;
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
93
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
94 if hostcfg.component_module == nil then
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
95 print();
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
96 printf("VirtualHost %q", host);
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
97 printsection(hostcfg);
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
98 else
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
99 has_components = true
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
100 end
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
101 end
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
102
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
103 print();
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
104
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
105 if has_components then
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
106 print("------------------------- Components ---------------------------");
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
107
11569
08dab7df152b tools/cfgdump: Iterate in sort order to give stable output
Kim Alvefur <zash@zash.se>
parents: 11192
diff changeset
108 for host, hostcfg in it.sorted_pairs(config) do
11192
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
109 local component_module = hostcfg.component_module;
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
110 hostcfg.component_module = nil;
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
111
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
112 if component_module then
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
113 print();
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
114 if component_module == "component" then
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
115 printf("Component %q", host);
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
116 else
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
117 printf("Component %q %q", host, component_module);
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
118 hostcfg.component_module = nil;
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
119 hostcfg.load_global_modules = nil;
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
120 end
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
121 printsection(hostcfg);
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
122 end
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
123 end
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
124 end
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
125
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
126 print()
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
127 print("------------------------- End of File --------------------------");
11f285a439a4 tools/cfgdump: Reads Prosody config file and pretty-prints it back out
Kim Alvefur <zash@zash.se>
parents:
diff changeset
128