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 |