Set api-request log http.request_headers properly
authorAndrew Otto <acotto@gmail.com>
Mon, 4 Mar 2019 20:47:01 +0000 (15:47 -0500)
committerAndrew Otto <acotto@gmail.com>
Mon, 4 Mar 2019 21:12:39 +0000 (16:12 -0500)
$request->getHeader( 'Api-user-agent' ) was returning false,
and we can only accept string header values.

Bug: T214080
Change-Id: I3de8a455ad7dab9e3a67e24439e95f4968c93243

includes/api/ApiMain.php

index 8255269..fdedc45 100644 (file)
@@ -1654,16 +1654,22 @@ class ApiMain extends ApiBase {
                        'http' => [
                                'method' => $request->getMethod(),
                                'client_ip' => $request->getIP(),
-                               'request_headers' => [
-                                       'user-agent' => $request->getHeader( 'User-agent' ),
-                                       'api-user-agent' => $request->getHeader( 'Api-user-agent' )
-                               ],
+                               'request_headers' => []
                        ],
                        'database' => wfWikiID(),
                        'backend_time_ms' => (int)round( $time * 1000 ),
                        'params' => []
                ];
 
+               // If set, these headers will be logged in http.request_headers.
+               // A http.request_headers entry should not be set if the header was not provided.
+               if ( $request->getHeader( 'User-agent' ) ) {
+                       $logCtx['http']['request_headers']['user-agent'] = $request->getHeader( 'User-agent' );
+               }
+               if ( $request->getHeader( 'Api-user-agent' ) ) {
+                       $logCtx['http']['request_headers']['api-user-agent'] = $request->getHeader( 'Api-user-agent' );
+               }
+
                $logCtx['meta']['request_id'] =
                        $logCtx['http']['request_headers']['x-request-id'] = WebRequest::getRequestId();