Plugin screenshot thumbnail 1/7
Plugin screenshot thumbnail 2/7
Plugin screenshot thumbnail 3/7
Plugin screenshot thumbnail 4/7
Plugin screenshot thumbnail 5/7
Plugin screenshot thumbnail 6/7
Plugin screenshot thumbnail 7/7

Live operational monitoring dashboard for Craft CMS 5. Know what's happening on your site right now and what needs attention.

Features

  • Live Traffic — Active visitors, requests per minute, top URLs, bot vs human breakdown
  • Editor Tracking — Who's logged in, what they're editing, collision warnings when two editors work on the same entry
  • Content Health — Entries by section, stale content detection, scheduled/expired entries, drafts awaiting attention, asset volume summaries
  • Queue Watch — Waiting/running/failed jobs, common failure patterns, queue health status
  • System Pulse — CPU, memory, disk, load average, DB response time, PHP info, uptime
  • Configurable Alert Rules — Build alerts in the CP, no config files. Each rule has a metric, operator, threshold, severity, and enable toggle. Queue failures, editor collisions, and server resource spikes ship as default rules — edit, disable, or add your own. An extensible metric registry covers queue depth, CPU / memory / disk %, collisions, active editor count, and stale content.
  • Webhook & Email Notifications — Send alerts to Slack, Microsoft Teams (Power Automate / Adaptive Cards), Zapier, or any JSON receiver. Per-rule email recipients with admin-notify toggle. A Send Test button verifies delivery before you ship the rule. Flap throttling (minNotifyInterval) suppresses noisy repeats, and "notify on resolve" closes the loop. Notifications dispatch asynchronously via a queue job so SMTP / webhook latency never blocks a request.
  • Granular Permissions — Three CP permissions (viewDashboard, manageAlerts, manageSettings) so editors and ops staff get scoped access without full admin rights.
  • Overrideable Email Template — Drop a templates/_cp/_emails/alert.twig into your project to fully customize alert emails.
  • Dashboard Widget — Configurable at-a-glance summary card with auto-refresh
  • Full CP Section — Seven-tab deep dive (Overview, Live Traffic, Editors, Content Health, Queue Watch, System Pulse, Alerts) plus Alerts → Rules and Webhooks management screens

Requirements

  • Craft CMS 5.0 or later
  • PHP 8.2 or later

Tracking

SettingDefaultDescription
Track VisitorsOnEnable front-end visitor tracking via request logging
Track EditorsOnTrack CP user activity and element editing
Track Server MetricsOnPeriodically sample CPU, memory, disk, and DB metrics
Collision DetectionOnAlert when multiple editors work on the same content

Refresh & Timeouts

SettingDefaultDescription
Refresh Interval30sHow often the dashboard auto-refreshes
Visitor Timeout2 minMinutes before a visitor is considered inactive
Editor Timeout5 minMinutes before an editor session is considered inactive

Data Retention

SettingDefaultDescription
Visitor Data30 days
Editor Data90 days
Content Events90 days
Metric Samples30 days
Alert History90 days

Alert Thresholds

SettingDefaultDescription
Queue Failure Threshold3Failed jobs before triggering an alert
5xx Error Rate10/minErrors per minute before alert
404 Spike50/min404s per minute before alert
Stale Content90 daysDays without update before flagging

Scheduled Jobs

Control Tower includes three queue jobs that should be run on a schedule via cron:

# Collect server metrics (every 1-2 minutes)
php craft queue/push justinholtweb\\controltower\\jobs\\CollectMetricsJob

# Run alert checks (every 5 minutes)
php craft queue/push justinholtweb\\controltower\\jobs\\RunAlertChecksJob

# Data retention cleanup (daily)
php craft queue/push justinholtweb\\controltower\\jobs\\CleanupJob

Or push them programmatically:

use justinholtweb\controltower\jobs\CollectMetricsJob;
use justinholtweb\controltower\jobs\RunAlertChecksJob;
use justinholtweb\controltower\jobs\CleanupJob;

Craft::$app->getQueue()->push(new CollectMetricsJob());
Craft::$app->getQueue()->push(new RunAlertChecksJob());
Craft::$app->getQueue()->push(new CleanupJob());

Dashboard Widget

Add the Control Tower widget to any user's dashboard. The widget is configurable:

  • Toggle visibility for each panel (visitors, editors, queue, server, alerts, content, top URLs)
  • Set a custom refresh interval
  • Resize to any column span

The widget links to the full CP section for deeper investigation.

Architecture

Plugin.php              → Event wiring, CP nav, settings
controllers/
  DashboardController   → 8 CP page actions
  ApiController         → 8 JSON endpoints for live polling
services/
  VisitorTrackingService   → Session-hash tracking, bot detection
  EditorTrackingService    → CP route parsing, collision detection
  ContentHealthService     → Stale/scheduled/expired content, pipeline
  QueueMonitorService      → Queue health, failed jobs
  MetricsCollectorService  → CPU/memory/disk/DB, cross-platform
  AlertService             → Alert lifecycle, automated checks
records/                → ActiveRecord models (6 tables)
migrations/Install.php → Database schema
jobs/                   → CleanupJob, CollectMetricsJob, RunAlertChecksJob
widgets/                → Dashboard widget
assets/                 → CSS + JS with auto-refresh polling
templates/              → CP section (7 tabs) + widget

Privacy

  • Visitor IP addresses are stored as SHA-256 hashes, never in plain text
  • User agents are hashed for bot detection grouping
  • Session identity uses a daily-rotating hash of IP + user agent
  • All tracking data is automatically purged based on retention settings
  • Visitor tracking can be fully disabled in settings

Roadmap

v1.5 — Trend charts (15m / 1h / 24h / 7d), per-section content health, 404 and error rate trends, configurable alert thresholds

v2 — Deployment awareness (git SHA, last deploy, environment), cache metrics, database slow query panel, multi-site comparisons

Standard

Plus $25/year after one year.

Installation Instructions

To install this plugin, copy the command above to your terminal.

Reviews

This plugin doesn't have any reviews.

Active Installs
2
Version
5.1.1
License
Craft
Compatibility
Craft 5
Last release
May 17, 2026
Activity (30 days)
2
Closed Issues
0
Open Issues
0
Merged PRs
0
Open PRs