PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 2.6.1
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v2.6.1
4.4.2 4.4.1 4.4.0 4.3.3 4.3.2 4.3.1 4.3.0 4.2.3 4.2.2 4.2.1 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.10 1.1.11 1.1.12 1.1.13 1.1.14 1.1.15 1.1.16 1.1.17 1.1.18 1.1.19 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8 1.1.9 1.10.0 1.10.1 1.10.2 1.10.3 1.10.4 1.11.0 1.11.1 1.11.2 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.4.0 1.4.1 1.4.2 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.9.0 1.9.1 1.9.2 1.9.3 1.9.4 1.9.5 2.0.0 2.0.1 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.10.0 2.10.1 2.11.0 2.11.1 2.11.2 2.11.3 2.11.4 2.12.0 2.13.0 2.14.0 2.14.1 2.15.0 2.15.1 2.16.0 2.16.1 2.16.2 2.16.3 2.17.0 2.17.1 2.17.2 2.18.0 2.19.0 2.19.2 2.19.3 2.19.4 2.2.0 2.2.1 2.20.0 2.20.1 2.20.2 2.20.3 2.20.4 2.20.5 2.20.6 2.21.0 2.22.0 2.22.1 2.23.0 2.24.0 2.25.0 2.25.1 2.25.2 2.26.0 2.27.0 2.27.1 2.28.0 2.29.0 2.29.1 2.29.2 2.29.3 2.29.4 2.3.0 2.3.1 2.30.0 2.31.0 2.31.1 2.31.2 2.31.3 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.40.0 2.40.1 2.5.0 2.5.1 2.5.2 2.6.0 2.6.1 2.6.2 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.8.2 2.8.3 2.8.4 2.9.0 3.0.0 3.0.0-RC1 3.0.0-RC2 3.0.0-beta1 3.0.0-beta2 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.10.0 3.10.1 3.11.0 3.12.0 3.13.0 3.13.1 3.13.2 3.13.3 3.13.4 3.14.0 3.15.0 3.15.1 3.15.2 3.15.3 3.15.4 3.15.5 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.16.6 3.16.7 3.16.8 3.17.0 3.17.1 3.17.2 3.17.3 3.17.4 3.17.5 3.17.6 3.18.0 3.19.0 3.19.1 3.19.2 3.2.0 3.2.1 3.2.2 3.20.0 3.20.1 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.4.3 3.5.0 3.5.1 3.5.2 3.5.3 3.6.0 3.6.1 3.6.2 3.7.0 3.7.1 3.7.2 3.7.3 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.9.0 4.0.0 4.0.1 4.0.2 4.0.3 trunk 4.1.0 0.2.19.1 4.1.1 1.0.0 4.2.0 1.0.1 1.0.2
surecart / app / src / WordPress / HealthService.php
surecart / app / src / WordPress Last commit date
Admin 2 years ago Assets 2 years ago Pages 3 years ago PostTypes 3 years ago Shortcodes 2 years ago Sitemap 3 years ago Templates 2 years ago Users 3 years ago ActionsService.php 3 years ago CompatibilityService.php 2 years ago HealthService.php 2 years ago PluginService.php 3 years ago PluginServiceProvider.php 2 years ago RecaptchaValidationService.php 2 years ago ThemeService.php 3 years ago ThemeServiceProvider.php 3 years ago TranslationsServiceProvider.php 3 years ago
HealthService.php
192 lines
1 <?php
2
3 namespace SureCart\WordPress;
4
5 use SureCart\Models\Account;
6 use SureCart\Models\ApiToken;
7 use SureCart\Models\IncomingWebhook;
8 use SureCart\Models\RegisteredWebhook;
9 use SureCart\Support\Server;
10
11 class HealthService {
12 /**
13 * Bootstrap the service.
14 *
15 * @return void
16 */
17 public function bootstrap() {
18 add_filter( 'debug_information', [ $this, 'debugInfo' ] );
19 add_filter( 'site_status_tests', [ $this, 'tests' ] );
20 }
21
22 /**
23 * Add debug information.
24 *
25 * @param array $debug_info Debug List.
26 *
27 * @return array
28 */
29 public function debugInfo( $debug_info ) {
30 $total_failed = IncomingWebhook::whereNull( 'processed_at' )->andWhere( 'created_at', '<', ( new \DateTime() )->modify( '-30 minutes' )->format( 'Y-m-d H:i:s' ) )->count();
31 $debug_info['surecart'] = array(
32 'label' => __( 'SureCart', 'surecart' ),
33 'fields' => array(
34 'api' => array(
35 'label' => __( 'API Connectivity', 'surecart' ),
36 'value' => (bool) ApiToken::get() ? __( 'Connected', 'surecart' ) : __( 'Not connected', 'surecart' ),
37 'private' => false,
38 ),
39 'store_id' => array(
40 'label' => __( 'Store ID', 'surecart' ),
41 'value' => \SureCart::account()->id,
42 'private' => false,
43 ),
44 'url' => array(
45 'label' => __( 'Store URL', 'surecart' ),
46 'value' => \SureCart::account()->url,
47 'private' => false,
48 ),
49 'webhooks_processing' => array(
50 'label' => __( 'Webhooks Processing', 'surecart' ),
51 'value' => ! empty( $total_failed ) ? sprintf( __( '%d Unprocessed webhooks', 'surecart' ), $total_failed ) : __( 'Working', 'surecart' ),
52 'private' => false,
53 ),
54 ),
55 );
56 return $debug_info;
57 }
58
59 /**
60 * Register tests for the Status Page
61 *
62 * @param array $tests List of tests.
63 *
64 * @return array
65 */
66 public function tests( $tests ) {
67 $tests['async']['surecart_api_test'] = array(
68 'label' => __( 'SureCart', 'surecart' ) . ' ' . __( 'API connectivity', 'surecart' ),
69 'test' => rest_url( 'surecart/v1/site-health/api-connectivity' ),
70 'has_rest' => true,
71 'async_direct_test' => [ $this, 'apiTest' ],
72 );
73
74 $is_localhost = ( new Server( get_home_url() ) )->isLocalHost();
75 if ( ! $is_localhost ) {
76 $tests['direct']['surecart_webhook_test'] = array(
77 'label' => __( 'SureCart', 'neve' ) . ' ' . __( 'Webhooks Processing', 'surecart' ),
78 'test' => [ $this, 'webhooksProcessingTest' ],
79 );
80 $tests['async']['surecart_webhooks_test'] = array(
81 'label' => __( 'SureCart', 'surecart' ) . ' ' . __( 'Webhooks Connection', 'surecart' ),
82 'test' => rest_url( 'surecart/v1/site-health/webhooks' ),
83 'has_rest' => true,
84 'async_direct_test' => [ $this, 'webhooksTest' ],
85 );
86 }
87
88 return $tests;
89 }
90
91 /**
92 * Neve API test pretty response
93 *
94 * @return array
95 */
96 public function apiTest() {
97 $account = Account::find();
98
99 return array(
100 'label' => __( 'SureCart', 'surecart' ) . ' ' . __( 'API connectivity', 'surecart' ),
101 'status' => $account->id ? 'good' : 'critical',
102 'badge' => array(
103 'label' => __( 'SureCart', 'surecart' ),
104 'color' => $account->id ? 'blue' : 'red',
105 ),
106 'description' => sprintf(
107 '<p>%s</p>',
108 $account->id ? __( 'API for is reachable.', 'surecart' ) : __( 'API for is not reachable.', 'surecart' )
109 ),
110 'actions' => '',
111 'test' => 'surecart_api_test',
112 );
113 }
114
115 /**
116 * Check that webhooks are processing normally.
117 *
118 * @return array
119 */
120 public function webhooksProcessingTest() {
121 $total_failed = IncomingWebhook::whereNull( 'processed_at' )->andWhere( 'created_at', '<', ( new \DateTime() )->modify( '-30 minutes' )->format( 'Y-m-d H:i:s' ) )->count();
122 $has_errors = ! empty( $total_failed );
123
124 return array(
125 'label' => $has_errors ? __( 'SureCart Webhooks Processing Error', 'surecart' ) : __( 'SureCart Webhooks Processing', 'surecart' ),
126 'status' => $has_errors ? 'critical' : 'good',
127 'badge' => array(
128 'label' => __( 'SureCart', 'surecart' ),
129 'color' => $has_errors ? 'red' : 'blue',
130 ),
131 'description' => sprintf(
132 '<p>%s</p>',
133 $has_errors ? sprintf( __( '%d of your webhooks failed to process on your site. Please check your error logs to make sure errors did not occur in webhook processing.', 'surecart' ), (int) $total_failed ) : __( 'Webhook processing is working normally.', 'surecart' )
134 ),
135 'actions' => $has_errors ? sprintf(
136 '<a href="%s" class="button" target="_blank">%s</a>',
137 esc_url( admin_url( 'admin.php?page=sc-settings&tab=connection' ) ),
138 __( 'Troubleshoot Connection', 'surecart' )
139 ) : '',
140 'test' => 'surecart_webhooks_processing_test',
141 );
142 }
143
144 /**
145 * Neve API test pretty response
146 *
147 * @return array
148 */
149 public function webhooksTest() {
150 // clear account cache.
151 \SureCart::account()->clearCache();
152
153 $webhook = RegisteredWebhook::get();
154
155 // Defaults.
156 $description = __( 'Webhooks are working normally.', 'surecart' );
157 $label = __( 'SureCart', 'surecart' ) . ' ' . __( 'Webhooks', 'surecart' );
158 $status = 'good';
159
160 if ( empty( $webhook->enabled ) ) {
161 $status = 'critical';
162 $label = __( 'SureCart', 'surecart' ) . ' ' . __( 'webhook is disabled.', 'surecart' );
163 $description = __( 'The SureCart webhook is currently disabled which can cause issues with integrations. This can happen automatically due to repeated errors, or could have been disabled manually. Please re-enable the webhook and troubleshoot the issue if integrations are important to your store.', 'surecart' );
164 } elseif ( ! empty( $webhook->erroring_grace_period_ends_at ) ) {
165 $status = 'critical';
166 $label = __( 'SureCart', 'surecart' ) . ' ' . __( 'webhook connection is being monitored for errors.', 'surecart' );
167 $description = __( 'The SureCart webhook has received repeated errors.', 'surecart' );
168 $description .= ' ' . $webhook->erroring_grace_period_ends_at > time() ? sprintf( wp_kses( 'These errors will automatically attempt to be retried, however, we will disable this in <strong>%s</strong> if it continues to fail.', 'surecart' ), human_time_diff( $webhook->erroring_grace_period_ends_at ) ) : sprintf( wp_kses( 'It was automatically disabled %s ago.', 'surecart' ), human_time_diff( $webhook->erroring_grace_period_ends_at ) );
169 $description .= ' ' . __( 'Please troubleshoot the issue if integrations are important to your store.', 'surecart' );
170 }
171
172 return array(
173 'label' => $label,
174 'status' => $status,
175 'badge' => array(
176 'label' => __( 'SureCart', 'surecart' ),
177 'color' => 'critical' === $status ? 'red' : 'blue',
178 ),
179 'description' => sprintf(
180 '<p>%s</p>',
181 $description
182 ),
183 'actions' => 'critical' === $status ? sprintf(
184 '<a href="%s" class="button" target="_blank">%s</a>',
185 esc_url( untrailingslashit( SURECART_APP_URL ) . '/developer' ),
186 __( 'Troubleshoot Connection', 'surecart' )
187 ) : '',
188 'test' => 'surecart_webhooks_test',
189 );
190 }
191 }
192