PluginProbe ʕ •ᴥ•ʔ
Booking for Appointments and Events Calendar – Amelia / trunk
Booking for Appointments and Events Calendar – Amelia vtrunk
2.4.4 2.4.3 2.4.2 2.4.1 2.4 trunk 1.2.1 1.2.10 1.2.11 1.2.12 1.2.13 1.2.14 1.2.15 1.2.16 1.2.17 1.2.18 1.2.19 1.2.2 1.2.20 1.2.21 1.2.22 1.2.23 1.2.24 1.2.25 1.2.26 1.2.27 1.2.28 1.2.29 1.2.3 1.2.30 1.2.31 1.2.32 1.2.33 1.2.34 1.2.35 1.2.36 1.2.37 1.2.38 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 2.0 2.0.1 2.0.2 2.1 2.1.1 2.1.2 2.1.3 2.2 2.2.1 2.3
ameliabooking / vendor / wordpress / mcp-adapter / includes / Infrastructure / Observability / ErrorLogMcpObservabilityHandler.php
ameliabooking / vendor / wordpress / mcp-adapter / includes / Infrastructure / Observability Last commit date
Contracts 1 month ago ConsoleObservabilityHandler.php 1 month ago ErrorLogMcpObservabilityHandler.php 1 month ago FailureReason.php 1 month ago McpObservabilityHelperTrait.php 1 month ago NullMcpObservabilityHandler.php 1 month ago
ErrorLogMcpObservabilityHandler.php
80 lines
1 <?php
2 /**
3 * ErrorLogMcpObservabilityHandler class for logging MCP observability metrics to PHP error log.
4 *
5 * @package McpAdapter
6 */
7
8 declare( strict_types=1 );
9
10 namespace WP\MCP\Infrastructure\Observability;
11
12 /**
13 * Class ErrorLogMcpObservabilityHandler
14 *
15 * This class handles observability tracking by writing metrics to the PHP error log.
16 * This provides a simple way to track MCP metrics without external dependencies.
17 *
18 * @package WP\MCP\ObservabilityHandlers
19 */
20 class ErrorLogMcpObservabilityHandler implements Contracts\McpObservabilityHandlerInterface {
21
22 use McpObservabilityHelperTrait;
23
24 /**
25 * Emit a countable event for tracking with optional timing data.
26 *
27 * @param string $event The event name to record.
28 * @param array $tags Optional tags to attach to the event.
29 * @param float|null $duration_ms Optional duration in milliseconds for timing measurements.
30 *
31 * @return void
32 */
33 public function record_event( string $event, array $tags = array(), ?float $duration_ms = null ): void {
34 $formatted_event = self::format_metric_name( $event );
35 $merged_tags = self::merge_tags( $tags );
36 $formatted_tags = self::format_tags( $merged_tags );
37
38 // Include timing data if provided
39 if ( null !== $duration_ms ) {
40 $log_message = sprintf(
41 '[MCP Observability] EVENT %s %.2fms %s',
42 $formatted_event,
43 $duration_ms,
44 $formatted_tags
45 );
46 } else {
47 $log_message = sprintf(
48 '[MCP Observability] EVENT %s %s',
49 $formatted_event,
50 $formatted_tags
51 );
52 }
53
54 error_log( $log_message ); // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_error_log
55 }
56
57 /**
58 * Format tags array into a readable string for logging.
59 *
60 * @param array $tags The tags to format.
61 *
62 * @return string
63 */
64 private static function format_tags( array $tags ): string {
65 if ( empty( $tags ) ) {
66 return '';
67 }
68
69 $formatted = array_map(
70 static function ( $key, $value ) {
71 return sprintf( '%s=%s', $key, $value );
72 },
73 array_keys( $tags ),
74 array_values( $tags )
75 );
76
77 return '[' . implode( ',', $formatted ) . ']';
78 }
79 }
80