From 19d75ab7b21389b0393649edce34f6a777926377 Mon Sep 17 00:00:00 2001 From: magdev Date: Mon, 2 Feb 2026 21:09:14 +0100 Subject: [PATCH] feat: Add option to disable early mode (v0.4.2) - Add wp_prometheus_disable_early_mode option in admin settings - Support WP_PROMETHEUS_DISABLE_EARLY_MODE environment variable - Add Early Mode section in Metrics tab with status indicator - Allow users to enable wp_prometheus_collect_metrics hook Co-Authored-By: Claude Opus 4.5 --- CHANGELOG.md | 13 ++++++ CLAUDE.md | 18 +++++++++ languages/wp-prometheus-de_CH.mo | Bin 18211 -> 20435 bytes languages/wp-prometheus-de_CH.po | 42 +++++++++++++++++++- languages/wp-prometheus.pot | 42 +++++++++++++++++++- src/Admin/Settings.php | 66 +++++++++++++++++++++++++++++++ wp-prometheus.php | 16 +++++++- 7 files changed, 193 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 29220c3..adc7bd9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,19 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.4.2] - 2026-02-02 + +### Added + +- Option to disable early mode in admin settings (Metrics tab) +- Support for `WP_PROMETHEUS_DISABLE_EARLY_MODE` environment variable +- Early mode status display in settings + +### Changed + +- Early mode can now be disabled for users who need the `wp_prometheus_collect_metrics` hook for custom metrics +- Updated translations with new early mode strings (English and German) + ## [0.4.1] - 2026-02-02 ### Fixed diff --git a/CLAUDE.md b/CLAUDE.md index f6c518f..8fadf55 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -291,6 +291,24 @@ add_action( 'wp_prometheus_collect_metrics', function( $collector ) { ## Session History +### 2026-02-02 - Early Mode Toggle (v0.4.2) + +- Added option to disable early mode for users who need extensibility +- Implementation: + - Added `wp_prometheus_disable_early_mode` WordPress option + - Added `WP_PROMETHEUS_DISABLE_EARLY_MODE` environment variable support + - Option check in `wp_prometheus_early_metrics_check()` before early interception + - Environment variable accepts `1`, `true`, `yes`, `on` (case-insensitive) +- Admin UI in Metrics tab: + - "Early Mode" section with description of functionality + - Checkbox to disable early metrics interception + - Environment override notice when env var is set + - Current status indicator showing early mode state +- **Key Learning**: Balancing compatibility vs extensibility + - Early mode fixes memory issues but disables `wp_prometheus_collect_metrics` hook + - Users with custom metrics need the hook, so early mode must be optional + - Default remains enabled (safe) with explicit opt-out for advanced users + ### 2026-02-02 - Plugin Compatibility Fix (v0.4.1) - Fixed memory exhaustion (1GB limit) when wp-fedistream (Twig-based) plugin is active diff --git a/languages/wp-prometheus-de_CH.mo b/languages/wp-prometheus-de_CH.mo index 94f2636acd300111c1b56c1eedef8c4ec5706627..0ec05dd725ad892890268fba3a35f9cf469e1577 100644 GIT binary patch delta 6589 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 array( $this, 'sanitize_metrics' ), ) ); + register_setting( 'wp_prometheus_metrics_settings', 'wp_prometheus_disable_early_mode', array( + 'type' => 'boolean', + 'sanitize_callback' => 'rest_sanitize_boolean', + 'default' => false, + ) ); + // Auth token section. add_settings_section( 'wp_prometheus_auth_section', @@ -420,6 +426,66 @@ class Settings {

+ +
+ + render_early_mode_section(); ?> + +

+

+ +

+ + +
+ +

+
+ + + + + + + + + + + +