-
Notifications
You must be signed in to change notification settings - Fork 14
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #227 from markkelnar/feature/garbage-collect-aged-…
…queries feat: Add garbage collection cleanup admin and cron job
- Loading branch information
Showing
13 changed files
with
494 additions
and
111 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
<?php | ||
/** | ||
* Content | ||
* | ||
* @package Wp_Graphql_Smart_Cache | ||
*/ | ||
|
||
namespace WPGraphQL\SmartCache\Document; | ||
|
||
use WPGraphQL\SmartCache\Admin\Settings; | ||
use WPGraphQL\SmartCache\Document; | ||
use WPGraphQL\SmartCache\Document\Group; | ||
use GraphQL\Server\RequestError; | ||
|
||
class GarbageCollection { | ||
|
||
/** | ||
* @param integer $number_of_posts Number of post ids matching criteria. | ||
* | ||
* @return int[] Array of post ids | ||
*/ | ||
public static function get_documents_by_age( $number_of_posts = 100 ) { | ||
// $days_ago Posts older than this many days ago | ||
$days_ago = get_graphql_setting( 'query_garbage_collect_age', null, 'graphql_persisted_queries_section' ); | ||
if ( 1 > $days_ago || ! is_numeric( $days_ago ) ) { | ||
return []; | ||
} | ||
|
||
// Query for saved query documents that are older than age and not skipping garbage collection. | ||
// Get documents where no group taxonmy term is set. | ||
$wp_query = new \WP_Query( | ||
[ | ||
'post_type' => Document::TYPE_NAME, | ||
'post_status' => 'publish', | ||
'posts_per_page' => $number_of_posts, | ||
'fields' => 'ids', | ||
'date_query' => [ | ||
[ | ||
'column' => 'post_modified_gmt', | ||
'before' => $days_ago . ' days ago', | ||
], | ||
], | ||
// phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_tax_query | ||
'tax_query' => [ | ||
[ | ||
'taxonomy' => Group::TAXONOMY_NAME, | ||
'field' => 'name', | ||
'operator' => 'NOT EXISTS', | ||
], | ||
], | ||
] | ||
); | ||
|
||
/** | ||
* Because 'fields' returns 'ids', this returns array of post ints. Satisfy phpstan. | ||
* | ||
* @var int[] | ||
*/ | ||
return $wp_query->get_posts(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
<?php | ||
/** | ||
* Content | ||
* | ||
* @package Wp_Graphql_Smart_Cache | ||
*/ | ||
|
||
namespace WPGraphQL\SmartCache\Document; | ||
|
||
use WPGraphQL\SmartCache\Admin\Settings; | ||
use WPGraphQL\SmartCache\Document; | ||
|
||
class Group { | ||
|
||
const TAXONOMY_NAME = 'graphql_document_group'; | ||
|
||
/** | ||
* @return void | ||
*/ | ||
public function init() { | ||
register_taxonomy( | ||
self::TAXONOMY_NAME, | ||
Document::TYPE_NAME, | ||
[ | ||
'description' => __( 'Tag the saved query document with other queries as a "group".', 'wp-graphql-smart-cache' ), | ||
'labels' => [ | ||
'name' => __( 'Groups', 'wp-graphql-smart-cache' ), | ||
'singular_name' => __( 'Group', 'wp-graphql-smart-cache' ), | ||
], | ||
'hierarchical' => false, | ||
'public' => false, | ||
'publicly_queryable' => false, | ||
'show_admin_column' => true, | ||
'show_in_menu' => Settings::show_in_admin(), | ||
'show_ui' => Settings::show_in_admin(), | ||
'show_in_quick_edit' => true, | ||
'show_in_graphql' => true, | ||
'graphql_single_name' => 'graphqlDocumentGroup', | ||
'graphql_plural_name' => 'graphqlDocumentGroups', | ||
] | ||
); | ||
} | ||
|
||
/** | ||
* Look up the first group for a post | ||
* | ||
* @param int $post_id The post id | ||
* @return string | ||
*/ | ||
public static function get( $post_id ) { | ||
$item = get_the_terms( $post_id, self::TAXONOMY_NAME ); | ||
return ! is_wp_error( $item ) && isset( $item[0] ) && property_exists( $item[0], 'name' ) ? $item[0]->name : ''; | ||
} | ||
} |
Oops, something went wrong.