PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 5.0.3
Jetpack – WP Security, Backup, Speed, & Growth v5.0.3
16.2-beta 12.0.3 12.1.3 12.2.3 12.3.2 12.4.2 12.5.2 12.6.4 12.7.3 12.8.3 12.9.5 13.0.2 13.1.5 13.2.4 13.3.3 13.4.5 13.5.2 13.6.2 13.7.2 13.8.3 13.9.2 14.0.1 14.1.1 14.2.2 14.3.1 All 501 releases
jetpack / modules / monitor.php

monitor.php in Jetpack – WP Security, Backup, Speed, & Growth 5.0.3, at modules/monitor.php

199 lines 6.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Module Name: Monitor
4 * Module Description: Receive immediate notifications if your site goes down, 24/7.
5 * Sort Order: 28
6 * Recommendation Order: 10
7 * First Introduced: 2.6
8 * Requires Connection: Yes
9 * Auto Activate: No
10 * Module Tags: Recommended
11 * Feature: Security
12 * Additional Search Queries: monitor, uptime, downtime, monitoring
13 */
14
15 class Jetpack_Monitor {
16
17 public $module = 'monitor';
18
19 function __construct() {
20 add_action( 'jetpack_modules_loaded', array( $this, 'jetpack_modules_loaded' ) );
21 add_action( 'jetpack_activate_module_monitor', array( $this, 'activate_module' ) );
22 }
23
24 public function activate_module() {
25 if ( Jetpack::is_user_connected() ) {
26 self::update_option_receive_jetpack_monitor_notification( true );
27 }
28 }
29
30 public function jetpack_modules_loaded() {
31 Jetpack::enable_module_configurable( $this->module );
32 Jetpack::module_configuration_load( $this->module, array( $this, 'jetpack_configuration_load' ) );
33 Jetpack::module_configuration_screen( $this->module, array( $this, 'jetpack_configuration_screen' ) );
34 }
35
36 public function jetpack_configuration_load() {
37 if ( Jetpack::is_user_connected() && ! self::is_active() ) {
38 Jetpack::deactivate_module( $this->module );
39 Jetpack::state( 'message', 'module_deactivated' );
40 wp_safe_redirect( Jetpack::admin_url( 'page=jetpack' ) );
41 die();
42 }
43 if ( ! empty( $_POST['action'] ) && $_POST['action'] == 'monitor-save' ) {
44 check_admin_referer( 'monitor-settings' );
45 $this->update_option_receive_jetpack_monitor_notification( isset( $_POST['receive_jetpack_monitor_notification'] ) );
46 Jetpack::state( 'message', 'module_configured' );
47 wp_safe_redirect( Jetpack::module_configuration_url( $this->module ) );
48 }
49 }
50
51 public function jetpack_configuration_screen() {
52 ?>
53 <p><?php esc_html_e( 'Nobody likes downtime, and that\'s why Jetpack Monitor is on the job, keeping tabs on your site by checking it every five minutes. As soon as any downtime is detected, you will receive an email notification alerting you to the issue. That way you can act quickly, to get your site back online again!', 'jetpack' ); ?>
54 <p><?php esc_html_e( 'We’ll also let you know as soon as your site is up and running, so you can keep an eye on total downtime.', 'jetpack'); ?></p>
55 <div class="narrow">
56 <?php if ( Jetpack::is_user_connected() && current_user_can( 'manage_options' ) ) : ?>
57 <?php $user_email = Jetpack::get_connected_user_email(); ?>
58 <form method="post" id="monitor-settings">
59 <input type="hidden" name="action" value="monitor-save" />
60 <?php wp_nonce_field( 'monitor-settings' ); ?>
61
62 <table id="menu" class="form-table">
63 <tr>
64 <th scope="row">
65 <?php _e( 'Notifications', 'jetpack' ); ?>
66 </th>
67 <td>
68 <label for="receive_jetpack_monitor_notification">
69 <input type="checkbox" name="receive_jetpack_monitor_notification" id="receive_jetpack_monitor_notification" value="receive_jetpack_monitor_notification"<?php checked( self::user_receives_notifications() ); ?> />
70 <span><?php _e( 'Receive Monitor Email Notifications.' , 'jetpack'); ?></span>
71 </label>
72 <p class="description"><?php printf( __( 'Emails will be sent to %s (<a href="%s">Edit</a>)', 'jetpack' ), $user_email, 'https://wordpress.com/settings/account/'); ?></p>
73 </td>
74 </tr>
75 </table>
76 <?php submit_button(); ?>
77 </form>
78 <?php else : ?>
79 <p><?php _e( 'This profile is not currently linked to a WordPress.com Profile.', 'jetpack' ); ?></p>
80 <?php endif; ?>
81 </div>
82 <?php
83 }
84
85 public function is_active() {
86 Jetpack::load_xml_rpc_client();
87 $xml = new Jetpack_IXR_Client( array(
88 'user_id' => get_current_user_id()
89 ) );
90 $xml->query( 'jetpack.monitor.isActive' );
91 if ( $xml->isError() ) {
92 wp_die( sprintf( '%s: %s', $xml->getErrorCode(), $xml->getErrorMessage() ) );
93 }
94 return $xml->getResponse();
95 }
96
97 public function update_option_receive_jetpack_monitor_notification( $value ) {
98 Jetpack::load_xml_rpc_client();
99 $xml = new Jetpack_IXR_Client( array(
100 'user_id' => get_current_user_id()
101 ) );
102 $xml->query( 'jetpack.monitor.setNotifications', (bool) $value );
103
104 if ( $xml->isError() ) {
105 wp_die( sprintf( '%s: %s', $xml->getErrorCode(), $xml->getErrorMessage() ) );
106 }
107
108 // To be used only in Jetpack_Core_Json_Api_Endpoints::get_remote_value.
109 update_option( 'monitor_receive_notifications', (bool) $value );
110
111 return true;
112 }
113
114 /**
115 * Checks the status of notifications for current Jetpack site user.
116 *
117 * @since 2.8
118 * @since 4.1.0 New parameter $die_on_error.
119 *
120 * @param bool $die_on_error Whether to issue a wp_die when an error occurs or return a WP_Error object.
121 *
122 * @return boolean|WP_Error
123 */
124 static function user_receives_notifications( $die_on_error = true ) {
125 Jetpack::load_xml_rpc_client();
126 $xml = new Jetpack_IXR_Client( array(
127 'user_id' => get_current_user_id()
128 ) );
129 $xml->query( 'jetpack.monitor.isUserInNotifications' );
130
131 if ( $xml->isError() ) {
132 if ( $die_on_error ) {
133 wp_die( sprintf( '%s: %s', $xml->getErrorCode(), $xml->getErrorMessage() ) );
134 } else {
135 return new WP_Error( $xml->getErrorCode(), $xml->getErrorMessage(), array( 'status' => 400 ) );
136 }
137 }
138 return $xml->getResponse();
139 }
140
141 public function activate_monitor() {
142 Jetpack::load_xml_rpc_client();
143 $xml = new Jetpack_IXR_Client( array(
144 'user_id' => get_current_user_id()
145 ) );
146
147 $xml->query( 'jetpack.monitor.activate' );
148
149 if ( $xml->isError() ) {
150 wp_die( sprintf( '%s: %s', $xml->getErrorCode(), $xml->getErrorMessage() ) );
151 }
152 return true;
153 }
154
155 public function deactivate_monitor() {
156 Jetpack::load_xml_rpc_client();
157 $xml = new Jetpack_IXR_Client( array(
158 'user_id' => get_current_user_id()
159 ) );
160
161 $xml->query( 'jetpack.monitor.deactivate' );
162
163 if ( $xml->isError() ) {
164 wp_die( sprintf( '%s: %s', $xml->getErrorCode(), $xml->getErrorMessage() ) );
165 }
166 return true;
167 }
168
169 /*
170 * Returns date of the last downtime.
171 *
172 * @since 4.0.0
173 * @return date in YYYY-MM-DD HH:mm:ss format
174 */
175 public function monitor_get_last_downtime() {
176 // if ( $last_down = get_transient( 'monitor_last_downtime' ) ) {
177 // return $last_down;
178 // }
179
180 Jetpack::load_xml_rpc_client();
181 $xml = new Jetpack_IXR_Client( array(
182 'user_id' => get_current_user_id()
183 ) );
184
185 $xml->query( 'jetpack.monitor.getLastDowntime' );
186
187 if ( $xml->isError() ) {
188 return new WP_Error( 'monitor-downtime', $xml->getErrorMessage() );
189 }
190
191 set_transient( 'monitor_last_downtime', $xml->getResponse(), 10 * MINUTE_IN_SECONDS );
192
193 return $xml->getResponse();
194 }
195
196 }
197
198 new Jetpack_Monitor;
199