PluginProbe ʕ •ᴥ•ʔ
CommerceBird – AI Command Center, ERP Integrations & B2B for WooCommerce (Zoho, Exact Online). / trunk
CommerceBird – AI Command Center, ERP Integrations & B2B for WooCommerce (Zoho, Exact Online). vtrunk
3.0.3 3.0.2 3.0.1 trunk 2.2.14 2.2.15 2.2.16 2.2.17 2.2.18 2.2.19 2.3.0 2.3.1 2.3.10 2.3.11 2.3.12 2.3.13 2.3.14 2.3.2 2.3.3 2.3.4 2.3.5 2.3.6 2.3.7 2.3.8 2.3.9 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.5.0 2.5.1 2.5.2 2.6.0 2.6.1 2.6.2 2.6.3 2.6.4 2.6.5 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.7.6 2.7.7 2.7.8 2.7.9 2.7.91 2.7.92 2.7.93 2.8.0 2.8.1 2.8.2 2.8.3 2.8.4 2.8.5 2.9.0 2.9.1 2.9.2 2.9.3 3.0.0
commercebird / vendor / wordpress / mcp-adapter / includes / Infrastructure / Observability / ErrorLogMcpObservabilityHandler.php
commercebird / vendor / wordpress / mcp-adapter / includes / Infrastructure / Observability Last commit date
Contracts 2 months ago ConsoleObservabilityHandler.php 2 months ago ErrorLogMcpObservabilityHandler.php 2 months ago FailureReason.php 2 months ago McpObservabilityHelperTrait.php 2 months ago NullMcpObservabilityHandler.php 2 months 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