Title: TillFoundry Scheduler Watchdog
Author: Till Foundry
Published: <strong>September 27, 2026</strong>
Last modified: September 27, 2026

---

Search plugins

![](https://ps.w.org/tillfoundry-scheduler-watchdog/assets/banner-772x250.png?rev
=3716117)

![](https://ps.w.org/tillfoundry-scheduler-watchdog/assets/icon.svg?rev=3716117)

# TillFoundry Scheduler Watchdog

 By [Till Foundry](https://profiles.wordpress.org/lijnam/)

[Download](https://downloads.wordpress.org/plugin/tillfoundry-scheduler-watchdog.0.1.7.zip)

 * [Details](https://wordpress.org/plugins/tillfoundry-scheduler-watchdog/#description)
 * [Reviews](https://wordpress.org/plugins/tillfoundry-scheduler-watchdog/#reviews)
 *  [Installation](https://wordpress.org/plugins/tillfoundry-scheduler-watchdog/#installation)
 * [Development](https://wordpress.org/plugins/tillfoundry-scheduler-watchdog/#developers)

 [Support](https://wordpress.org/support/plugin/tillfoundry-scheduler-watchdog/)

## Description

Every WooCommerce background job runs through Action Scheduler: marketing and CRM
sync, ERP and 3PL pushes, subscription renewals, review requests, email follow-ups,
importers. When one integration misbehaves it can enqueue hundreds of thousands 
of actions or fire them in an ever-tightening loop. PHP workers are consumed, the
database is hammered, and the storefront starts returning errors.

Scheduler Watchdog sits beside Action Scheduler and watches it continuously.

 * It samples queue depth and per-hook backlog.
 * It times every action and records failures through Action Scheduler’s own execution
   hooks.
 * It shows one screen: total pending and past-due counts, the hooks with the highest
   failure rate, the slowest hooks, the biggest backlogs and the active alerts.
 * It emails you the moment a hook breaks, stalls, or the queue runner stops firing.
 * It cleans up old completed, failed and canceled actions under your retention 
   rules, using Action Scheduler’s own cleaner so nothing is deleted behind its 
   back.

**Built for real stores**

 * Zero configuration to get started — activate it and the defaults are sensible.
 * Every feature in this plugin is free, with no licence key and no locked capability.
 * No tracking. The plugin makes no outbound request unless you enter a licence 
   key.
 * WooCommerce High-Performance Order Storage (HPOS) compatible.
 * Works with Action Scheduler 3.9.x and 4.x, whether it is bundled inside WooCommerce
   or installed standalone.

**What you get**

 * A dashboard of queue depth, pending, past-due, in-progress and failed-in-window
   counts.
 * Top failing hooks, slowest hooks and largest backlogs.
 * A WordPress dashboard widget.
 * Email alerts for failed actions, stalled/past-due hooks, a missing or overdue
   queue runner, and stale in-progress claims.
 * A per-alert cooldown so you are not flooded.
 * Safe, retention-based cleanup of old complete, failed and canceled actions — 
   one click or on a daily schedule.
 * Stale-claim recovery.
 * Full control of alert recipients, thresholds and retention.

Scheduler Watchdog never reads or writes orders, order items, refunds or customer
records. It operates only on Action Scheduler’s own queue. It stores no order, customer,
refund or order-item data. The personal data it does store is limited to the alert-
recipient email addresses you configure in its settings, and a small per-user notice
flag that remembers which of the plugin’s admin notices you have dismissed or still
need to see.

### External Services

This free plugin contacts no external service on its own: it declares only free 
capabilities, every one of them works with no licence key, and a site that never
enters a key makes no outbound request. The optional licence client is retained 
as a dormant key-validation endpoint only; no paid plan is on sale, no capability
is gated behind it, and it stays dormant until you choose to enter a key. If you
do enter a key, it is sent to the TillFoundry licence server at `https://tillfoundry.
com` **only after you save it**.

The licence endpoints are:

 * `https://tillfoundry.com/api/v1/activate` — called when you save a licence key,
   to register this installation against the key.
 * `https://tillfoundry.com/api/v1/validate` — called when you press **Verify licence
   now**, and automatically in the background at most every twelve hours while a
   key is stored, to confirm the key is still valid.
 * `https://tillfoundry.com/api/v1/deactivate` — called when you press **Deactivate
   this site**, to release the activation slot.

Each request sends the same installation record plus the licence key:

 * the licence key;
 * the site URL and home URL;
 * the plugin slug and plugin version;
 * the WordPress version and PHP version;
 * whether the site is multisite;
 * the site locale.

The request also carries the site URL in an `X-Site-URL` header and in the user-
agent string. The service records the request IP address. See the provider’s [privacy policy](https://tillfoundry.com/privacy-policy/)
and [terms of service](https://tillfoundry.com/terms/).

If the licence server is unreachable, the plugin keeps working: monitoring, alerting
and cleanup never depend on it, and a previously validated licence stays valid until
the server can be reached again. No error from the licence service blocks a page
or an admin action.

## Screenshots

[⌊The queue health dashboard: 12,480 pending actions, the failures in the last fifteen
minutes, and the hooks behind both.⌉⌊The queue health dashboard: 12,480 pending 
actions, the failures in the last fifteen minutes, and the hooks behind both.⌉[

The queue health dashboard: 12,480 pending actions, the failures in the last fifteen
minutes, and the hooks behind both.

[⌊The event log, filtered by severity, hook and date — each alert with the message
that explains it.⌉⌊The event log, filtered by severity, hook and date — each alert
with the message that explains it.⌉[

The event log, filtered by severity, hook and date — each alert with the message
that explains it.

[⌊Thresholds: what counts as a runaway job, how long a hook may take, and what happens
when one appears.⌉⌊Thresholds: what counts as a runaway job, how long a hook may
take, and what happens when one appears.⌉[

Thresholds: what counts as a runaway job, how long a hook may take, and what happens
when one appears.

[⌊Cleanup: the dry-run preview of what a cleanup would remove before anything is
deleted.⌉⌊Cleanup: the dry-run preview of what a cleanup would remove before anything
is deleted.⌉[

Cleanup: the dry-run preview of what a cleanup would remove before anything is deleted.

## Installation

 1. Install the ZIP through **Plugins  Add New  Upload Plugin**, or upload the plugin
    folder to `/wp-content/plugins/`.
 2. Activate the plugin through the **Plugins** screen in WordPress.
 3. Open **WooCommerce  Scheduler Watchdog** (or **Tools  Scheduler Watchdog** when
    WooCommerce is not active).
 4. Review the settings. No licence key is needed.

Action Scheduler must be present for the plugin to do anything. It ships inside 
WooCommerce, or can be installed as a standalone plugin. The plugin declares no 
hard plugin dependency, so WordPress never blocks its activation over a missing 
plugin: it activates on any WordPress site that meets the version requirements, 
and when Action Scheduler is absent it shows a dismissible admin notice naming Action
Scheduler as required and otherwise stays inert.

## FAQ

### Does this plugin require WooCommerce?

No. WooCommerce is not required, and the plugin declares no hard plugin dependency,
so WordPress will not refuse to activate it when WooCommerce is absent. Action Scheduler
is the real dependency. WooCommerce bundles Action Scheduler, so on a normal store
it is already there. If you run Action Scheduler standalone, monitoring, alerting
and cleanup all work too; only the WooCommerce-specific HPOS declaration and the
built-in WooCommerce critical-hook presets are skipped. When Action Scheduler itself
is missing, the plugin still activates but stays inert and tells you what is missing.

### What is Action Scheduler?

Action Scheduler is the background job queue used by WooCommerce and many extensions.
Every scheduled task is stored as an “action” with a hook name, a due date and a
status. Scheduler Watchdog reads that queue to measure it.

### Is there a paid plan?

No paid plan is on sale. The complete plugin is free to download and use, with no
licence key, no trial, no time limit and no capability that switches off. Monitoring,
email alerting and safe cleanup are all included. Updates are manual downloads from
this store: the plugin registers no WordPress update channel and checks for no update
of its own.

### Does the plugin delete my jobs?

Never pending or in-progress work. Cleanup only ever removes old **complete**, **
failed** and **canceled** actions, through Action Scheduler’s own cleaner. There
are hard minimum ages of 7 days for complete/canceled actions and 30 days for failed
actions, regardless of what the settings say. A longer “keep” value is also applied
to Action Scheduler’s own cleaner — which otherwise removes complete/canceled actions
after 31 days and failed actions after about 90 days on its own schedule — so raising
the setting to keep a year of history is actually honoured. Cleanup is off until
you enable it, and a preview button shows exactly what would be removed first.

### Where are the debug logs?

Enable **Debug logging** on the **Advanced** tab, then open **WooCommerce  Status
Logs** and select the `scheduler-watchdog` source. Without WooCommerce, entries 
go to the PHP error log instead.

### Does it work on a high-volume store?

Yes. The metrics table is time-bucketed and pruned on a daily retention run (14 
days by default), the dashboard caps the number of hooks it reads, and the shutdown
fallback sampler is throttled to once a minute. On stores processing 500+ orders
a day, sampling remains cheap because the hot path only writes to memory and flushes
once per request.

### Is it HPOS compatible?

Yes. Scheduler Watchdog does not touch order storage at all. WooCommerce  Status
Compatibility lists it as HPOS compatible.

### Does the plugin send my data anywhere?

Only if you enter a licence key, and then only to the licence server at `https://
tillfoundry.com` to activate or validate that key. See **External Services** below
for the exact endpoints and the data sent. Nothing is sent when no key is entered.
No analytics, no telemetry, no external alerting service.

### What does GDPR erasure mean for this plugin?

Scheduler Watchdog stores no order, customer, refund or order-item data. It records
the Action Scheduler hook names, counts, durations and action IDs it needs to measure
the queue. It also stores two things that can contain personal data: the alert-recipient
email addresses you configure, kept in the `scheduler_watchdog_settings` option,
and per-user notice state kept in the `scheduler_watchdog_dismissed_notices` and`
scheduler_watchdog_queued_notices` user-meta keys, which remembers which plugin 
notices a user has dismissed or still needs to see. To remove the recipient addresses,
clear the **Alert recipients** field in the plugin settings. The per-user notice
state is removed automatically when the affected WordPress user account is deleted.
Enabling **Delete data on uninstall** removes the plugin’s settings, custom tables
and transients when the plugin is deleted. Failed actions can also record the error
text returned by the failing integration in the plugin’s own events log.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“TillFoundry Scheduler Watchdog” is open source software. The following people have
contributed to this plugin.

Contributors

 *   [ Till Foundry ](https://profiles.wordpress.org/lijnam/)

[Translate “TillFoundry Scheduler Watchdog” into your language.](https://translate.wordpress.org/projects/wp-plugins/tillfoundry-scheduler-watchdog)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/tillfoundry-scheduler-watchdog/),
check out the [SVN repository](https://plugins.svn.wordpress.org/tillfoundry-scheduler-watchdog/),
or subscribe to the [development log](https://plugins.trac.wordpress.org/log/tillfoundry-scheduler-watchdog/)
by [RSS](https://plugins.trac.wordpress.org/log/tillfoundry-scheduler-watchdog/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 0.1.7

 * Fixed: the **Flag a hook as slow above this average duration** setting now actually
   decides which hooks are reported as slow. Raising the threshold hides faster 
   hooks from the slowest-hooks table and the REST response, and lowering it surfaces
   more; previously the value was saved and shown but never applied, so the setting
   was a no-op and the on-screen promise was false.
 * Fixed: every numeric setting now enforces its declared minimum on save. A crafted
   or malformed request could previously store 0 for fields documented as 1 or more—
   the top-hooks limit, the slow-hook threshold, the failure and stall thresholds,
   the queue-depth warning, the cleanup batch size and the retention ages — even
   though the on-screen field showed a floor. The 60-second minimum for the sample
   interval and the 7-day/30-day cleanup floors are unchanged.
 * Fixed: the **Action Scheduler is required** admin notice now appears on the plugin’s
   own screens instead of only the WordPress dashboard. The dismissal check matched
   the text domain rather than the real screen id, so the notice was confined to`
   index.php` and a merchant whose Action Scheduler was missing never saw it where
   they could act on it.
 * Fixed: the admin stylesheet and script are now enqueued using the plugin’s declared
   menu slug, matching the same real screen ids, so the admin bundle loads on every
   Scheduler Watchdog screen and on no unrelated admin page.

#### 0.1.6

 * Changed: the plugin is now named **TillFoundry Scheduler Watchdog** and its text
   domain is `tillfoundry-scheduler-watchdog`, matching the WordPress.org directory
   slug. The admin menu slugs, store product slug, plugin file name and licence 
   endpoints are unchanged, so no bookmark, setting or stored data moves.

#### 0.1.5

 * Changed: the retention settings are now visibly reconciled with Action Scheduler’s
   own cleaner. The Cleanup tab shows the effective retention the store is actually
   getting: a panel reports what Action Scheduler’s own cleaner will keep (through
   the `action_scheduler_retention_period` filter and, on Action Scheduler 4.x, `
   action_scheduler_retention_period_for_failed`) next to what Scheduler Watchdog’s
   own cleanup deletes. A merchant who asks to keep a year of history can now see
   that Action Scheduler honours it instead of losing the log at 31 days.
 * Changed: on Action Scheduler 3.9.x, which does not purge failed actions itself,
   the panel says so instead of implying a failed-action retention period that core
   ignores.

#### 0.1.4

 * Changed: retention settings are reconciled with Action Scheduler’s own cleaner.
   A “Keep complete actions (days)”, “Keep canceled actions (days)” or “Keep failed
   actions (days)” value above Action Scheduler’s 31-day (complete/canceled) or 
   ~90-day (failed) default is now honoured by Action Scheduler’s daily cleanup 
   as well as by Scheduler Watchdog’s own run. Action Scheduler’s built-in default
   is never shortened; a shorter value still takes effect through Scheduler Watchdog’s
   own cleanup and its 7-day/30-day hard floors.
 * Fixed: the retention filters are now inert while the master “Enable Scheduler
   Watchdog” switch is off, so a disabled watchdog no longer changes Action Scheduler’s
   cleanup behaviour.
 * Fixed: the stored licence key is masked in the Licence tab instead of being printed
   in the clear, and an unchanged masked field is never re-verified as if it were
   the key. Settings notices are escaped before they are printed.
 * Release metadata: `Tested up to` is 6.0, the WordPress version this build is 
   tested against.

#### 0.1.3

 * Accessibility: each queue-health card now explains itself in visible text instead
   of a tooltip, so a sighted touch or keyboard user can read what “Stale claims”
   and the other cards mean. The text is still available to assistive technology.
 * Accessibility: the dashboard, settings and event screen controls get a 44x44px
   minimum tap target on touch (coarse-pointer) devices, and the event screen gains
   the same visible focus outlines as the rest of the admin.
 * The Developer tab and its two frontend switches are now shown and saved only 
   for administrators with `manage_options`. A Shop Manager who can manage the plugin
   no longer sees them, and a save by that user leaves their stored values alone
   instead of resetting them.
 * The Event Log and Settings submenu items now use short labels rather than repeating“
   Scheduler Watchdog:” in front of each.
 * When Action Scheduler is not active, the dashboard shows a short “No queue to
   watch yet” empty state instead of repeating the full environment notice that 
   already appears above it.
 * The licence-expired message now says that every feature keeps working, so no 
   action is needed. The licence status table no longer prints a “Plan” row.
 * The Verify licence control now shows its no-JavaScript instruction before the
   disabled button, and the licence row wraps cleanly on narrow screens.
 * The dashboard stops polling for fresh numbers while its browser tab is hidden
   and resumes when the tab becomes visible, so a background tab no longer burns
   a request per interval.
 * Rebuilt the distributed package so the release ZIP is byte-identical to the current
   source tree.

#### 0.1.2

 * Fixed: “Keep complete actions (days)”, “Keep canceled actions (days)” and “Keep
   failed actions (days)” are now applied to Action Scheduler’s own cleaner as well,
   so a value above Action Scheduler’s 31-day (complete/canceled) or ~90-day (failed)
   default is not cut short by Action Scheduler’s separate daily cleanup. Scheduler
   Watchdog extends Action Scheduler’s retention through its supported filters and
   never shortens Action Scheduler’s own default.
 * Fixed: rebuilt the distributed package so the release ZIP is byte-identical to
   the current source tree.
 * Changed: the Cleanup settings now explain which retention value wins and where
   the hard minimum ages apply.

#### 0.1.1

 * Fixed: “Keep complete actions (days)”, “Keep canceled actions (days)” and “Keep
   failed actions (days)” are now applied to Action Scheduler’s own cleaner as well.
   A value above Action Scheduler’s 31-day (complete/canceled) or ~90-day (failed)
   default is no longer cut short by Action Scheduler’s separate daily cleanup.
 * Changed: the Cleanup settings now explain which retention value wins and where
   the hard minimum ages apply.
 * Changed: the privacy wording is now specific. The readme makes no blanket no-
   personal-data claim; it states that no order, customer, refund or order-item 
   data is stored and names the alert-recipient addresses and per-user notice state
   that are.

#### 0.1.0

 * Initial release.
 * Queue health dashboard: pending, past-due, in-progress and failed-in-window counts,
   plus a WordPress dashboard widget.
 * Top failing hooks, slowest hooks and largest backlogs.
 * Email alerts for failed actions, stalled/past-due hooks, a missing or overdue
   queue runner, and stale in-progress claims, with a per-alert cooldown.
 * Safe, retention-based cleanup of old complete, failed and canceled actions through
   Action Scheduler’s own cleaner, with hard minimum ages and a preview.
 * Stale-claim recovery.
 * Configurable recipients, thresholds and retention.
 * HPOS compatibility declaration and multisite-aware uninstall behind an explicit
   opt-in.

## Meta

 *  Version **0.1.7**
 *  Last updated **2 days ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.0 or higher **
 *  Tested up to **7.1.2**
 *  PHP version ** 7.4 or higher **
 * Tags
 * [action scheduler](https://wordpress.org/plugins/tags/action-scheduler/)[alerts](https://wordpress.org/plugins/tags/alerts/)
   [monitoring](https://wordpress.org/plugins/tags/monitoring/)[woocommerce](https://wordpress.org/plugins/tags/woocommerce/)
 *  [Advanced View](https://wordpress.org/plugins/tillfoundry-scheduler-watchdog/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/tillfoundry-scheduler-watchdog/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/tillfoundry-scheduler-watchdog/reviews/)

## Contributors

 *   [ Till Foundry ](https://profiles.wordpress.org/lijnam/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/tillfoundry-scheduler-watchdog/)