diff --git a/plugins/woocommerce/changelog/update-refine-error-counting b/plugins/woocommerce/changelog/update-refine-error-counting new file mode 100644 index 00000000000..905988307d8 --- /dev/null +++ b/plugins/woocommerce/changelog/update-refine-error-counting @@ -0,0 +1,4 @@ +Significance: patch +Type: enhancement + +Refine PHP Fatal Error Counting in MC Stat diff --git a/plugins/woocommerce/includes/class-woocommerce.php b/plugins/woocommerce/includes/class-woocommerce.php index 41104fcbd65..0c0c9c14a72 100644 --- a/plugins/woocommerce/includes/class-woocommerce.php +++ b/plugins/woocommerce/includes/class-woocommerce.php @@ -27,7 +27,6 @@ use Automattic\WooCommerce\Internal\Traits\AccessiblePrivateMethods; use Automattic\WooCommerce\Internal\Utilities\LegacyRestApiStub; use Automattic\WooCommerce\Internal\Utilities\WebhookUtil; use Automattic\WooCommerce\Internal\Admin\Marketplace; -use Automattic\WooCommerce\Internal\McStats; use Automattic\WooCommerce\Proxies\LegacyProxy; use Automattic\WooCommerce\Utilities\{LoggingUtil, RestApiUtil, TimeUtil}; use Automattic\WooCommerce\Internal\Logging\RemoteLogger; @@ -407,12 +406,6 @@ final class WooCommerce { $context ); - // Record fatal error stats. - $container = wc_get_container(); - $mc_stats = $container->get( McStats::class ); - $mc_stats->add( 'error', 'fatal-errors-during-shutdown' ); - $mc_stats->do_server_side_stats(); - /** * Action triggered when there are errors during shutdown. * diff --git a/plugins/woocommerce/src/Internal/Logging/RemoteLogger.php b/plugins/woocommerce/src/Internal/Logging/RemoteLogger.php index a15792fb29b..4e9bd7432b6 100644 --- a/plugins/woocommerce/src/Internal/Logging/RemoteLogger.php +++ b/plugins/woocommerce/src/Internal/Logging/RemoteLogger.php @@ -5,6 +5,7 @@ namespace Automattic\WooCommerce\Internal\Logging; use Automattic\WooCommerce\Utilities\FeaturesUtil; use Automattic\WooCommerce\Utilities\StringUtil; +use Automattic\WooCommerce\Internal\McStats; use WC_Rate_Limiter; use WC_Log_Levels; @@ -178,6 +179,15 @@ class RemoteLogger extends \WC_Log_Handler { return false; } + try { + // Record fatal error stats. + $mc_stats = wc_get_container()->get( McStats::class ); + $mc_stats->add( 'error', 'critical-errors' ); + $mc_stats->do_server_side_stats(); + } catch ( \Throwable $e ) { + error_log( 'Warning: Failed to record fatal error stats: ' . $e->getMessage() ); // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_error_log + } + if ( WC_Rate_Limiter::retried_too_soon( self::RATE_LIMIT_ID ) ) { error_log( 'Remote logging throttled.' ); // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_error_log return false; diff --git a/plugins/woocommerce/src/Internal/McStats.php b/plugins/woocommerce/src/Internal/McStats.php index 89320e1ee6a..2f05d355451 100644 --- a/plugins/woocommerce/src/Internal/McStats.php +++ b/plugins/woocommerce/src/Internal/McStats.php @@ -60,4 +60,17 @@ class McStats extends A8c_Mc_Stats { return parent::do_server_side_stat( $url ); } + + /** + * Pings the stats server for the current stats and empty the stored stats from the object + * + * @return void + */ + public function do_server_side_stats() { + if ( ! \WC_Site_Tracking::is_tracking_enabled() ) { + return; + } + + parent::do_server_side_stats(); + } }