You've already forked wp-prometheus
Some checks failed
Create Release Package / build-release (push) Failing after 48s
- Create initial WordPress plugin structure - Add Prometheus metrics collector with default metrics - Implement authenticated /metrics endpoint with Bearer token - Add license management integration - Create admin settings page under Settings > Metrics - Set up Gitea CI/CD pipeline for automated releases - Add extensibility via wp_prometheus_collect_metrics hook Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
5.0 KiB
5.0 KiB
WP Prometheus Implementation Plan
Overview
This document outlines the implementation plan for the WP Prometheus plugin, providing a Prometheus-compatible /metrics endpoint for WordPress.
Architecture
Core Components
-
Plugin Bootstrap (
wp-prometheus.php)- WordPress plugin header
- Version constants
- PHP/WordPress version checks
- Autoloader initialization
- Activation/Deactivation hooks
-
Plugin Class (
src/Plugin.php)- Singleton pattern
- Component initialization
- Hook registration
- Text domain loading
-
Installer (
src/Installer.php)- Activation logic
- Default options setup
- Rewrite rules flushing
- Uninstallation cleanup
-
License Manager (
src/License/Manager.php)- Integration with wc-licensed-product-client
- License validation/activation
- Status caching (24-hour transient)
- AJAX handlers for admin actions
-
Metrics Collector (
src/Metrics/Collector.php)- Prometheus CollectorRegistry wrapper
- Default WordPress metrics
- Custom metric registration hooks
- Extensibility via
wp_prometheus_collect_metricsaction
-
Metrics Endpoint (
src/Endpoint/MetricsEndpoint.php)- Custom rewrite rule for
/metrics/ - Bearer token authentication
- Prometheus text format output
- Cache control headers
- Custom rewrite rule for
-
Admin Settings (
src/Admin/Settings.php)- Settings page under Settings > Metrics
- License configuration form
- Auth token management
- Metric toggle checkboxes
Directory Structure
wp-prometheus/
├── .gitea/workflows/
│ └── release.yml # CI/CD pipeline
├── assets/
│ ├── css/ # Admin/Frontend styles
│ └── js/
│ └── admin.js # Admin JavaScript
├── languages/ # Translation files
├── lib/
│ └── wc-licensed-product-client/ # Git submodule
├── releases/ # Release packages
├── src/
│ ├── Admin/
│ │ └── Settings.php
│ ├── Endpoint/
│ │ └── MetricsEndpoint.php
│ ├── License/
│ │ └── Manager.php
│ ├── Metrics/
│ │ └── Collector.php
│ ├── Installer.php
│ ├── Plugin.php
│ └── index.php
├── CHANGELOG.md
├── CLAUDE.md
├── composer.json
├── index.php
├── PLAN.md
├── README.md
├── uninstall.php
└── wp-prometheus.php
Default Metrics
The plugin provides the following default metrics (can be toggled in settings):
| Metric | Type | Labels | Description |
|---|---|---|---|
| wordpress_info | Gauge | version, php_version, multisite | WordPress installation info |
| wordpress_users_total | Gauge | role | Total users by role |
| wordpress_posts_total | Gauge | post_type, status | Total posts by type and status |
| wordpress_comments_total | Gauge | status | Total comments by status |
| wordpress_plugins_total | Gauge | status | Total plugins (active/inactive) |
Extensibility
Adding Custom Metrics
Third-party plugins can add custom metrics using the wp_prometheus_collect_metrics action:
add_action( 'wp_prometheus_collect_metrics', function( $collector ) {
// Register a custom gauge
$gauge = $collector->register_gauge(
'my_custom_metric',
'Description of my metric',
array( 'label1', 'label2' )
);
// Set the value
$gauge->set( 42, array( 'value1', 'value2' ) );
} );
Available Methods
$collector->register_gauge( $name, $help, $labels )$collector->register_counter( $name, $help, $labels )$collector->register_histogram( $name, $help, $labels, $buckets )
Authentication
The /metrics endpoint requires authentication using a Bearer token:
# Prometheus configuration
scrape_configs:
- job_name: 'wordpress'
static_configs:
- targets: ['example.com']
metrics_path: '/metrics/'
scheme: 'https'
authorization:
type: Bearer
credentials: 'your-auth-token'
Alternatively, the token can be passed as a query parameter (for testing):
https://example.com/metrics/?token=your-auth-token
Future Enhancements
Version 0.1.0
- Request/Response timing metrics
- HTTP status code counters
- Database query metrics
Version 0.2.0
- WooCommerce integration metrics
- Cron job metrics
- Transient cache metrics
Version 0.3.0
- Custom metric builder in admin
- Metric export/import
- Grafana dashboard templates
Dependencies
- PHP 8.3+
- WordPress 6.4+
- Composer packages:
promphp/prometheus_client_php- Prometheus client librarymagdev/wc-licensed-product-client- License validation
Security Considerations
- Auth token stored securely in WordPress options
- Bearer token authentication for metrics endpoint
- Admin capability check for settings
- Nonce verification for AJAX requests
- Input sanitization and output escaping
- Direct file access prevention
License
GPL v2 or later