mirror of
https://github.com/mattermost/mattermost.git
synced 2026-08-29 02:28:16 +08:00
65500cc820
* gather plugin metrics and serve on /metrics * tests * fix recent conflicts from master * fix linting * address review feedback: feature flag, route guard, and unit tests for plugin metrics - Add PluginMetricsCollection feature flag (default true) to allow disabling plugin metric collection without a deploy - Only wrap the /metrics handler with plugin metric collection (not arbitrary plugin routes, which would cause double-listing) - Extract wrapping logic into wrapMetricsHandler for clarity - Add unit tests for addPluginLabelToMetrics covering no-label, existing-label, comments, empty lines, and multiple metrics cases * fix integration tests to use /metrics route so wrapMetricsHandler runs * switch addPluginLabelToMetrics to use expfmt for correct label injection Replace string manipulation with expfmt parse→mutate→re-encode, which correctly handles all metric types, timestamps, and malformed input. Output is normalized: blank lines are dropped and TYPE headers are injected for undeclared metrics. Update unit tests accordingly. * refine addPluginLabelToMetrics: log warnings, drop sort, use assert.Contains - Log a warning (instead of silently discarding) on parse or encode errors, returning empty string in both cases - Remove name sorting — metric family order is irrelevant to Prometheus scrapers - Switch unit test assertions to assert.Contains per line so tests are order-independent * replace strPtr helper with model.NewPointer * fix gofmt: remove extra blank line * replace existing plugin_id label instead of appending a duplicate If a plugin already exports a plugin_id label, overwrite it rather than appending a second one, which would produce invalid Prometheus output. Add test coverage for the replace path. * add missing test coverage per mattermost-build feedback - Unit test: malformed input returns empty string without panicking - Integration: PluginMetricsCollection=false excludes plugin metrics - Integration: plugin returning non-200 status excluded from response - Integration: plugin returning empty body excluded from response * rename PluginMetricsCollection to AggregatePluginMetrics, default false --------- Co-authored-by: Jesse Hallam <jesse@mattermost.com>