Skip to content

Commit

Permalink
Update raw post type breakdown for sites with high post count
Browse files Browse the repository at this point in the history
Updating the function get_raw_post_type_breakdown for sites with high post counts as the query can cause backend issues for sites with a lot of post. If the sites total post count exceeds a million posts the query will be handled remotely and the results of a remote request used for My Jetpack
  • Loading branch information
oikeme committed Dec 16, 2024
1 parent 59d5619 commit 124515d
Showing 1 changed file with 44 additions and 1 deletion.
45 changes: 44 additions & 1 deletion projects/packages/my-jetpack/src/products/class-search-stats.php
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ class Search_Stats {
const CACHE_EXPIRY = 1 * MINUTE_IN_SECONDS;
const CACHE_GROUP = 'jetpack_search';
const POST_TYPE_BREAKDOWN_CACHE_KEY = 'post_type_break_down';
const TOTAL_POSTS_COUNT_CACHE_KEY = 'total-post-count';
const POST_COUNT_QUERY_LIMIT = 1e6;

/**
* Get stats from the WordPress.com API for the current blog ID.
Expand All @@ -58,6 +60,25 @@ public function get_stats_from_wpcom() {
return $response;
}

/**
* Queue querying the post type breakdown from WordPress.com API for the current blog ID.
*/
public function queue_post_count_query_from_wpcom() {
$blog_id = Jetpack_Options::get_option( 'id' );

if ( ! is_numeric( $blog_id ) ) {
return null;
}

Client::wpcom_json_api_request_as_blog(
'/sites/' . (int) $blog_id . '/jetpack-search/queue-post-count',
'2',
array(),
null,
'wpcom'
);
}

/**
* Estimate record counts via a local database query.
*/
Expand Down Expand Up @@ -127,7 +148,7 @@ public static function get_post_type_breakdown_with( $raw_posts_counts, $indexab
}

/**
* Get raw post type breakdown from the database.
* Get raw post type breakdown from the database or a remote request if posts count is high.
*/
protected static function get_raw_post_type_breakdown() {
global $wpdb;
Expand All @@ -137,6 +158,28 @@ protected static function get_raw_post_type_breakdown() {
return $results;
}

$total_posts_count = wp_cache_get( self::TOTAL_POSTS_COUNT_CACHE_KEY, self::CACHE_GROUP );
if ( false === $total_posts_count ) {
// phpcs:ignore WordPress.DB.DirectDatabaseQuery */
$total_posts_counts = $wpdb->get_var( "SELECT COUNT(*) FROM {$wpdb->posts}" );
wp_cache_set( self::TOTAL_POSTS_COUNT_CACHE_KEY, $total_posts_counts, self::CACHE_GROUP, self::CACHE_EXPIRY );
}

// Get post type breakdown from a remote request if the post count is high
if ( $total_posts_count > self::POST_COUNT_QUERY_LIMIT ) {
$search_stats = new Search_Stats();
$wpcom_stats = json_decode( wp_remote_retrieve_body( $search_stats->get_stats_from_wpcom() ), true );
$wpcom_raw_post_type_breakdown = $wpcom_stats['raw_post_type_breakdown'];
if ( $wpcom_raw_post_type_breakdown ) {
$results = $wpcom_raw_post_type_breakdown;
wp_cache_set( self::POST_TYPE_BREAKDOWN_CACHE_KEY, $results, self::CACHE_GROUP, self::CACHE_EXPIRY );
return $results;
} else {
$search_stats->queue_post_count_query_from_wpcom();
return array();
}
}

$query = "SELECT post_type, post_status, COUNT( * ) AS num_posts
FROM {$wpdb->posts}
WHERE post_password = ''
Expand Down

0 comments on commit 124515d

Please sign in to comment.