aboutsummaryrefslogtreecommitdiffstats
path: root/core
Commit message (Collapse)AuthorAgeFilesLines
* Statistics: Rewrite statistics backends to use OpenMetricsJonas Schäfer2021-04-182-47/+202
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* core.sessionmanager: Add a dummy rawsend() method to resting sessionsKim Alvefur2021-04-151-0/+1
| | | | | | | Should fix a traceback on attempted use after destruction, in case where opportunistic_writes was in use. Thanks Ge0rG
* core.statsmanager: Allow special "manual" value for statistics_intervalKim Alvefur2021-04-061-6/+18
| | | | | | | | | | | | | When set, no periodic statistics collection is done by core.statsmanager, instead some module is expected to call collect() when it suits. Obviously only one such module should be enabled. Quoth jonas’ > correct way is to scrape the internal sources on each call to /metrics > in the context of Prometheus "manual" as opposed to "automatic", from the point of view of statsmanager.
* core.statsmanager: Cover util.statistics work in processing measurementKim Alvefur2021-04-061-1/+1
| | | | | | | | | Zash> Btw, this conditional and loop, shouldn't it be covered by the timing measurement? Zash> Isn't that where all the util.statistics work is done? MattJ> Yeah, it should Zash> ("the", but there's two ... which one‽) MattJ> Yeah... not sure :) MattJ> Processing I guess
* core.hostmanager: Remove obsolete clearing of srv_hostsKim Alvefur2021-04-061-1/+0
| | | | Gone with s2sout.lib in 756b8821007a
* usermanager: expose set_roles through APIJonas Schäfer2021-03-221-0/+18
|
* core.s2smanager: Set "direction" on destroyed sessions (fixes #1641)Kim Alvefur2021-03-031-0/+1
| | | | | | | | Should prevent errors in certain places where it logs session.direction captialized using gsub. Might cause bugs tho, but then the session is destroyed so maybe it doesn't matter?
* core.portmanager: Log SNI hosts, services looked forKim Alvefur2021-03-021-0/+1
| | | | To highlight how many these are
* core.certmanager: Add comments explaining the 'verifyext' TLS settingsKim Alvefur2021-02-061-1/+4
| | | | | | | Thanks to debacle for reminding me, in the context of mod_auth_ccert I wonder if we still need lsec_ignore_purpose, Let's Encrypt seems to include both client and server purposes in certs.
* core.modulemanager: Fix resource location compat with LuaRocks 2.xKim Alvefur2021-01-161-1/+1
| | | | | The path doesn't include lua version, at least least on Debian, which still has luarocks 2.x
* core.modulemanager: Fix error if installer path missingKim Alvefur2020-10-111-1/+1
| | | | | Happens if run outside prosody. Noticed because because the storage tests fail.
* core.moduleapi: Return resource path from module:get_directory() (API BC)Kim Alvefur2020-10-091-2/+2
| | | | | | | | | | | | | | | | | | | :get_directory has so far returned the base directory of the current module source code. This has worked well so far to load resources which tend to be included in the same directory, but with the plugin installer using LuaRocks, extra resources (e.g. templates and other assets) these are saved in a completely different directory. In be73df6765b9 core.modulemanager gained some code for finding that directory and saving it in module.resource_path but now the question is how this should be reflected in the API. A survey of community modules suggest the vast majority use the :get_directory method for locating templates and other assets, rather than the code (which would use module:require instead). Therefore this commit changes :get_directory to return the resource_path when available. This should work for most modules.
* core.modulemanager: Add compat for LuaRocks 2.xKim Alvefur2020-10-071-0/+7
|
* core.moduleapi: Use resource path for :load_resource()Kim Alvefur2020-10-071-1/+1
|
* core.modulemanager: Locate resources of LuaRocks-installed modulesKim Alvefur2020-10-071-0/+31
| | | | | | | Extra non-code files included with a `copy_directories` directive in a LuaRocks manifest will be copied into a per-module and per-version directory under /lib/luarocks/ and all this is there to dig that out so it can be used in e.g. moduleapi :load_resource().
* core.certmanager: Add TODO about LuaSec issueKim Alvefur2020-06-071-0/+3
|
* core.moduleapi: Allow passing a config table trough :measureKim Alvefur2019-01-041-2/+2
|
* core.statsmanager: Allow passing a config table trough measureKim Alvefur2019-01-041-2/+2
|
* Merge 0.11->trunkKim Alvefur2020-04-101-6/+8
|\
| * core.certmanager: Look for privkey.pem to go with fullchain.pem (fix #1526)Kim Alvefur2020-04-101-6/+8
| | | | | | | | | | | | | | This makes `prosodyctl cert import example.com /path/to/example.com/fullchain.pem` work. This was never intended to, yet users commonly tried this and got problems.
| * core.rostermanager: Cache rosters of offline users for faster access (fixes ↵Kim Alvefur2018-12-161-0/+22
| | | | | | | | | | | | #1233) (grafted from 42a3e3a2824822cef7640ac56d182c59bdd4224e)
* | moduleapi: Rename argument to silence luacheckKim Alvefur2020-04-011-2/+2
| |
* | moduleapi: Fix handling of replies to :send_iq from internal modulesKim Alvefur2020-03-221-1/+10
| | | | | | | | | | Unclear exactly why, but replies to some queries to local modules would be discarded by stanza_router. This appears to fix it.
* | usermanager: Fix traceback when checking admin status of host-only JIDs ↵Matthew Wild2020-03-191-1/+1
| | | | | | | | (fixes #1508)
* | storagemanager, mod_storage_sql: Rename methods to :get_all() and :delete_all()Matthew Wild2020-03-111-4/+4
| |
* | storagemanager: Add support for :find_key() and :delete_key() to map store shimMatthew Wild2020-03-111-0/+33
| |
* | usermanager, mod_authz_*: Merge mod_authz_config and mod_authz_internal into ↵Matthew Wild2020-02-231-1/+1
| | | | | | | | the latter
* | stanza_router: only fire pre-stanza if firing other preevents (e.g. for c2s ↵Matthew Wild2020-02-051-6/+6
| | | | | | | | sessions)
* | sessionmanager: Support passing an auth scope to make_authenticatedMatthew Wild2020-02-051-1/+2
| |
* | portmanager: Don't auto-start network services under prosodyctlMatthew Wild2020-02-051-1/+1
| |
* | usermanager: Add get_roles() functionMatthew Wild2020-02-051-1/+7
| |
* | stanza_router: Add once-per-routed-stanza event, pre-stanzaMatthew Wild2020-02-051-1/+8
| |
* | mod_authz_internal, usermanager: Rename to mod_authz_configMatthew Wild2020-01-271-1/+1
| |
* | usermanager: Load authz providers on components alsoMatthew Wild2020-01-271-4/+6
| |
* | usermanager, mod_authz_internal: Move admin-checking functionality into a ↵Matthew Wild2020-01-271-30/+32
| | | | | | | | | | | | | | module. Fixes #517 (ish). Note: Removes the ability for mod_auth_* providers to determine user admin status. Such modules will need to have their is_admin methods ported to be a mod_authz_* provider.
* | core.moduleapi: Hook correct event type in some casesKim Alvefur2020-01-161-1/+2
| | | | | | | | | | In rare cases, module.host can be a bare JID, in which case this test did the wrong thing.
* | core.moduleapi: Rename local name for util.error for consistencyKim Alvefur2019-12-301-6/+6
| | | | | | | | It's called 'errors' everywhere else except here.
* | core.moduleapi: Fix error context in :send_iq APIKim Alvefur2019-12-301-1/+1
| | | | | | | | | | It got passed as argument to reject() instead of the util.error function and was lost.
* | core.statsmanager: Ignore unused variable [luacheck]Kim Alvefur2019-12-231-0/+1
| |
* | core.portmanager: Ignore unused return variable [luacheck]Kim Alvefur2019-12-231-0/+1
| |
* | core.modulemanager: Silence warning about unused err variable [luacheck]Kim Alvefur2019-12-201-1/+2
| |
* | core.stanza_router: Silence warning about unused err_message [luacheck]Kim Alvefur2019-12-201-1/+1
| |
* | core.stanza_router: Extract host part of JIDs directly [luacheck]Kim Alvefur2019-12-201-3/+4
| | | | | | | | Silences warning about unused return values
* | rostermanager, mod_presence: Support for subscription preapproval (fixes #686)Matthew Wild2019-12-191-3/+20
| |
* | core.portmanager: Complete error message for SNI TLS context problemsKim Alvefur2019-11-301-1/+1
| |
* | core.portmanager: Fix TLS context inheritance for SNI hosts (completes SNI ↵Kim Alvefur2019-11-292-10/+6
| | | | | | | | support)
* | core.portmanager: Don't set the first TLS context with a cert as main contextKim Alvefur2019-11-291-4/+0
| | | | | | | | Don't think this works and it's apparently acceptable to require SNI these days.
* | Merge 0.11->trunkKim Alvefur2019-11-2311-63/+348
|\ \ | |/ |/|
| * s2s: Allow passing a custom error for bouncing queued stanzas (#770)Kim Alvefur2019-11-231-2/+2
| | | | | | | | Since stream errors and stanza errors are different
| * core.sessionmanager: Require that client-requested resources pass strict ↵Kim Alvefur2019-11-021-1/+1
| | | | | | | | resourceprep