PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.2-a.1
Jetpack – WP Security, Backup, Speed, & Growth v16.2-a.1
16.1.2 16.2-a.1 16.1.1 16.1 16.1-beta 16.1-beta.2 16.1-beta.3 16.1-a.5 16.1-a.3 16.0.1 16.1-a.1 16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / jetpack_vendor / automattic / jetpack-sync / src / class-health.php
jetpack / jetpack_vendor / automattic / jetpack-sync / src Last commit date
modules 1 month ago replicastore 4 months ago sync-queue 6 months ago class-actions.php 3 months ago class-activity-log-event.php 1 month ago class-data-settings.php 2 months ago class-dedicated-sender.php 2 days ago class-default-filter-settings.php 4 years ago class-defaults.php 1 month ago class-functions.php 2 months ago class-health.php 5 months ago class-json-deflate-array-codec.php 8 months ago class-listener.php 2 months ago class-lock.php 4 years ago class-main.php 3 months ago class-modules.php 2 years ago class-package-version.php 2 days ago class-queue-buffer.php 4 years ago class-queue.php 2 months ago class-replicastore.php 2 months ago class-rest-endpoints.php 5 months ago class-rest-sender.php 2 months ago class-sender.php 2 months ago class-server.php 5 months ago class-settings.php 4 months ago class-simple-codec.php 8 months ago class-users.php 4 months ago class-utils.php 4 years ago interface-codec.php 4 years ago interface-replicastore.php 2 months ago
class-health.php
207 lines
1 <?php
2 /**
3 * Health class.
4 *
5 * @package automattic/jetpack-sync
6 */
7
8 namespace Automattic\Jetpack\Sync;
9
10 /**
11 * Health class.
12 */
13 class Health {
14
15 /**
16 * Prefix of the blog lock transient.
17 *
18 * @access public
19 *
20 * @var string
21 */
22 const STATUS_OPTION = 'sync_health_status';
23
24 /**
25 * Status key in option array.
26 *
27 * @access public
28 *
29 * @var string
30 */
31 const OPTION_STATUS_KEY = 'status';
32
33 /**
34 * Timestamp key in option array.
35 *
36 * @access public
37 *
38 * @var string
39 */
40 const OPTION_TIMESTAMP_KEY = 'timestamp';
41
42 /**
43 * Unknown status code.
44 *
45 * @access public
46 *
47 * @var string
48 */
49 const STATUS_UNKNOWN = 'unknown';
50
51 /**
52 * Disabled status code.
53 *
54 * @access public
55 *
56 * @var string
57 */
58 const STATUS_DISABLED = 'disabled';
59
60 /**
61 * Out of sync status code.
62 *
63 * @access public
64 *
65 * @var string
66 */
67 const STATUS_OUT_OF_SYNC = 'out_of_sync';
68
69 /**
70 * In sync status code.
71 *
72 * @access public
73 *
74 * @var string
75 */
76 const STATUS_IN_SYNC = 'in_sync';
77
78 /**
79 * If sync is active, Health-related hooks will be initialized after plugins are loaded.
80 */
81 public static function init() {
82 add_action( 'jetpack_full_sync_end', array( __CLASS__, 'full_sync_end_update_status' ), 10, 2 );
83 }
84
85 /**
86 * Gets health status code.
87 *
88 * @return string Sync Health Status
89 */
90 public static function get_status() {
91 $status = \Jetpack_Options::get_option( self::STATUS_OPTION );
92
93 if ( false === $status || ! is_array( $status ) || empty( $status[ self::OPTION_STATUS_KEY ] ) ) {
94 return self::STATUS_UNKNOWN;
95 }
96
97 switch ( $status[ self::OPTION_STATUS_KEY ] ) {
98 case self::STATUS_DISABLED:
99 case self::STATUS_OUT_OF_SYNC:
100 case self::STATUS_IN_SYNC:
101 return $status[ self::OPTION_STATUS_KEY ];
102 default:
103 return self::STATUS_UNKNOWN;
104 }
105 }
106
107 /**
108 * When the Jetpack plugin is upgraded, set status to disabled if sync is not enabled,
109 * or to unknown, if the status has never been set before.
110 */
111 public static function on_jetpack_upgraded() {
112 if ( ! Settings::is_sync_enabled() ) {
113 self::update_status( self::STATUS_DISABLED );
114 return;
115 }
116 if ( false === self::is_status_defined() ) {
117 self::update_status( self::STATUS_UNKNOWN );
118 }
119 }
120
121 /**
122 * When the Jetpack plugin is activated, set status to disabled if sync is not enabled,
123 * or to unknown.
124 */
125 public static function on_jetpack_activated() {
126 if ( ! Settings::is_sync_enabled() ) {
127 self::update_status( self::STATUS_DISABLED );
128 return;
129 }
130 self::update_status( self::STATUS_UNKNOWN );
131 }
132
133 /**
134 * Updates sync health status with either a valid status, or an unknown status.
135 *
136 * @param string $status Sync Status.
137 *
138 * @return bool True if an update occoured, or false if the status didn't change.
139 */
140 public static function update_status( $status ) {
141 if ( self::get_status() === $status ) {
142 return false;
143 }
144 // Default Status Option.
145 $new_status = array(
146 self::OPTION_STATUS_KEY => self::STATUS_UNKNOWN,
147 self::OPTION_TIMESTAMP_KEY => microtime( true ),
148 );
149
150 switch ( $status ) {
151 case self::STATUS_DISABLED:
152 case self::STATUS_OUT_OF_SYNC:
153 case self::STATUS_IN_SYNC:
154 $new_status[ self::OPTION_STATUS_KEY ] = $status;
155 break;
156 }
157
158 \Jetpack_Options::update_option( self::STATUS_OPTION, $new_status );
159 return true;
160 }
161
162 /**
163 * Check if Status has been previously set.
164 *
165 * @return bool is a Status defined
166 */
167 public static function is_status_defined() {
168 $status = \Jetpack_Options::get_option( self::STATUS_OPTION );
169
170 if ( false === $status || ! is_array( $status ) || empty( $status[ self::OPTION_STATUS_KEY ] ) ) {
171 return false;
172 } else {
173 return true;
174 }
175 }
176
177 /**
178 * Check if the sync queue is healthy based on size and lag.
179 *
180 * The queue is considered healthy if either size OR lag is within its limit.
181 * This matches the logic in Listener::can_add_to_queue(): data loss only occurs
182 * when both limits are exceeded simultaneously.
183 *
184 * @param int $queue_size Current queue size.
185 * @param float $queue_lag Current queue lag in seconds.
186 * @param int $max_queue_size Maximum allowed queue size.
187 * @param float $max_queue_lag Maximum allowed queue lag in seconds.
188 * @return bool Whether the queue is healthy.
189 */
190 public static function is_queue_healthy( $queue_size, $queue_lag, $max_queue_size, $max_queue_lag ) {
191 return ( $queue_size < $max_queue_size )
192 || ( $queue_lag < $max_queue_lag );
193 }
194
195 /**
196 * Update Sync Status if Full Sync ended of Posts
197 *
198 * @param string $checksum The checksum that's currently being processed.
199 * @param array $range The ranges of object types being processed.
200 */
201 public static function full_sync_end_update_status( $checksum, $range ) {
202 if ( isset( $range['posts'] ) ) {
203 self::update_status( self::STATUS_IN_SYNC );
204 }
205 }
206 }
207