Joomla integration for Perfbase.
This package is a thin adapter over perfbase/php-sdk. It connects Joomla request and console lifecycle events to the Perfbase SDK while leaving extension interaction, payload construction, and submission to the shared SDK.
| Component | Supported |
|---|---|
| PHP | >=8.1 <9.0 |
| Joomla | 4.4 and 5.x |
| Package type | Joomla system plugin |
| Runtime contexts | HTTP and CLI |
| Perfbase SDK | ^1.0.0 |
| Perfbase PHP extension | Required at runtime |
This package supports:
- Site requests
- Administrator requests when
profile_adminis enabled - Joomla API requests as standard HTTP contexts
- Joomla console commands
This package does not currently provide:
- Dedicated Joomla scheduler or task lifecycles
- Deep component or template execution timelines beyond the main trace span
- Browser-level end-to-end instrumentation tests inside full Joomla applications
- HTTP profiling via Joomla lifecycle hooks
- CLI profiling for Joomla console commands
- Low-cardinality action and span naming
- Sanitized HTTP URLs without query strings
- Include and exclude filters for HTTP and CLI
- Production-safe failure handling
- Shutdown fallback cleanup for interrupted execution paths
- Runtime config validation for malformed adapter settings
Place the package under:
plugins/system/perfbase
From the plugin directory:
composer install --no-dev --prefer-distIn Joomla administrator, enable:
System - Perfbase
The plugin depends on the Perfbase PHP extension at runtime. Without the extension, the plugin degrades safely but no traces will be captured.
- Install and enable the Perfbase PHP extension.
- Install this package under
plugins/system/perfbase. - Run
composer install --no-dev --prefer-dist. - Enable
System - Perfbasein Joomla administrator. - Configure
api_key. - Set
enabled = yes. - Start with
sample_rate = 0.1. - Leave
profile_admin = nountil you want administrator coverage explicitly.
The plugin configuration UI is defined in perfbase.xml. Runtime normalization and validation live in ConfigResolver.php.
| Setting | Default | Description |
|---|---|---|
enabled |
false |
Master switch for profiling |
api_key |
empty | Required Perfbase project API key |
api_url |
https://ingress.perfbase.cloud |
Perfbase receiver URL |
sample_rate |
0.1 |
Fraction of requests and commands to profile |
timeout |
5 |
SDK request timeout in seconds |
proxy |
empty | Optional proxy URL |
flags |
FeatureFlags::DefaultFlags |
Perfbase feature-flag bitmask |
| Setting | Default | Description |
|---|---|---|
profile_admin |
false |
Include administrator requests |
environment |
empty | Optional environment override |
app_version |
empty | Optional application-version override |
include_http |
* |
Newline-separated HTTP include filters |
exclude_http |
empty | Newline-separated HTTP exclude filters |
include_console |
* |
Newline-separated CLI include filters |
exclude_console |
empty | Newline-separated CLI exclude filters |
| Setting | Default | Description |
|---|---|---|
debug |
false |
Re-throw profiling errors during development |
log_errors |
true |
Log profiling errors when debug mode is off |
HTTP and CLI filters support:
*or.*to match everything- glob patterns like
cache:*orapi/* - regex patterns like
/^GET /
Examples:
include_http
*
GET com_content:article:display
api
exclude_http
/administrator/cache/*
/health
include_console
cache:*
database:*
Filters are matched against normalized identifiers rather than raw query-heavy URLs.
The plugin uses:
onAfterInitialiseonAfterRouteonAfterDispatchonAfterRespondregister_shutdown_function
HTTP actions are normalized to:
METHOD option:view:taskwhen Joomla route metadata existsMETHOD /sanitized/pathwhen it does not
Examples:
GET com_content:article:displayPOST /users/{id}
CLI spans are derived from the first non-option command token in $_SERVER['argv'].
Example:
cache:clean->console.cache.clean
source=httpactionhttp_methodhttp_urlhttp_status_codeuser_ipuser_agentuser_idhostnamephp_versionenvironmentapp_versionjoomla.clientjoomla.optionjoomla.viewjoomla.taskjoomla.format
Notes:
http_urlexcludes the query stringactionis low-cardinality by design- administrator requests are excluded unless
profile_adminis enabled
source=consoleactioncli.commandhostnamephp_versionenvironmentapp_version
- If the SDK cannot be initialized, the plugin fails open and does not break the host application.
- If the Perfbase extension is unavailable, the plugin no-ops safely.
- Invalid adapter config is validated at boot and logged in production mode.
- In production, profiling errors are logged only when
log_errorsis enabled. - In development, set
debug = yesif you want profiling errors to surface immediately.
Current package verification:
- PHPUnit: passing
- PHPStan: passing on
src/ - Overall line coverage:
99.52% - Overall method coverage:
98.55%
Key class coverage:
PerfbasePlugin.php:100%methods,100%linesHttpRequestLifecycle.php:100%methods,100%linesSpanNaming.php:100%methods,100%lines
CI coverage includes:
- supported PHP versions
- PHPUnit
- PHPStan
- Joomla host smoke tests for Joomla
4.4and5.x - both HTTP and CLI host smoke paths via
tests/Host/joomla-smoke.php
Commands used during development:
composer run test
./vendor/bin/phpstan analyse --memory-limit=2G --debug srcIn this sandbox, composer run phpstan may fail because PHPStan tries to open a local TCP worker socket. The direct command above was used for the clean static-analysis run.
composer install
composer run test
./vendor/bin/phpstan analyse --memory-limit=2G --debug srcImportant files:
Full documentation is available at perfbase.com/docs.
- Docs: perfbase.com/docs
- Issues: github.com/perfbaseorg/joomla/issues
- Support: support@perfbase.com
Apache-2.0. See LICENSE.txt.