Files
wp-prometheus/wp-prometheus.php
magdev da6d5081f7
All checks were successful
Create Release Package / build-release (push) Successful in 56s
fix: Localhost license bypass, rewrite rules flush, WooCommerce orders (v0.2.2)
- Add localhost license bypass for development environments
- Flush rewrite rules when license status changes to fix 404 on /metrics
- Fix wc_orders_count() missing required status parameter

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 14:57:43 +01:00

201 lines
5.1 KiB
PHP

<?php
/**
* Plugin Name: WP Prometheus
* Plugin URI: https://src.bundespruefstelle.ch/magdev/wp-prometheus
* Description: Prometheus metrics endpoint for WordPress with extensible hooks for custom metrics.
* Version: 0.2.2
* Requires at least: 6.4
* Requires PHP: 8.3
* Author: Marco Graetsch
* Author URI: https://src.bundespruefstelle.ch/magdev
* License: GPL v2 or later
* License URI: https://www.gnu.org/licenses/gpl-2.0.html
* Text Domain: wp-prometheus
* Domain Path: /languages
*
* @package WP_Prometheus
*/
// Prevent direct file access.
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
/**
* Plugin version.
*
* @var string
*/
define( 'WP_PROMETHEUS_VERSION', '0.2.2' );
/**
* Plugin file path.
*
* @var string
*/
define( 'WP_PROMETHEUS_FILE', __FILE__ );
/**
* Plugin directory path.
*
* @var string
*/
define( 'WP_PROMETHEUS_PATH', plugin_dir_path( __FILE__ ) );
/**
* Plugin directory URL.
*
* @var string
*/
define( 'WP_PROMETHEUS_URL', plugin_dir_url( __FILE__ ) );
/**
* Plugin basename.
*
* @var string
*/
define( 'WP_PROMETHEUS_BASENAME', plugin_basename( __FILE__ ) );
/**
* Minimum WordPress version required.
*
* @var string
*/
define( 'WP_PROMETHEUS_MIN_WP_VERSION', '6.4' );
/**
* Minimum PHP version required.
*
* @var string
*/
define( 'WP_PROMETHEUS_MIN_PHP_VERSION', '8.3' );
/**
* Check requirements and bootstrap the plugin.
*
* @return void
*/
function wp_prometheus_init(): void {
// Check PHP version.
if ( version_compare( PHP_VERSION, WP_PROMETHEUS_MIN_PHP_VERSION, '<' ) ) {
add_action( 'admin_notices', 'wp_prometheus_php_version_notice' );
return;
}
// Check WordPress version.
if ( version_compare( get_bloginfo( 'version' ), WP_PROMETHEUS_MIN_WP_VERSION, '<' ) ) {
add_action( 'admin_notices', 'wp_prometheus_wp_version_notice' );
return;
}
// Check if Composer autoloader exists.
$autoloader = WP_PROMETHEUS_PATH . 'vendor/autoload.php';
if ( ! file_exists( $autoloader ) ) {
add_action( 'admin_notices', 'wp_prometheus_autoloader_notice' );
return;
}
require_once $autoloader;
// Initialize the plugin.
\Magdev\WpPrometheus\Plugin::get_instance();
}
/**
* Display PHP version notice.
*
* @return void
*/
function wp_prometheus_php_version_notice(): void {
$message = sprintf(
/* translators: 1: Required PHP version, 2: Current PHP version */
__( 'WP Prometheus requires PHP version %1$s or higher. You are running PHP %2$s.', 'wp-prometheus' ),
WP_PROMETHEUS_MIN_PHP_VERSION,
PHP_VERSION
);
printf( '<div class="notice notice-error"><p>%s</p></div>', esc_html( $message ) );
}
/**
* Display WordPress version notice.
*
* @return void
*/
function wp_prometheus_wp_version_notice(): void {
$message = sprintf(
/* translators: 1: Required WordPress version, 2: Current WordPress version */
__( 'WP Prometheus requires WordPress version %1$s or higher. You are running WordPress %2$s.', 'wp-prometheus' ),
WP_PROMETHEUS_MIN_WP_VERSION,
get_bloginfo( 'version' )
);
printf( '<div class="notice notice-error"><p>%s</p></div>', esc_html( $message ) );
}
/**
* Display autoloader notice.
*
* @return void
*/
function wp_prometheus_autoloader_notice(): void {
$message = __( 'WP Prometheus requires Composer dependencies to be installed. Please run "composer install" in the plugin directory.', 'wp-prometheus' );
printf( '<div class="notice notice-error"><p>%s</p></div>', esc_html( $message ) );
}
/**
* Plugin activation hook.
*
* @return void
*/
function wp_prometheus_activate(): void {
// Check requirements before activation.
if ( version_compare( PHP_VERSION, WP_PROMETHEUS_MIN_PHP_VERSION, '<' ) ) {
deactivate_plugins( WP_PROMETHEUS_BASENAME );
wp_die(
sprintf(
/* translators: %s: Required PHP version */
esc_html__( 'WP Prometheus requires PHP version %s or higher.', 'wp-prometheus' ),
WP_PROMETHEUS_MIN_PHP_VERSION
)
);
}
$autoloader = WP_PROMETHEUS_PATH . 'vendor/autoload.php';
if ( file_exists( $autoloader ) ) {
require_once $autoloader;
\Magdev\WpPrometheus\Installer::activate();
}
}
/**
* Plugin deactivation hook.
*
* @return void
*/
function wp_prometheus_deactivate(): void {
$autoloader = WP_PROMETHEUS_PATH . 'vendor/autoload.php';
if ( file_exists( $autoloader ) ) {
require_once $autoloader;
\Magdev\WpPrometheus\Installer::deactivate();
}
}
/**
* Plugin uninstall hook.
*
* @return void
*/
function wp_prometheus_uninstall(): void {
$autoloader = WP_PROMETHEUS_PATH . 'vendor/autoload.php';
if ( file_exists( $autoloader ) ) {
require_once $autoloader;
\Magdev\WpPrometheus\Installer::uninstall();
}
}
// Register activation/deactivation hooks.
register_activation_hook( __FILE__, 'wp_prometheus_activate' );
register_deactivation_hook( __FILE__, 'wp_prometheus_deactivate' );
// Initialize plugin after all plugins are loaded.
add_action( 'plugins_loaded', 'wp_prometheus_init' );