namespace ImageOptimization\Modules\Stats\Components;
use ImageOptimization\Classes\Async_Operation\{
Exceptions\Async_Operation_Exception,
use ImageOptimization\Classes\Logger;
use ImageOptimization\Modules\Stats\Classes\Optimization_Stats;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
class Optimization_Stats_Handler {
public function handle_stats_chunk( $page, $pages_count, $output ) {
$chunk = Optimization_Stats::get_image_stats_chunk( $page );
foreach ( array_keys( $chunk ) as $key ) {
if ( isset( $output[ $key ] ) ) {
$output[ $key ] += $chunk[ $key ];
$output[ $key ] = $chunk[ $key ];
if ( $page < $pages_count ) {
Async_Operation_Hook::CALCULATE_OPTIMIZATION_STATS,
'pages_count' => $pages_count,
Async_Operation_Queue::STATS
} catch ( Async_Operation_Exception $aoe ) {
Logger::log( Logger::LEVEL_ERROR, 'Error while creating a stats calculation task: ' . $aoe->getMessage() );
unset( $output['pages'] );
Optimization_Stats::set_stored_stats( $output );
public function __construct() {
add_action( Async_Operation_Hook::CALCULATE_OPTIMIZATION_STATS, [ $this, 'handle_stats_chunk' ], 10, 3 );