Software /
code /
prosody
Annotate
util/dependencies.lua @ 11523:5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
The metric subsystem of Prosody has had some shortcomings from
the perspective of the current state-of-the-art in metric
observability.
The OpenMetrics standard [0] is a formalization of the data
model (and serialization format) of the well-known and
widely-used Prometheus [1] software stack.
The previous stats subsystem of Prosody did not map well to that
format (see e.g. [2] and [3]); the key reason is that it was
trying to do too much math on its own ([2]) while lacking
first-class support for "families" of metrics ([3]) and
structured metric metadata (despite the `extra` argument to
metrics, there was no standard way of representing common things
like "tags" or "labels").
Even though OpenMetrics has grown from the Prometheus world of
monitoring, it maps well to other popular monitoring stacks
such as:
- InfluxDB (labels can be mapped to tags and fields as necessary)
- Carbon/Graphite (labels can be attached to the metric name with
dot-separation)
- StatsD (see graphite when assuming that graphite is used as
backend, which is the default)
The util.statsd module has been ported to use the OpenMetrics
model as a proof of concept. An implementation which exposes
the util.statistics backend data as Prometheus metrics is
ready for publishing in prosody-modules (most likely as
mod_openmetrics_prometheus to avoid breaking existing 0.11
deployments).
At the same time, the previous measure()-based API had one major
advantage: It is really simple and easy to use without requiring
lots of knowledge about OpenMetrics or similar concepts. For that
reason as well as compatibility with existing code, it is preserved
and may even be extended in the future.
However, code relying on the `stats-updated` event as well as
`get_stats` from `statsmanager` will break because the data
model has changed completely; in case of `stats-updated`, the
code will simply not run (as the event was renamed in order
to avoid conflicts); the `get_stats` function has been removed
completely (so it will cause a traceback when it is attempted
to be used).
Note that the measure_*_event methods have been removed from
the module API. I was unable to find any uses or documentation
and thus deemed they should not be ported. Re-implementation is
possible when necessary.
[0]: https://openmetrics.io/
[1]: https://prometheus.io/
[2]: #959
[3]: #960
author | Jonas Schäfer <jonas@wielicki.name> |
---|---|
date | Sun, 18 Apr 2021 11:47:41 +0200 |
parent | 11141:a5acd6354845 |
child | 11958:31f83a645ce6 |
rev | line source |
---|---|
1523
841d61be198f
Remove version number from copyright headers
Matthew Wild <mwild1@gmail.com>
parents:
896
diff
changeset
|
1 -- Prosody IM |
2923
b7049746bd29
Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents:
2815
diff
changeset
|
2 -- Copyright (C) 2008-2010 Matthew Wild |
b7049746bd29
Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents:
2815
diff
changeset
|
3 -- Copyright (C) 2008-2010 Waqas Hussain |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
4426
diff
changeset
|
4 -- |
758 | 5 -- This project is MIT/X11 licensed. Please see the |
6 -- COPYING file in the source package for more information. | |
519
cccd610a0ef9
Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents:
449
diff
changeset
|
7 -- |
cccd610a0ef9
Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents:
449
diff
changeset
|
8 |
6777
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
6067
diff
changeset
|
9 local function softreq(...) local ok, lib = pcall(require, ...); if ok then return lib; else return nil, lib; end end |
10906
a1fed82c44b9
util.dependencies: Use util.human.io.table to replace custom layout code
Matthew Wild <mwild1@gmail.com>
parents:
10535
diff
changeset
|
10 local platform_table = require "util.human.io".table({ { width = 15, align = "right" }, { width = "100%" } }); |
408
eb1a0960cefb
Friendlier messages on missing dependencies
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
11 |
2513
a8aa7616b154
util.dependencies: Load luarocks.loader/luarocks.require
Matthew Wild <mwild1@gmail.com>
parents:
2510
diff
changeset
|
12 -- Required to be able to find packages installed with luarocks |
a8aa7616b154
util.dependencies: Load luarocks.loader/luarocks.require
Matthew Wild <mwild1@gmail.com>
parents:
2510
diff
changeset
|
13 if not softreq "luarocks.loader" then -- LuaRocks 2.x |
a8aa7616b154
util.dependencies: Load luarocks.loader/luarocks.require
Matthew Wild <mwild1@gmail.com>
parents:
2510
diff
changeset
|
14 softreq "luarocks.require"; -- LuaRocks <1.x |
a8aa7616b154
util.dependencies: Load luarocks.loader/luarocks.require
Matthew Wild <mwild1@gmail.com>
parents:
2510
diff
changeset
|
15 end |
408
eb1a0960cefb
Friendlier messages on missing dependencies
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
16 |
10535
29c1a3bf1d29
util.dependencies: Pass require error to error formatting function
Kim Alvefur <zash@zash.se>
parents:
10406
diff
changeset
|
17 local function missingdep(name, sources, msg, err) -- luacheck: ignore err |
29c1a3bf1d29
util.dependencies: Pass require error to error formatting function
Kim Alvefur <zash@zash.se>
parents:
10406
diff
changeset
|
18 -- TODO print something about the underlying error, useful for debugging |
409
2269e9cbe153
Add MD5 to the list of checked dependencies
Matthew Wild <mwild1@gmail.com>
parents:
408
diff
changeset
|
19 print(""); |
2269e9cbe153
Add MD5 to the list of checked dependencies
Matthew Wild <mwild1@gmail.com>
parents:
408
diff
changeset
|
20 print("**************************"); |
408
eb1a0960cefb
Friendlier messages on missing dependencies
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
21 print("Prosody was unable to find "..tostring(name)); |
eb1a0960cefb
Friendlier messages on missing dependencies
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
22 print("This package can be obtained in the following ways:"); |
eb1a0960cefb
Friendlier messages on missing dependencies
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
23 print(""); |
10906
a1fed82c44b9
util.dependencies: Use util.human.io.table to replace custom layout code
Matthew Wild <mwild1@gmail.com>
parents:
10535
diff
changeset
|
24 for _, row in ipairs(sources) do |
a1fed82c44b9
util.dependencies: Use util.human.io.table to replace custom layout code
Matthew Wild <mwild1@gmail.com>
parents:
10535
diff
changeset
|
25 print(platform_table(row)); |
408
eb1a0960cefb
Friendlier messages on missing dependencies
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
26 end |
410
5ce6801ad2e4
Trivial whitespace fix in the missing dependency message
Matthew Wild <mwild1@gmail.com>
parents:
409
diff
changeset
|
27 print(""); |
408
eb1a0960cefb
Friendlier messages on missing dependencies
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
28 print(msg or (name.." is required for Prosody to run, so we will now exit.")); |
7359
a5a080c12c96
Update every link to the documentation to use HTTPS
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
7264
diff
changeset
|
29 print("More help can be found on our website, at https://prosody.im/doc/depends"); |
409
2269e9cbe153
Add MD5 to the list of checked dependencies
Matthew Wild <mwild1@gmail.com>
parents:
408
diff
changeset
|
30 print("**************************"); |
2269e9cbe153
Add MD5 to the list of checked dependencies
Matthew Wild <mwild1@gmail.com>
parents:
408
diff
changeset
|
31 print(""); |
408
eb1a0960cefb
Friendlier messages on missing dependencies
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
32 end |
eb1a0960cefb
Friendlier messages on missing dependencies
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
33 |
6777
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
6067
diff
changeset
|
34 local function check_dependencies() |
6778
4009ae66e0f0
util.dependencies: Only abort on Lua versions before 5.1, log a warning about 5.2 and above for now
Kim Alvefur <zash@zash.se>
parents:
6777
diff
changeset
|
35 if _VERSION < "Lua 5.1" then |
6065
9ab23488a17c
util.dependencies: Check for Lua 5.1. We don't currently support any other versions. LuaJIT identifies as 5.1.
Waqas Hussain <waqas20@gmail.com>
parents:
6043
diff
changeset
|
36 print "***********************************" |
9ab23488a17c
util.dependencies: Check for Lua 5.1. We don't currently support any other versions. LuaJIT identifies as 5.1.
Waqas Hussain <waqas20@gmail.com>
parents:
6043
diff
changeset
|
37 print("Unsupported Lua version: ".._VERSION); |
6778
4009ae66e0f0
util.dependencies: Only abort on Lua versions before 5.1, log a warning about 5.2 and above for now
Kim Alvefur <zash@zash.se>
parents:
6777
diff
changeset
|
38 print("At least Lua 5.1 is required."); |
6065
9ab23488a17c
util.dependencies: Check for Lua 5.1. We don't currently support any other versions. LuaJIT identifies as 5.1.
Waqas Hussain <waqas20@gmail.com>
parents:
6043
diff
changeset
|
39 print "***********************************" |
9ab23488a17c
util.dependencies: Check for Lua 5.1. We don't currently support any other versions. LuaJIT identifies as 5.1.
Waqas Hussain <waqas20@gmail.com>
parents:
6043
diff
changeset
|
40 return false; |
9ab23488a17c
util.dependencies: Check for Lua 5.1. We don't currently support any other versions. LuaJIT identifies as 5.1.
Waqas Hussain <waqas20@gmail.com>
parents:
6043
diff
changeset
|
41 end |
9ab23488a17c
util.dependencies: Check for Lua 5.1. We don't currently support any other versions. LuaJIT identifies as 5.1.
Waqas Hussain <waqas20@gmail.com>
parents:
6043
diff
changeset
|
42 |
2510
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
43 local fatal; |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
4426
diff
changeset
|
44 |
10535
29c1a3bf1d29
util.dependencies: Pass require error to error formatting function
Kim Alvefur <zash@zash.se>
parents:
10406
diff
changeset
|
45 local lxp, err = softreq "lxp" |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
4426
diff
changeset
|
46 |
2510
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
47 if not lxp then |
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
48 missingdep("luaexpat", { |
10906
a1fed82c44b9
util.dependencies: Use util.human.io.table to replace custom layout code
Matthew Wild <mwild1@gmail.com>
parents:
10535
diff
changeset
|
49 { "Debian/Ubuntu", "sudo apt-get install lua-expat" }; |
a1fed82c44b9
util.dependencies: Use util.human.io.table to replace custom layout code
Matthew Wild <mwild1@gmail.com>
parents:
10535
diff
changeset
|
50 { "luarocks", "luarocks install luaexpat" }; |
a1fed82c44b9
util.dependencies: Use util.human.io.table to replace custom layout code
Matthew Wild <mwild1@gmail.com>
parents:
10535
diff
changeset
|
51 { "Source", "http://matthewwild.co.uk/projects/luaexpat/" }; |
10535
29c1a3bf1d29
util.dependencies: Pass require error to error formatting function
Kim Alvefur <zash@zash.se>
parents:
10406
diff
changeset
|
52 }, nil, err); |
2510
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
53 fatal = true; |
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
54 end |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
4426
diff
changeset
|
55 |
10535
29c1a3bf1d29
util.dependencies: Pass require error to error formatting function
Kim Alvefur <zash@zash.se>
parents:
10406
diff
changeset
|
56 local socket, err = softreq "socket" |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
4426
diff
changeset
|
57 |
2510
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
58 if not socket then |
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
59 missingdep("luasocket", { |
10906
a1fed82c44b9
util.dependencies: Use util.human.io.table to replace custom layout code
Matthew Wild <mwild1@gmail.com>
parents:
10535
diff
changeset
|
60 { "Debian/Ubuntu", "sudo apt-get install lua-socket" }; |
a1fed82c44b9
util.dependencies: Use util.human.io.table to replace custom layout code
Matthew Wild <mwild1@gmail.com>
parents:
10535
diff
changeset
|
61 { "luarocks", "luarocks install luasocket" }; |
a1fed82c44b9
util.dependencies: Use util.human.io.table to replace custom layout code
Matthew Wild <mwild1@gmail.com>
parents:
10535
diff
changeset
|
62 { "Source", "http://www.tecgraf.puc-rio.br/~diego/professional/luasocket/" }; |
10535
29c1a3bf1d29
util.dependencies: Pass require error to error formatting function
Kim Alvefur <zash@zash.se>
parents:
10406
diff
changeset
|
63 }, nil, err); |
2510
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
64 fatal = true; |
9494
b19f676203fd
util.dependencies: Add compat code for normalization of socket constructors
Kim Alvefur <zash@zash.se>
parents:
8235
diff
changeset
|
65 elseif not socket.tcp4 then |
b19f676203fd
util.dependencies: Add compat code for normalization of socket constructors
Kim Alvefur <zash@zash.se>
parents:
8235
diff
changeset
|
66 -- COMPAT LuaSocket before being IP-version agnostic |
b19f676203fd
util.dependencies: Add compat code for normalization of socket constructors
Kim Alvefur <zash@zash.se>
parents:
8235
diff
changeset
|
67 socket.tcp4 = socket.tcp; |
b19f676203fd
util.dependencies: Add compat code for normalization of socket constructors
Kim Alvefur <zash@zash.se>
parents:
8235
diff
changeset
|
68 socket.udp4 = socket.udp; |
2510
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
69 end |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
4426
diff
changeset
|
70 |
2510
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
71 local lfs, err = softreq "lfs" |
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
72 if not lfs then |
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
73 missingdep("luafilesystem", { |
10906
a1fed82c44b9
util.dependencies: Use util.human.io.table to replace custom layout code
Matthew Wild <mwild1@gmail.com>
parents:
10535
diff
changeset
|
74 { "luarocks", "luarocks install luafilesystem" }; |
a1fed82c44b9
util.dependencies: Use util.human.io.table to replace custom layout code
Matthew Wild <mwild1@gmail.com>
parents:
10535
diff
changeset
|
75 { "Debian/Ubuntu", "sudo apt-get install lua-filesystem" }; |
a1fed82c44b9
util.dependencies: Use util.human.io.table to replace custom layout code
Matthew Wild <mwild1@gmail.com>
parents:
10535
diff
changeset
|
76 { "Source", "http://www.keplerproject.org/luafilesystem/" }; |
10535
29c1a3bf1d29
util.dependencies: Pass require error to error formatting function
Kim Alvefur <zash@zash.se>
parents:
10406
diff
changeset
|
77 }, nil, err); |
2510
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
78 fatal = true; |
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
79 end |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
4426
diff
changeset
|
80 |
10535
29c1a3bf1d29
util.dependencies: Pass require error to error formatting function
Kim Alvefur <zash@zash.se>
parents:
10406
diff
changeset
|
81 local ssl, err = softreq "ssl" |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
4426
diff
changeset
|
82 |
2510
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
83 if not ssl then |
2157
7cb0aa497326
util.dependencies: Clearer message, add homepages, etc.
Matthew Wild <mwild1@gmail.com>
parents:
2156
diff
changeset
|
84 missingdep("LuaSec", { |
10906
a1fed82c44b9
util.dependencies: Use util.human.io.table to replace custom layout code
Matthew Wild <mwild1@gmail.com>
parents:
10535
diff
changeset
|
85 { "Debian/Ubuntu", "sudo apt-get install lua-sec" }; |
a1fed82c44b9
util.dependencies: Use util.human.io.table to replace custom layout code
Matthew Wild <mwild1@gmail.com>
parents:
10535
diff
changeset
|
86 { "luarocks", "luarocks install luasec" }; |
a1fed82c44b9
util.dependencies: Use util.human.io.table to replace custom layout code
Matthew Wild <mwild1@gmail.com>
parents:
10535
diff
changeset
|
87 { "Source", "https://github.com/brunoos/luasec" }; |
10535
29c1a3bf1d29
util.dependencies: Pass require error to error formatting function
Kim Alvefur <zash@zash.se>
parents:
10406
diff
changeset
|
88 }, "SSL/TLS support will not be available", err); |
413
4b61529d0884
Refuse to run without SSL/TLS unless run_without_ssl is set in config
Matthew Wild <mwild1@gmail.com>
parents:
410
diff
changeset
|
89 end |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
4426
diff
changeset
|
90 |
10535
29c1a3bf1d29
util.dependencies: Pass require error to error formatting function
Kim Alvefur <zash@zash.se>
parents:
10406
diff
changeset
|
91 local bit, err = softreq"util.bitcompat"; |
7767
36bf9ed87ae1
util.dependencies: Add check and info about lua-bitops (for mod_websockets)
Kim Alvefur <zash@zash.se>
parents:
7766
diff
changeset
|
92 |
36bf9ed87ae1
util.dependencies: Add check and info about lua-bitops (for mod_websockets)
Kim Alvefur <zash@zash.se>
parents:
7766
diff
changeset
|
93 if not bit then |
36bf9ed87ae1
util.dependencies: Add check and info about lua-bitops (for mod_websockets)
Kim Alvefur <zash@zash.se>
parents:
7766
diff
changeset
|
94 missingdep("lua-bitops", { |
10906
a1fed82c44b9
util.dependencies: Use util.human.io.table to replace custom layout code
Matthew Wild <mwild1@gmail.com>
parents:
10535
diff
changeset
|
95 { "Debian/Ubuntu", "sudo apt-get install lua-bitop" }; |
a1fed82c44b9
util.dependencies: Use util.human.io.table to replace custom layout code
Matthew Wild <mwild1@gmail.com>
parents:
10535
diff
changeset
|
96 { "luarocks", "luarocks install luabitop" }; |
a1fed82c44b9
util.dependencies: Use util.human.io.table to replace custom layout code
Matthew Wild <mwild1@gmail.com>
parents:
10535
diff
changeset
|
97 { "Source", "http://bitop.luajit.org/" }; |
10535
29c1a3bf1d29
util.dependencies: Pass require error to error formatting function
Kim Alvefur <zash@zash.se>
parents:
10406
diff
changeset
|
98 }, "WebSocket support will not be available", err); |
7767
36bf9ed87ae1
util.dependencies: Add check and info about lua-bitops (for mod_websockets)
Kim Alvefur <zash@zash.se>
parents:
7766
diff
changeset
|
99 end |
36bf9ed87ae1
util.dependencies: Add check and info about lua-bitops (for mod_websockets)
Kim Alvefur <zash@zash.se>
parents:
7766
diff
changeset
|
100 |
10975
f997e3e8bc23
util.dependencies: Quiet luacheck
Kim Alvefur <zash@zash.se>
parents:
10974
diff
changeset
|
101 local unbound, err = softreq"lunbound"; -- luacheck: ignore 211/err |
f997e3e8bc23
util.dependencies: Quiet luacheck
Kim Alvefur <zash@zash.se>
parents:
10974
diff
changeset
|
102 if not unbound then -- luacheck: ignore 542 |
10974
3b9d533da8fe
util.dependencies: Tone down lua-unbound dependency for now
Kim Alvefur <zash@zash.se>
parents:
10965
diff
changeset
|
103 --[[ TODO Re-enable once packages are available |
10963
80733851be8b
util.dependencies: Add awareness of luaunbound
Kim Alvefur <zash@zash.se>
parents:
10906
diff
changeset
|
104 missingdep("lua-unbound", { |
80733851be8b
util.dependencies: Add awareness of luaunbound
Kim Alvefur <zash@zash.se>
parents:
10906
diff
changeset
|
105 { "luarocks", "luarocks install luaunbound" }; |
80733851be8b
util.dependencies: Add awareness of luaunbound
Kim Alvefur <zash@zash.se>
parents:
10906
diff
changeset
|
106 { "Source", "https://www.zash.se/luaunbound.html" }; |
80733851be8b
util.dependencies: Add awareness of luaunbound
Kim Alvefur <zash@zash.se>
parents:
10906
diff
changeset
|
107 }, "Old DNS resolver library will be used", err); |
10974
3b9d533da8fe
util.dependencies: Tone down lua-unbound dependency for now
Kim Alvefur <zash@zash.se>
parents:
10965
diff
changeset
|
108 --]] |
10965
f5d5fc409680
util.dependencies: Prefer net.unbound over net.adns
Kim Alvefur <zash@zash.se>
parents:
10963
diff
changeset
|
109 else |
f5d5fc409680
util.dependencies: Prefer net.unbound over net.adns
Kim Alvefur <zash@zash.se>
parents:
10963
diff
changeset
|
110 package.preload["net.adns"] = function () |
f5d5fc409680
util.dependencies: Prefer net.unbound over net.adns
Kim Alvefur <zash@zash.se>
parents:
10963
diff
changeset
|
111 local ub = require "net.unbound"; |
f5d5fc409680
util.dependencies: Prefer net.unbound over net.adns
Kim Alvefur <zash@zash.se>
parents:
10963
diff
changeset
|
112 return ub; |
f5d5fc409680
util.dependencies: Prefer net.unbound over net.adns
Kim Alvefur <zash@zash.se>
parents:
10963
diff
changeset
|
113 end |
7767
36bf9ed87ae1
util.dependencies: Add check and info about lua-bitops (for mod_websockets)
Kim Alvefur <zash@zash.se>
parents:
7766
diff
changeset
|
114 end |
36bf9ed87ae1
util.dependencies: Add check and info about lua-bitops (for mod_websockets)
Kim Alvefur <zash@zash.se>
parents:
7766
diff
changeset
|
115 |
2510
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
116 local encodings, err = softreq "util.encodings" |
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
117 if not encodings then |
7264
6d97895c2bd7
util.dependencies: Show the full error when a symbol is not found (i.e., when running Prosody with the wrong version of Lua).
Thijs Alkemade <me@thijsalkema.de>
parents:
7007
diff
changeset
|
118 if err:match("module '[^']*' not found") then |
7875
3fbfd7210d78
util.dependencies: Normalize whitespace
Kim Alvefur <zash@zash.se>
parents:
7813
diff
changeset
|
119 missingdep("util.encodings", { |
10906
a1fed82c44b9
util.dependencies: Use util.human.io.table to replace custom layout code
Matthew Wild <mwild1@gmail.com>
parents:
10535
diff
changeset
|
120 { "Windows", "Make sure you have encodings.dll from the Prosody distribution in util/" }; |
a1fed82c44b9
util.dependencies: Use util.human.io.table to replace custom layout code
Matthew Wild <mwild1@gmail.com>
parents:
10535
diff
changeset
|
121 { "GNU/Linux", "Run './configure' and 'make' in the Prosody source directory to build util/encodings.so" }; |
7875
3fbfd7210d78
util.dependencies: Normalize whitespace
Kim Alvefur <zash@zash.se>
parents:
7813
diff
changeset
|
122 }); |
2510
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
123 else |
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
124 print "***********************************" |
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
125 print("util/encodings couldn't be loaded. Check that you have a recent version of libidn"); |
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
126 print "" |
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
127 print("The full error was:"); |
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
128 print(err) |
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
129 print "***********************************" |
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
130 end |
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
131 fatal = true; |
2169
c06fdb6b57bd
util.dependencies: Log an error if the current version of LuaSec installed contains The Bug (thanks Remko)
Matthew Wild <mwild1@gmail.com>
parents:
2158
diff
changeset
|
132 end |
408
eb1a0960cefb
Friendlier messages on missing dependencies
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
133 |
2510
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
134 local hashes, err = softreq "util.hashes" |
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
135 if not hashes then |
7264
6d97895c2bd7
util.dependencies: Show the full error when a symbol is not found (i.e., when running Prosody with the wrong version of Lua).
Thijs Alkemade <me@thijsalkema.de>
parents:
7007
diff
changeset
|
136 if err:match("module '[^']*' not found") then |
7875
3fbfd7210d78
util.dependencies: Normalize whitespace
Kim Alvefur <zash@zash.se>
parents:
7813
diff
changeset
|
137 missingdep("util.hashes", { |
10906
a1fed82c44b9
util.dependencies: Use util.human.io.table to replace custom layout code
Matthew Wild <mwild1@gmail.com>
parents:
10535
diff
changeset
|
138 { "Windows", "Make sure you have hashes.dll from the Prosody distribution in util/" }; |
a1fed82c44b9
util.dependencies: Use util.human.io.table to replace custom layout code
Matthew Wild <mwild1@gmail.com>
parents:
10535
diff
changeset
|
139 { "GNU/Linux", "Run './configure' and 'make' in the Prosody source directory to build util/hashes.so" }; |
7875
3fbfd7210d78
util.dependencies: Normalize whitespace
Kim Alvefur <zash@zash.se>
parents:
7813
diff
changeset
|
140 }); |
3fbfd7210d78
util.dependencies: Normalize whitespace
Kim Alvefur <zash@zash.se>
parents:
7813
diff
changeset
|
141 else |
2510
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
142 print "***********************************" |
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
143 print("util/hashes couldn't be loaded. Check that you have a recent version of OpenSSL (libcrypto in particular)"); |
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
144 print "" |
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
145 print("The full error was:"); |
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
146 print(err) |
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
147 print "***********************************" |
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
148 end |
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
149 fatal = true; |
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
150 end |
7767
36bf9ed87ae1
util.dependencies: Add check and info about lua-bitops (for mod_websockets)
Kim Alvefur <zash@zash.se>
parents:
7766
diff
changeset
|
151 |
2510
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
152 return not fatal; |
408
eb1a0960cefb
Friendlier messages on missing dependencies
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
153 end |
eb1a0960cefb
Friendlier messages on missing dependencies
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
154 |
6777
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
6067
diff
changeset
|
155 local function log_warnings() |
10049
c523642ea293
util.dependencies: Increase Lua version to warn about to 5.4
Kim Alvefur <zash@zash.se>
parents:
9560
diff
changeset
|
156 if _VERSION > "Lua 5.3" then |
7007
e28fbe6dd424
util.dependencies: Use prosody.log() instead of global log()
Matthew Wild <mwild1@gmail.com>
parents:
6778
diff
changeset
|
157 prosody.log("warn", "Support for %s is experimental, please report any issues", _VERSION); |
6778
4009ae66e0f0
util.dependencies: Only abort on Lua versions before 5.1, log a warning about 5.2 and above for now
Kim Alvefur <zash@zash.se>
parents:
6777
diff
changeset
|
158 end |
6777
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
6067
diff
changeset
|
159 local ssl = softreq"ssl"; |
3904
f93163081b3c
prosody, prosodyctl, util.dependencies: Split checking and logging of dependencies so we can check hard deps before the config and logging is loaded
Matthew Wild <mwild1@gmail.com>
parents:
2925
diff
changeset
|
160 if ssl then |
f93163081b3c
prosody, prosodyctl, util.dependencies: Split checking and logging of dependencies so we can check hard deps before the config and logging is loaded
Matthew Wild <mwild1@gmail.com>
parents:
2925
diff
changeset
|
161 local major, minor, veryminor, patched = ssl._VERSION:match("(%d+)%.(%d+)%.?(%d*)(M?)"); |
f93163081b3c
prosody, prosodyctl, util.dependencies: Split checking and logging of dependencies so we can check hard deps before the config and logging is loaded
Matthew Wild <mwild1@gmail.com>
parents:
2925
diff
changeset
|
162 if not major or ((tonumber(major) == 0 and (tonumber(minor) or 0) <= 3 and (tonumber(veryminor) or 0) <= 2) and patched ~= "M") then |
7359
a5a080c12c96
Update every link to the documentation to use HTTPS
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
7264
diff
changeset
|
163 prosody.log("error", "This version of LuaSec contains a known bug that causes disconnects, see https://prosody.im/doc/depends"); |
3904
f93163081b3c
prosody, prosodyctl, util.dependencies: Split checking and logging of dependencies so we can check hard deps before the config and logging is loaded
Matthew Wild <mwild1@gmail.com>
parents:
2925
diff
changeset
|
164 end |
f93163081b3c
prosody, prosodyctl, util.dependencies: Split checking and logging of dependencies so we can check hard deps before the config and logging is loaded
Matthew Wild <mwild1@gmail.com>
parents:
2925
diff
changeset
|
165 end |
6777
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
6067
diff
changeset
|
166 local lxp = softreq"lxp"; |
4426
ee65aa40ef60
util.dependencies, util.xmppstream: Move LuaExpat version checking to util.dependencies.
Waqas Hussain <waqas20@gmail.com>
parents:
4236
diff
changeset
|
167 if lxp then |
ee65aa40ef60
util.dependencies, util.xmppstream: Move LuaExpat version checking to util.dependencies.
Waqas Hussain <waqas20@gmail.com>
parents:
4236
diff
changeset
|
168 if not pcall(lxp.new, { StartDoctypeDecl = false }) then |
7007
e28fbe6dd424
util.dependencies: Use prosody.log() instead of global log()
Matthew Wild <mwild1@gmail.com>
parents:
6778
diff
changeset
|
169 prosody.log("error", "The version of LuaExpat on your system leaves Prosody " |
4426
ee65aa40ef60
util.dependencies, util.xmppstream: Move LuaExpat version checking to util.dependencies.
Waqas Hussain <waqas20@gmail.com>
parents:
4236
diff
changeset
|
170 .."vulnerable to denial-of-service attacks. You should upgrade to " |
6043
29d2dd705148
util.dependencies: Log error when LuaExpat is not capable of enforcing stanza size limits
Matthew Wild <mwild1@gmail.com>
parents:
4426
diff
changeset
|
171 .."LuaExpat 1.3.0 or higher as soon as possible. See " |
7359
a5a080c12c96
Update every link to the documentation to use HTTPS
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
7264
diff
changeset
|
172 .."https://prosody.im/doc/depends#luaexpat for more information."); |
6043
29d2dd705148
util.dependencies: Log error when LuaExpat is not capable of enforcing stanza size limits
Matthew Wild <mwild1@gmail.com>
parents:
4426
diff
changeset
|
173 end |
29d2dd705148
util.dependencies: Log error when LuaExpat is not capable of enforcing stanza size limits
Matthew Wild <mwild1@gmail.com>
parents:
4426
diff
changeset
|
174 if not lxp.new({}).getcurrentbytecount then |
7007
e28fbe6dd424
util.dependencies: Use prosody.log() instead of global log()
Matthew Wild <mwild1@gmail.com>
parents:
6778
diff
changeset
|
175 prosody.log("error", "The version of LuaExpat on your system does not support " |
6043
29d2dd705148
util.dependencies: Log error when LuaExpat is not capable of enforcing stanza size limits
Matthew Wild <mwild1@gmail.com>
parents:
4426
diff
changeset
|
176 .."stanza size limits, which may leave servers on untrusted " |
29d2dd705148
util.dependencies: Log error when LuaExpat is not capable of enforcing stanza size limits
Matthew Wild <mwild1@gmail.com>
parents:
4426
diff
changeset
|
177 .."networks (e.g. the internet) vulnerable to denial-of-service " |
29d2dd705148
util.dependencies: Log error when LuaExpat is not capable of enforcing stanza size limits
Matthew Wild <mwild1@gmail.com>
parents:
4426
diff
changeset
|
178 .."attacks. You should upgrade to LuaExpat 1.3.0 or higher as " |
29d2dd705148
util.dependencies: Log error when LuaExpat is not capable of enforcing stanza size limits
Matthew Wild <mwild1@gmail.com>
parents:
4426
diff
changeset
|
179 .."soon as possible. See " |
7359
a5a080c12c96
Update every link to the documentation to use HTTPS
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
7264
diff
changeset
|
180 .."https://prosody.im/doc/depends#luaexpat for more information."); |
4426
ee65aa40ef60
util.dependencies, util.xmppstream: Move LuaExpat version checking to util.dependencies.
Waqas Hussain <waqas20@gmail.com>
parents:
4236
diff
changeset
|
181 end |
ee65aa40ef60
util.dependencies, util.xmppstream: Move LuaExpat version checking to util.dependencies.
Waqas Hussain <waqas20@gmail.com>
parents:
4236
diff
changeset
|
182 end |
3904
f93163081b3c
prosody, prosodyctl, util.dependencies: Split checking and logging of dependencies so we can check hard deps before the config and logging is loaded
Matthew Wild <mwild1@gmail.com>
parents:
2925
diff
changeset
|
183 end |
742
b9f59372eb4e
util.dependencies: Show useful messages when our own libraries are not found, too
Matthew Wild <mwild1@gmail.com>
parents:
615
diff
changeset
|
184 |
6777
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
6067
diff
changeset
|
185 return { |
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
6067
diff
changeset
|
186 softreq = softreq; |
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
6067
diff
changeset
|
187 missingdep = missingdep; |
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
6067
diff
changeset
|
188 check_dependencies = check_dependencies; |
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
6067
diff
changeset
|
189 log_warnings = log_warnings; |
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
6067
diff
changeset
|
190 }; |