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(); ?>
+
+
+
+
+
+
+
+
+
+
+