@@ -52,6 +52,10 @@ public function run(): void {
52
52
* Setup
53
53
*/
54
54
55
+ // Start output buffering as any PHP notice would return 503 error code
56
+ // if printed before setting headers.
57
+ ob_start ();
58
+
55
59
// Start profiling as early as possible.
56
60
$ this ->profile = new Profile ();
57
61
$ this ->status = new Status ();
@@ -101,15 +105,20 @@ public function run(): void {
101
105
102
106
$ slows = $ this ->profile ->getByDuration (1000 , NULL );
103
107
$ payloads = $ this ->profile2logs ($ slows , 'slow ' );
104
- $ this ->logErrors ($ payloads );
108
+ $ this ->logErrors ($ payloads, ' notice ' );
105
109
106
110
$ payloads = $ this ->status ->getBySeverity ('warning ' );
107
111
$ payloads = $ this ->status2logs ($ payloads , 'warning ' );
108
- $ this ->logErrors ($ payloads );
112
+ $ this ->logErrors ($ payloads, ' warning ' );
109
113
110
114
$ payloads = $ this ->status ->getBySeverity ('error ' );
111
115
$ payloads = $ this ->status2logs ($ payloads , 'error ' );
112
- $ this ->logErrors ($ payloads );
116
+ $ this ->logErrors ($ payloads , 'error ' );
117
+
118
+ // Stop buffering before setting headers. After that it doesn't matter
119
+ // if there's any output as script is not going to give 503 error code
120
+ // anymore.
121
+ $ buffered_output = ob_get_clean ();
113
122
114
123
if (!empty ($ payloads )) {
115
124
$ code = 500 ;
@@ -142,6 +151,10 @@ public function run(): void {
142
151
$ profiling_tbl = $ this ->profile ->getTextTable (PHP_EOL );
143
152
print <<<TXT
144
153
154
+ <pre style="color:red">
155
+ $ buffered_output
156
+ </pre>
157
+
145
158
<pre>
146
159
$ status_tbl
147
160
</pre>
@@ -279,14 +292,17 @@ public function profile2logs(array $slows, string $status): array {
279
292
* Log errors according to the environment.
280
293
*
281
294
* We recognize following envs:
295
+ * - drupal -> Drupal logger.
282
296
* - silta -> stderr.
283
297
* - lando -> stderr.
284
298
* - the rest -> syslog().
285
299
*
286
300
* @param array $payloads
287
301
* Array of payload arrays, containing error message and additional info.
302
+ * @param string $severity
303
+ * The severity of Drupal logger (method name).
288
304
*/
289
- public function logErrors (array $ payloads ): void {
305
+ public function logErrors (array $ payloads, string $ severity ): void {
290
306
291
307
if (!empty (getenv ('TESTING ' ))) {
292
308
$ logger = function (string $ msg ) {
@@ -297,20 +313,32 @@ public function logErrors(array $payloads): void {
297
313
$ _logs [] = $ msg ;
298
314
};
299
315
}
316
+ elseif (method_exists ('\Drupal ' , 'logger ' )) {
317
+ $ logger = function (string $ msg ) use ($ severity ) {
318
+ try {
319
+ // Replace curly braces with double parentheses because Drupal logging
320
+ // is unable to handle JSON.
321
+ $ msg = str_replace (['{ ' , '} ' ], ['(( ' , ')) ' ], $ msg );
322
+ \Drupal::logger ('drupal_ping ' )->{$ severity }($ msg );
323
+ }
324
+ catch (\Exception $ e ) {
325
+ }
326
+ };
327
+ }
300
328
elseif (!empty (getenv ('SILTA_CLUSTER ' )) || !empty (getenv ('LANDO ' ))) {
301
329
$ logger = function (string $ msg ) {
302
- error_log ($ msg );
330
+ error_log (" ping: $ msg" );
303
331
};
304
332
}
305
333
else {
306
334
$ logger = function (string $ msg ) {
307
- syslog (LOG_ERR | LOG_LOCAL6 , $ msg );
335
+ syslog (LOG_ERR | LOG_LOCAL6 , " ping: $ msg" );
308
336
};
309
337
}
310
338
311
339
foreach ($ payloads as $ payload ) {
312
340
$ payload = json_encode ($ payload );
313
- $ logger (" ping: $ payload" );
341
+ $ logger ($ payload );
314
342
}
315
343
}
316
344
@@ -709,7 +737,7 @@ protected function check2(): void {
709
737
710
738
// We are not relying on Memcache or Memcached classes.
711
739
// For speed and simplicity we use just basic networking.
712
- $ socket = fsockopen ($ s ['host ' ], $ s ['port ' ], $ errno , $ errstr , 1 );
740
+ $ socket = @ fsockopen ($ s ['host ' ], $ s ['port ' ], $ errno , $ errstr , 1 );
713
741
if (!empty ($ errstr )) {
714
742
$ msgs [] = [
715
743
'host ' => $ s ['host ' ],
@@ -750,7 +778,7 @@ protected function check2(): void {
750
778
}
751
779
752
780
if ($ good_count < 1 && $ bad_count > 0 ) {
753
- $ this ->setStatus ('error ' , 'Connection errors. ' , ['errors ' => $ msgs ]);
781
+ $ this ->setStatus ('warning ' , 'Connection errors. ' , ['errors ' => $ msgs ]);
754
782
return ;
755
783
}
756
784
0 commit comments