=== DockRay ===
Contributors: jacycha
Tags: error tracking, monitoring, debugging, logging, performance
Requires at least: 6.0
Tested up to: 7.1
Requires PHP: 8.2
Stable tag: 1.0.0
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Reports PHP errors, uncaught exceptions and request timings from WordPress to the DockRay monitoring panel.

== Description ==

DockRay requires an account and a project at https://dockray.io (a free plan
and paid service plans are available). The plugin itself is free.

DockRay sends PHP errors and uncaught exceptions from your WordPress site to a
DockRay project, together with the stack trace, the environment and — when you
allow it — the logged-in user. It can also measure how long requests take.

Features:

* Automatic reporting of PHP errors and uncaught exceptions
* Optional request timing, including admin-ajax actions and WP-CLI commands
* Optional user context
* Error filtering by PHP error type
* A settings screen at **Settings → DockRay**, with a live connection
  status and a one-click test event — no wp-config.php editing required
* Configuration can also come from `wp-config.php` constants, per field or
  entirely, for teams that prefer to keep the private key out of the database
* Translation-ready through translate.wordpress.org

Fill in the token and the private key on **Settings → DockRay** and you are
done. If you would rather keep the private key out of the database — a
database dump travels between environments more often than a config file
does — define it as a `wp-config.php` constant instead; the settings screen
shows exactly which fields are currently coming from a constant, and a
**Configuration source** switch lets you pin the plugin to constants only,
to the database only, or let a defined constant win per field (the default,
and how the plugin behaved before this screen existed).

== Installation ==

Requires PHP 8.2 or newer with the mbstring extension enabled.

1. Upload the plugin to `/wp-content/plugins/dockray`, or install it from the
   plugins screen.
2. Activate it through the **Plugins** menu — its row gets a **Settings**
   link straight to the next step, so there is nothing to hunt for.
3. Open **Settings → DockRay**, paste in your project token and private key,
   and save.
4. Click **Send a test event** to confirm it reached the panel.

Both values come from the project screen in the DockRay panel. The project
token identifies the project, while the private key is a secret and should
never be exposed publicly.

Prefer `wp-config.php` instead? Add the constants below and the settings
screen will show the fields as coming from wp-config.php automatically —
nothing else to configure.

`define( 'DOCK_RAY_TOKEN', 'YOUR_PROJECT_TOKEN' );`
`define( 'DOCK_RAY_PRIVATE_KEY', 'YOUR_PRIVATE_KEY' );`

== Configuration ==

Every setting below has a field on **Settings → DockRay** unless stated
otherwise. Each one can also be set as a `wp-config.php` constant — add it
above the `/* That's all */` line — and the **Configuration source** switch
on the screen decides whether a constant is allowed to win, is required, or
is ignored in favour of the database.

**Error types** — which PHP errors become events. Defaults to everything except
deprecations and notices. This one is constant-only; there is no equivalent
field on the settings screen, since it is a bitmask rather than a value worth
typing into a text box.

`define( 'DOCK_RAY_ERROR_TYPES', E_ALL & ~E_DEPRECATED & ~E_NOTICE );`

**Personal data** — attaches the user id, e-mail, IP address and user agent.
Off by default.

`define( 'DOCK_RAY_SEND_DEFAULT_PII', true );`

**Release** — the version of the site. Without it the active theme version is
used.

`define( 'DOCK_RAY_VERSION', 'v1.4.0' );`

**Environment** — defaults to `WP_ENVIRONMENT_TYPE`.

`define( 'DOCK_RAY_ENV', 'production' );`

**Request timing** — the share of requests that are measured, from 0 to 1.
Zero, the default, disables it.

`define( 'DOCK_RAY_TRACES_SAMPLE_RATE', 0.2 );`

== Filters ==

`dock_ray_token`, `dock_ray_private_key` — override the
credentials, for instance to read them from a secrets manager.

`dock_ray_user_context` — change the user data attached to events.

`add_filter( 'dock_ray_user_context', fn( array $user ) => array_merge( $user, [ 'plan' => 'pro' ] ) );`

`dock_ray_scope` — set tags and extra context before events are sent.

`add_filter( 'dock_ray_scope', function ( $scope ) { $scope->setTag( 'tier', 'gold' ); return $scope; } );`

`dock_ray_options` — adjust SDK options after the client is built.

`dock_ray_client_builder` — an action that receives the client builder before
the client is created.

== Reporting your own exceptions ==

`if ( function_exists( 'dock_ray_safe' ) ) {`
`    dock_ray_safe( fn( $hub ) => $hub->captureException( $exception ) );`
`}`

The callback runs only when the plugin is configured, so the calling code does
not have to check.

== External services ==

This plugin sends data to DockRay (https://dockray.io), the monitoring service
it is a client for. Nothing is sent until you enter a project token and a
private key on **Settings → DockRay** or configure those credentials through
`wp-config.php` constants or plugin filters. Without credentials the plugin
loads and stays silent.

What is sent, and when:

* **PHP errors and uncaught exceptions**, as they happen — the message, the
  error type, the stack trace with the surrounding source lines, the file and
  line, the site URL, the environment and release, the WordPress version and
  the site language.
* **Request timings**, when the transaction sample rate is above zero — the
  request path, the HTTP method and the response status. Off by default.
* **JavaScript errors**, when that switch is on — the message, the script URL
  and the stack trace, forwarded by this site rather than sent from the
  browser. Off by default.
* **The logged-in user and the visitor IP address**, only when *Send user identity, IP
  address and user agent* is on. Off by default.
* **A test event**, when you click *Send a test event* on the settings screen.

Request bodies, cookies, request headers, URL query strings and fragments,
and stack frame argument values are removed before delivery. Error messages,
source code context, file paths and custom context may still contain personal
or sensitive information supplied by your application. Review what your
application logs and inform your visitors before enabling monitoring.

Browser reports also include the page and referrer URLs without query strings
or fragments. Normal reports are queued until shutdown; the manual test waits
for an acknowledgement. The service receives the IP of the sending server.

Service terms: https://dockray.io/pl/regulamin
Privacy policy: https://dockray.io/privacy-policy

== Frequently Asked Questions ==

= Does the plugin have a settings screen? =

Yes — **Settings → DockRay**. It shows a live configuration status, the
result of the last test event, and lets you edit the available settings without
touching `wp-config.php`. Anything already defined as a constant keeps
working; the screen shows exactly which fields that applies to.

= Will it slow down my site? =

Request timing is off by default. When it is on, the transaction is sent after
the response has been handed to the browser, so the visitor does not wait for
it.

= What happens if the site cannot reach DockRay? =

Nothing visible. The request continues; with `WP_DEBUG` on, a failure to start
is written to the PHP error log.

= Which languages does it speak? =

The interface is in English and ready for community translations through
https://translate.wordpress.org/projects/wp-plugins/dockray/.

== Changelog ==

= 1.0.0 =

* Initial release.