{"id":357435,"date":"2026-08-26T12:26:48","date_gmt":"2026-08-26T12:26:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/metrixwire-apm\/"},"modified":"2026-09-08T03:56:39","modified_gmt":"2026-09-08T03:56:39","slug":"metrixwire-apm","status":"publish","type":"plugin","link":"https:\/\/kab.wordpress.org\/plugins\/metrixwire-apm\/","author":23527322,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.2.1","stable_tag":"1.2.1","tested":"7.1","requires":"6.0","requires_php":"8.1","requires_plugins":null,"header_name":"MetrixWire APM","header_author":"PlatkaDigital","header_description":"Zero-config APM for WordPress \u2014 traces every request and its database queries, no code changes required.","assets_banners_color":"474197","last_updated":"2026-09-08 03:56:39","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/metrixwire.com","header_author_uri":"https:\/\/platkadigital.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":96,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.1.0":{"tag":"1.1.0","author":"platkadigital","date":"2026-08-26 12:26:18","revision":3666983},"1.2.1":{"tag":"1.2.1","author":"platkadigital","date":"2026-09-08 03:56:39","revision":3685852}},"upgrade_notice":{"1.2.0":"<p>Settings moved to a new top-level MetrixWire menu, which now shows your monitoring data directly in\nwp-admin. Existing API keys keep working; one click on MetrixWire \u2192 Connect unlocks the new screens.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3685847,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3685847,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3685847,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3685847,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3685847,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.1.0","1.2.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3685847,"resolution":"1","location":"assets","locale":"","width":1440,"height":900},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3685847,"resolution":"2","location":"assets","locale":"","width":1440,"height":1096},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3685847,"resolution":"3","location":"assets","locale":"","width":1440,"height":1533},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3685847,"resolution":"4","location":"assets","locale":"","width":1440,"height":1243},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3685847,"resolution":"5","location":"assets","locale":"","width":1440,"height":900},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3685847,"resolution":"6","location":"assets","locale":"","width":1440,"height":1090}},"screenshots":{"1":"Connect: one button creates the account, its project and its API key \u2014 no email, no password, no URL to enter.","2":"Dashboard: issue counts and their 7-day trend, a per-day chart, top issues, worst-affected routes and plan usage.","3":"Issues: every detection on this site, filterable by severity, time range and route.","4":"Issue detail: what was detected, a suggested fix, and the sample request with each database query as a waterfall.","5":"Alerts: email or webhook rules for this site, with a test send.","6":"Settings: project name, collection toggles, the endpoint in force, API key rotation and SAVEQUERIES status."}},"plugin_section":[],"plugin_tags":[51565,153,5603,248562,247],"plugin_category":[54,59],"plugin_contributors":[275779],"plugin_business_model":[],"class_list":["post-357435","plugin","type-plugin","status-publish","hentry","plugin_tags-apm","plugin_tags-database","plugin_tags-monitoring","plugin_tags-observability","plugin_tags-performance","plugin_category-security-and-spam-protection","plugin_category-utilities-and-tools","plugin_contributors-platkadigital","plugin_committers-platkadigital"],"banners":{"banner":"https:\/\/ps.w.org\/metrixwire-apm\/assets\/banner-772x250.png?rev=3685847","banner_2x":"https:\/\/ps.w.org\/metrixwire-apm\/assets\/banner-1544x500.png?rev=3685847","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/metrixwire-apm\/assets\/icon.svg?rev=3685847","icon":"https:\/\/ps.w.org\/metrixwire-apm\/assets\/icon.svg?rev=3685847","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/metrixwire-apm\/assets\/screenshot-1.png?rev=3685847","caption":"Connect: one button creates the account, its project and its API key \u2014 no email, no password, no URL to enter."},{"src":"https:\/\/ps.w.org\/metrixwire-apm\/assets\/screenshot-2.png?rev=3685847","caption":"Dashboard: issue counts and their 7-day trend, a per-day chart, top issues, worst-affected routes and plan usage."},{"src":"https:\/\/ps.w.org\/metrixwire-apm\/assets\/screenshot-3.png?rev=3685847","caption":"Issues: every detection on this site, filterable by severity, time range and route."},{"src":"https:\/\/ps.w.org\/metrixwire-apm\/assets\/screenshot-4.png?rev=3685847","caption":"Issue detail: what was detected, a suggested fix, and the sample request with each database query as a waterfall."},{"src":"https:\/\/ps.w.org\/metrixwire-apm\/assets\/screenshot-5.png?rev=3685847","caption":"Alerts: email or webhook rules for this site, with a test send."},{"src":"https:\/\/ps.w.org\/metrixwire-apm\/assets\/screenshot-6.png?rev=3685847","caption":"Settings: project name, collection toggles, the endpoint in force, API key rotation and SAVEQUERIES status."}],"raw_content":"<!--section=description-->\n<p>MetrixWire APM traces every WordPress request end-to-end: response time, status, and (when <code>SAVEQUERIES<\/code>\nis enabled) each <code>$wpdb<\/code> query as its own span. Detectors flag N+1 queries, slow endpoints, slow queries,\n    SELECT *, query floods and unhandled exceptions in the traces this plugin sends.<\/p>\n\n<p>Setup is one button. Open <strong>MetrixWire \u2192 Connect<\/strong> and click <strong>Start monitoring<\/strong>: the plugin creates your\nMetrixWire workspace, its project and its API key for you. No email address, no password, no URL to enter \u2014\nadd an email and password later, under <strong>Account<\/strong>, whenever you want to sign in on the web too.<\/p>\n\n<p>From then on everything lives in wp-admin:<\/p>\n\n<ul>\n<li><strong>Dashboard<\/strong> \u2014 issue counts and their 7-day trend, a per-day chart, top issues, worst-affected routes, plan usage.<\/li>\n<li><strong>Issues<\/strong> \u2014 every detection, filterable by severity, time range and route, with a detail view showing the sample request and each database query as a waterfall.<\/li>\n<li><strong>Alerts<\/strong> \u2014 email or webhook rules for this site, with a test send.<\/li>\n<li><strong>Settings<\/strong> \u2014 project name, collection toggles, API key rotation, <code>SAVEQUERIES<\/code> status.<\/li>\n<li><strong>Account<\/strong> \u2014 set the account's email and password, see its plan and this month's trace usage, sign the site out.<\/li>\n<\/ul>\n\n<p>A single <strong>Open MetrixWire<\/strong> button signs you into the full dashboard in a browser tab when you want it \u2014\nno password prompt, no second login.<\/p>\n\n<p>Already have a MetrixWire account? Choose <strong>Sign in instead<\/strong> on the connect screen \u2014 the site attaches to\nyour existing account, and reuses its project if that site was connected before.<\/p>\n\n<h4>External services<\/h4>\n\n<p>This plugin is a client for MetrixWire, a hosted application performance monitoring service at\nhttps:\/\/metrixwire.com (or your own instance, if you self-host it).<\/p>\n\n<p><strong>When you connect<\/strong>, the plugin sends this site's URL and title and its WordPress and plugin versions, so\nMetrixWire can create your workspace and its project. No personal data is sent at this point: the account\nstarts without an email address. If you later set one from the Account screen, or sign in to an account you\nalready have, that address and password are sent too \u2014 the password is verified remotely and is never\nstored on this site.<\/p>\n\n<p><strong>While connected<\/strong>, each request sends the HTTP method, path, response status and duration, and \u2014 when\n    SAVEQUERIES is enabled \u2014 the SQL text and duration of each database query. The admin screens read this\nsite's own monitoring data back from the same service. Nothing is sent before you connect, and nothing is\nsent while the \"Send traces from this site\" toggle is off. Traces leave the site on the <code>shutdown<\/code> hook,\nafter the response has already reached the visitor.<\/p>\n\n<p>Service terms: https:\/\/metrixwire.com\/terms \u2014 Privacy policy: https:\/\/metrixwire.com\/privacy<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install through <strong>Plugins \u2192 Add New<\/strong>, or upload the <code>metrixwire-apm<\/code> folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> menu.<\/li>\n<li>Go to <strong>MetrixWire \u2192 Connect<\/strong> and click <strong>Start monitoring<\/strong>. That's the whole setup.<\/li>\n<li>Optionally add <code>define( 'SAVEQUERIES', true );<\/code> to <code>wp-config.php<\/code> to capture per-query spans.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20a%20metrixwire%20account%20before%20installing%3F\"><h3>Do I need a MetrixWire account before installing?<\/h3><\/dt>\n<dd><p>No \u2014 and you don't need to create one by hand either. One click on the connect screen sets everything up.\nThe account has no email or password until you add them under <strong>Account<\/strong>, which you only need if you want\nto sign in on metrixwire.com directly or recover the account later. If you already have an account, use\n<strong>Sign in instead<\/strong> on the connect screen.<\/p><\/dd>\n<dt id=\"where%20do%20i%20enter%20my%20metrixwire%20url%3F\"><h3>Where do I enter my MetrixWire URL?<\/h3><\/dt>\n<dd><p>Nowhere. The plugin uses the hosted service at metrixwire.com. If you run MetrixWire yourself, point the\nplugin at it with <code>define( 'METRIXWIRE_ENDPOINT', 'https:\/\/your-instance.example.com' );<\/code> in\n    wp-config.php.<\/p><\/dd>\n<dt id=\"do%20i%20have%20to%20open%20the%20metrixwire%20website%20at%20all%3F\"><h3>Do I have to open the MetrixWire website at all?<\/h3><\/dt>\n<dd><p>No. Connecting, reading issues, changing settings, managing alert rules and checking plan usage all happen\nin wp-admin. The <strong>Open MetrixWire<\/strong> button is there when you want the full dashboard, and signs you in\nautomatically. Changing your paid plan is the one thing that leaves WordPress, because checkout is handled\nby the payment provider.<\/p><\/dd>\n<dt id=\"can%20i%20configure%20this%20via%20wp-config.php%20instead%3F\"><h3>Can I configure this via wp-config.php instead?<\/h3><\/dt>\n<dd><p>Yes. Define <code>METRIXWIRE_KEY<\/code>, <code>METRIXWIRE_ENDPOINT<\/code>, and optionally <code>METRIXWIRE_ENABLED<\/code> as constants in\n    wp-config.php \u2014 they take precedence over the saved settings, and the fields they cover are shown\nread-only. A site configured this way traces without connecting, though the in-dashboard screens still\nneed a connection, since reading data back takes its own credential.<\/p><\/dd>\n<dt id=\"why%20aren%27t%20database%20query%20spans%20showing%20up%3F\"><h3>Why aren't database query spans showing up?<\/h3><\/dt>\n<dd><p>SAVEQUERIES must be defined as a constant in <code>wp-config.php<\/code>; WordPress reads it before any plugin loads,\nso it can't be turned on from a settings screen at runtime.<\/p><\/dd>\n<dt id=\"does%20this%20slow%20down%20my%20site%3F\"><h3>Does this slow down my site?<\/h3><\/dt>\n<dd><p>Traces are sent on the <code>shutdown<\/code> hook, after the response has already been sent to the visitor, over a\nshort-timeout non-blocking request. Failures to reach MetrixWire are swallowed silently. The admin screens\ncache what they read for a minute, so browsing them doesn't hammer the service either.<\/p><\/dd>\n<dt id=\"who%20can%20see%20the%20data%3F\"><h3>Who can see the data?<\/h3><\/dt>\n<dd><p>Anyone who can administer this WordPress site \u2014 the screens require the <code>manage_options<\/code> capability, and\nthe <strong>Open MetrixWire<\/strong> button signs that administrator into the connected account.<\/p><\/dd>\n<dt id=\"does%20it%20work%20on%20multisite%3F\"><h3>Does it work on multisite?<\/h3><\/dt>\n<dd><p>Yes. Each site connects separately, keeping its own project and credentials, and uninstalling removes\nthose from every site in the network.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20i%20sign%20the%20site%20out%3F\"><h3>What happens if I sign the site out?<\/h3><\/dt>\n<dd><p>The site stops tracing and its credentials are removed. Your MetrixWire project and its history are kept,\nso signing back in later picks that project up instead of starting a new one.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>The bundled SDK now defaults to https:\/\/metrixwire.com instead of a local address, so a site\nconfigured through <code>wp-config.php<\/code> constants alone no longer posts its traces where nothing is\nlistening. Sites that set <code>METRIXWIRE_ENDPOINT<\/code> themselves are unaffected.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Setup is now a single button: the account, project and API key are created with nothing to type \u2014 no\nemail, no password, no URL \u2014 and no visit to metrixwire.com.<\/li>\n<li>Added an Account screen for setting the account's email and password afterwards, and for signing the\nsite out.<\/li>\n<li>New top-level MetrixWire menu with Dashboard, Issues, Alerts, Settings and Account screens \u2014 issue\nlists, detail views with a query waterfall, alert rules and plan usage, all inside WordPress.<\/li>\n<li>Added an \"Open MetrixWire\" button that signs the administrator into the dashboard with a one-time,\n60-second ticket.<\/li>\n<li>The service URL field is gone; the hosted service is assumed, and self-hosted installs set\n  METRIXWIRE_ENDPOINT in <code>wp-config.php<\/code>.<\/li>\n<li>The API key is issued automatically, shown masked, and can be rotated from Settings.<\/li>\n<li>Added Sign out, which revokes this site's credentials while keeping the project and its history.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Renamed the plugin slug and text domain to <code>metrixwire-apm<\/code>, with translation-ready strings and a\nbundled <code>.pot<\/code> template.<\/li>\n<li>Settings screen rebuilt on the WordPress Settings API, with a \"Settings\" shortcut on the Plugins row.<\/li>\n<li>wp-config.php constants now render as read-only values per field instead of disabling the form, so\nsaving no longer clears the options they cover.<\/li>\n<li>Options are prefixed <code>metrixwire_apm_*<\/code>; activation migrates values saved by the 1.0 plugin.<\/li>\n<li>Uninstall now clears options on every site of a multisite network.<\/li>\n<li>Traces are posted with <code>wp_remote_post()<\/code> instead of cURL, so the site's HTTP transport, proxy\nsettings and filters apply.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release: settings screen, wp-config.php constant override, test-connection check, automatic\nrequest + database query tracing. 1.2.0 =<\/li>\n<li>Setup is now a single button: the account, project and API key are created with nothing to type \u2014 no\nemail, no password, no URL \u2014 and no visit to metrixwire.com.<\/li>\n<li>Added an Account screen for setting the account's email and password afterwards, and for signing the\nsite out.<\/li>\n<li>New top-level MetrixWire menu with Dashboard, Issues, Alerts, Settings and Account screens \u2014 issue\nlists, detail views with a query waterfall, alert rules and plan usage, all inside WordPress.<\/li>\n<li>Added an \"Open MetrixWire\" button that signs the administrator into the dashboard with a one-time,\n60-second ticket.<\/li>\n<li>The service URL field is gone; the hosted service is assumed, and self-hosted installs set\n  METRIXWIRE_ENDPOINT in <code>wp-config.php<\/code>.<\/li>\n<li>The API key is issued automatically, shown masked, and can be rotated from Settings.<\/li>\n<li>Added Sign out, which revokes this site's credentials while keeping the project and its history.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Renamed the plugin slug and text domain to <code>metrixwire-apm<\/code>, with translation-ready strings and a\nbundled <code>.pot<\/code> template.<\/li>\n<li>Settings screen rebuilt on the WordPress Settings API, with a \"Settings\" shortcut on the Plugins row.<\/li>\n<li>wp-config.php constants now render as read-only values per field instead of disabling the form, so\nsaving no longer clears the options they cover.<\/li>\n<li>Options are prefixed <code>metrixwire_apm_*<\/code>; activation migrates values saved by the 1.0 plugin.<\/li>\n<li>Uninstall now clears options on every site of a multisite network.<\/li>\n<li>Traces are posted with <code>wp_remote_post()<\/code> instead of cURL, so the site's HTTP transport, proxy\nsettings and filters apply.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release: settings screen, wp-config.php constant override, test-connection check, automatic\nrequest + database query tracing.<\/li>\n<\/ul>","raw_excerpt":"Zero-config APM for WordPress \u2014 one click to start, then trace every request and read the results without leaving wp-admin.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/kab.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/357435","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kab.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/kab.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/kab.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=357435"}],"author":[{"embeddable":true,"href":"https:\/\/kab.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/platkadigital"}],"wp:attachment":[{"href":"https:\/\/kab.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=357435"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/kab.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=357435"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/kab.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=357435"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/kab.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=357435"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/kab.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=357435"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/kab.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=357435"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}