=== MetrixWire APM ===
Contributors: platkadigital
Tags: apm, performance, monitoring, observability, database
Requires at least: 6.0
Tested up to: 7.1
Requires PHP: 8.1
Stable tag: 1.1.0
License: MIT
License URI: https://opensource.org/licenses/MIT

Zero-config APM for WordPress — traces every request and its database queries, no code changes required.

== Description ==

MetrixWire APM traces every WordPress request end-to-end: response time, status, and (when `SAVEQUERIES`
is enabled) each `$wpdb` query as its own span. Detectors on the MetrixWire dashboard flag N+1 queries,
slow endpoints, slow queries, and unhandled exceptions from the traces this plugin sends.

No code changes are required — activate the plugin, paste your API key and endpoint under
**Settings → MetrixWire**, and traces start flowing.

For the absolute earliest possible trace start (before regular plugins load), see the must-use plugin
variant bundled with the `metrixwire/php` Composer package instead.

= External services =

This plugin sends trace data to the MetrixWire endpoint you configure — your own instance, or
metrixwire.com if you use the hosted service. Each request contains the HTTP method, path, response
status, duration, and (when `SAVEQUERIES` is enabled) the SQL text and duration of each database query.
Nothing is sent until you enter an API key and endpoint, and nothing is sent while the Enabled toggle is
off. Traces leave the site on the `shutdown` hook, after the response has already reached the visitor.

== Installation ==

1. Upload the `metrixwire-apm` folder to `/wp-content/plugins/`, or install the zip via **Plugins → Add New → Upload Plugin**.
2. Activate the plugin through the **Plugins** menu.
3. Go to **Settings → MetrixWire** and enter your project's API key and endpoint URL (find both in your
   MetrixWire dashboard's install guide).
4. Optionally add `define( 'SAVEQUERIES', true );` to `wp-config.php` to capture per-query spans.
5. Click **Test Connection** to confirm the key and endpoint are valid before saving.

== Frequently Asked Questions ==

= Can I configure this via wp-config.php instead of the settings screen? =

Yes. Define `METRIXWIRE_KEY`, `METRIXWIRE_ENDPOINT`, and optionally `METRIXWIRE_ENABLED` as constants in
`wp-config.php` — they take precedence over the saved settings, and the settings screen shows the covered
fields as read-only.

= Why aren't database query spans showing up? =

`SAVEQUERIES` must be defined as a constant in `wp-config.php`; WordPress reads it before any plugin loads,
so it can't be turned on from the settings screen at runtime.

= Does this slow down my site? =

Traces are sent on the `shutdown` hook, after the response has already been sent to the visitor, over a
short-timeout non-blocking request. Failures to reach MetrixWire are swallowed silently.

= Does it work on multisite? =

Yes. Each site keeps its own API key, endpoint, and toggle, and uninstalling removes those options from
every site in the network.

== Changelog ==

= 1.1.0 =
* Renamed the plugin slug and text domain to `metrixwire-apm`, with translation-ready strings and a
  bundled `.pot` template.
* Settings screen rebuilt on the WordPress Settings API, with a "Settings" shortcut on the Plugins row.
* wp-config.php constants now render as read-only values per field instead of disabling the form, so
  saving no longer clears the options they cover.
* Options are prefixed `metrixwire_apm_*`; activation migrates values saved by the 1.0 plugin.
* Uninstall now clears options on every site of a multisite network.
* Traces are posted with `wp_remote_post()` instead of cURL, so the site's HTTP transport, proxy
  settings and filters apply.

= 1.0.0 =
* Initial release: settings screen, wp-config.php constant override, test-connection check, automatic
  request + database query tracing.

== Upgrade Notice ==

= 1.1.0 =
The plugin folder is now `metrixwire-apm`. Activating it adopts the settings from the old `metrixwire`
plugin, which is then safe to delete.
