From 3b5ed20d18fa877b1ec06afbccc32a38e68b6bc8 Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Thu, 08 Jan 2026 16:51:27 +0000
Subject: [PATCH] =Queue.js refactor
---
inc/managers/ErrorHandler.php | 164 ++++++++++++++++++++++++++++++++----------------------
1 files changed, 97 insertions(+), 67 deletions(-)
diff --git a/inc/managers/ErrorHandler.php b/inc/managers/ErrorHandler.php
index 166229e..9e6cc9a 100644
--- a/inc/managers/ErrorHandler.php
+++ b/inc/managers/ErrorHandler.php
@@ -249,14 +249,31 @@
*
* @return bool Whether the notification is sent successfully
*/
- protected function notifyAdmin(string $component, string $message, array $context):bool
- {
- $admin_email = get_option('admin_email');
- $subject = "[edmonton.ink Critical Error] {$component}";
- $body = "Error: {$message}\n\nContext: " . print_r($context, true);
+ protected function notifyAdmin(string $component, string $message, array $context):bool
+ {
+ $admin_email = get_option('admin_email');
+ $subject = "[" . get_bloginfo('name') . " Critical Error] {$component}";
- return JVB()->email()->sendEmail($admin_email, $subject, $body);
- }
+ $body = JVB()->email()->alert(
+ 'A critical error has occurred and requires immediate attention',
+ 'error'
+ );
+
+ $body .= JVB()->email()->h2('Error Details');
+ $body .= JVB()->email()->card(
+ '<p><strong>Component:</strong> ' . esc_html($component) . '</p>' .
+ '<p><strong>Message:</strong></p>' .
+ JVB()->email()->codeBlock($message),
+ 'Error Information'
+ );
+
+ if (!empty($context)) {
+ $body .= JVB()->email()->h3('Additional Context');
+ $body .= JVB()->email()->codeBlock(json_encode($context, JSON_PRETTY_PRINT));
+ }
+
+ return JVB()->email()->sendEmail($admin_email, $subject, $body, 'CRITICAL ERROR');
+ }
/**
* Gather summary of the most important errors
@@ -350,79 +367,92 @@
* Send daily error summary email to administrator
* @return bool Whether email is sent
*/
- public function sendErrorSummary():bool
- {
- // Get summary data
- $summary = $this->gatherErrorSummary();
+ public function sendErrorSummary():bool
+ {
+ $summary = $this->gatherErrorSummary();
- // Only send if there are errors
- if (empty($summary['frequent']) && empty($summary['critical'])) {
- return false;
- }
+ if (empty($summary['frequent']) && empty($summary['critical'])) {
+ return false;
+ }
- $admin_email = get_option('admin_email');
- $site_name = get_bloginfo('name');
- $today = date('Y-m-d');
- $yesterday = date('Y-m-d', strtotime('-1 day'));
+ $admin_email = get_option('admin_email');
+ $site_name = get_bloginfo('name');
+ $yesterday = date('Y-m-d', strtotime('-1 day'));
+ $subject = "[{$site_name}] Daily Error Summary - " . date('Y-m-d');
- $subject = "[{$site_name}] Daily Error Summary - {$today}";
+ // Header with alert
+ $body = JVB()->email()->h1('Daily Error Summary');
+ $body .= sprintf('<p>Error summary for <strong>%s</strong></p>', $yesterday);
- // Build email body
- $body = "= Error Summary for {$yesterday} =\n\n";
+ // Summary stats in a grid
+ if (!empty($summary['stats'])) {
+ $stats = [
+ JVB()->email()->stat($summary['stats']->total_errors, 'Total Errors'),
+ JVB()->email()->stat($summary['stats']->critical_count, 'Critical', 'Requires attention'),
+ JVB()->email()->stat($summary['stats']->error_count, 'Errors'),
+ JVB()->email()->stat($summary['stats']->warning_count, 'Warnings')
+ ];
+ $body .= JVB()->email()->grid($stats, 4);
+ }
- // Add frequent errors section
- if (!empty($summary['frequent'])) {
- $body .= "== Most Frequent Errors ==\n\n";
+ // Alert if critical errors exist
+ if (!empty($summary['critical'])) {
+ $body .= JVB()->email()->alert(
+ sprintf('Found %d critical errors that need immediate attention', count($summary['critical'])),
+ 'error'
+ );
+ }
- foreach ($summary['frequent'] as $index => $error) {
- $body .= ($index + 1) . ". [{$error->component}] {$error->error_type}\n";
- $body .= " Message: " . wp_trim_words($error->message, 20, '...') . "\n";
- $body .= " Count: {$error->count}\n\n";
- }
- }
+ $body .= JVB()->email()->spacer(20);
- // Add critical errors section
- if (!empty($summary['critical'])) {
- $body .= "== Recent Critical Errors ==\n\n";
+ // Frequent errors section
+ if (!empty($summary['frequent'])) {
+ $body .= JVB()->email()->h2('Most Frequent Errors');
- foreach ($summary['critical'] as $index => $error) {
- $body .= ($index + 1) . ". [{$error->component}] {$error->error_type}\n";
- $body .= " Time: {$error->created_at}\n";
- $body .= " Message: " . $error->message . "\n\n";
+ foreach ($summary['frequent'] as $error) {
+ $cardContent = JVB()->email()->badge($error->count . 'x', 'warning') . ' ';
+ $cardContent .= '<strong>' . esc_html($error->error_type) . '</strong>';
+ $cardContent .= '<p style="margin:10px 0 5px 0;font-size:13px;">' . esc_html(wp_trim_words($error->message, 15)) . '</p>';
+ $cardContent .= '<p style="margin:0;font-size:12px;color:' . JVB()->email()->colours['dark-200'] . ';">
+ Source: ' . esc_html($error->source) . ' |
+ Logged in: ' . $error->logged_in_count . ' |
+ Logged out: ' . $error->logged_out_count . '
+ </p>';
- // Include context for critical errors if available
- if (!empty($error->context)) {
- $context = json_decode($error->context, true);
- if (is_array($context)) {
- $body .= " Context:\n";
- foreach ($context as $key => $value) {
- if (is_array($value) || is_object($value)) {
- $value = json_encode($value);
- }
- $body .= " - {$key}: {$value}\n";
- }
- }
- $body .= "\n";
- }
- }
- }
+ $body .= JVB()->email()->card($cardContent, $error->component);
+ }
+ }
- // Add dashboard link if available
- $admin_url = admin_url('admin.php?page=jvb-error-logs');
- $body .= "View detailed error logs in the dashboard: {$admin_url}\n\n";
+ // Critical errors section
+ if (!empty($summary['critical'])) {
+ $body .= JVB()->email()->spacer(30);
+ $body .= JVB()->email()->h2('Recent Critical Errors');
- // Send the email
- $sent = JVB()->email()->sendEmail($admin_email, $subject, $body, 'ERROR SUMMARY');
+ foreach ($summary['critical'] as $error) {
+ $cardContent = '<p><strong>Time:</strong> ' . esc_html($error->created_at) . '</p>';
+ $cardContent .= '<p><strong>Message:</strong></p>';
+ $cardContent .= JVB()->email()->codeBlock($error->message);
- // Log that summary was sent
- if ($sent) {
- error_log("[ErrorHandler] Daily error summary sent to {$admin_email}");
- } else {
- error_log("[ErrorHandler] Daily error summary was not sent.");
- }
+ // Include context if available
+ if (!empty($error->context)) {
+ $context = json_decode($error->context, true);
+ if (is_array($context)) {
+ $cardContent .= '<p><strong>Context:</strong></p>';
+ $cardContent .= JVB()->email()->codeBlock(json_encode($context, JSON_PRETTY_PRINT));
+ }
+ }
- return $sent;
- }
+ $body .= JVB()->email()->card($cardContent, $error->component . ': ' . $error->error_type);
+ }
+ }
+
+ // Dashboard link
+ $admin_url = admin_url('admin.php?page=jvb-error-logs');
+ $body .= JVB()->email()->spacer(30);
+ $body .= JVB()->email()->button($admin_url, 'View Detailed Logs');
+
+ return JVB()->email()->sendEmail($admin_email, $subject, $body, 'ERROR SUMMARY');
+ }
/**
* Get HTML version of the error summary for nicer emails
--
Gitblit v1.10.0