Skip to content

Commit c665ef2

Browse files
committed
PWA-1311: New Relic is not being given useful transaction names for graphql requests
- update handling query parse errors
1 parent 95eefe0 commit c665ef2

File tree

3 files changed

+54
-37
lines changed

3 files changed

+54
-37
lines changed

app/code/Magento/GraphQl/Helper/Query/Logger/LogData.php

Lines changed: 25 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
use Magento\Framework\App\Response\Http as HttpResponse;
1818
use Magento\Framework\GraphQl\Schema;
1919
use Magento\GraphQl\Model\Query\Logger\LoggerInterface;
20+
use Magento\Ui\Block\Logger;
2021

2122
/**
2223
* Helper class to collect data for logging GraphQl requests
@@ -40,13 +41,15 @@ public function getLogData(
4041
) : array {
4142
$logData = [];
4243
$logData = array_merge($logData, $this->gatherRequestInformation($request));
43-
$complexity = $this->getFieldCount($data['query'] ?? '');
44-
if ($complexity !== -1) {
44+
45+
try {
46+
$complexity = $this->getFieldCount($data['query'] ?? '');
4547
$logData[LoggerInterface::COMPLEXITY] = $complexity;
4648
if ($schema) {
4749
$logData = array_merge($logData, $this->gatherQueryInformation($schema));
4850
}
49-
}
51+
} catch (\Exception $exception) {}
52+
5053
if ($response) {
5154
$logData = array_merge($logData, $this->gatherResponseInformation($response));
5255
}
@@ -102,6 +105,10 @@ private function gatherResponseInformation(HttpResponse $response) : array
102105
($response->getHeader('X-Magento-Tags') && $response->getHeader('X-Magento-Tags') !== '')
103106
? 'true'
104107
: 'false';
108+
$responseInformation[LoggerInterface::X_MAGENTO_CACHE_ID] =
109+
$response->getHeader('X-Magento-Cache-Id')
110+
? $response->getHeader('X-Magento-Cache_Id')->getFieldValue()
111+
: '';
105112
$responseInformation[LoggerInterface::HTTP_RESPONSE_CODE] = $response->getHttpResponseCode();
106113
return $responseInformation;
107114
}
@@ -113,27 +120,25 @@ private function gatherResponseInformation(HttpResponse $response) : array
113120
*
114121
* @param string $query
115122
* @return int
123+
* @throws SyntaxError
124+
* @throws /Exception
116125
*/
117126
private function getFieldCount(string $query): int
118127
{
119-
try {
120-
if (!empty($query)) {
121-
$totalFieldCount = 0;
122-
$queryAst = Parser::parse(new Source($query ?: '', 'GraphQL'));
123-
Visitor::visit(
124-
$queryAst,
125-
[
126-
'leave' => [
127-
NodeKind::FIELD => function (Node $node) use (&$totalFieldCount) {
128-
$totalFieldCount++;
129-
}
130-
]
128+
if (!empty($query)) {
129+
$totalFieldCount = 0;
130+
$queryAst = Parser::parse(new Source($query ?: '', 'GraphQL'));
131+
Visitor::visit(
132+
$queryAst,
133+
[
134+
'leave' => [
135+
NodeKind::FIELD => function (Node $node) use (&$totalFieldCount) {
136+
$totalFieldCount++;
137+
}
131138
]
132-
);
133-
return $totalFieldCount;
134-
}
135-
} catch (\Exception $exception) {
136-
return -1;
139+
]
140+
);
141+
return $totalFieldCount;
137142
}
138143
return 0;
139144
}

app/code/Magento/GraphQl/Model/Query/Logger/LoggerInterface.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ interface LoggerInterface
2525
const COMPLEXITY = 'GraphQlComplexity';
2626
const REQUEST_LENGTH = 'GraphQlRequestLength';
2727
const HTTP_RESPONSE_CODE = 'GraphQlHttpResponseCode';
28+
const X_MAGENTO_CACHE_ID = 'GraphQlXMagentoCacheId';
2829

2930
/**
3031
* Execute logger

dev/tests/integration/testsuite/Magento/GraphQl/Helper/Query/Logger/LogDataTest.php

Lines changed: 28 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,8 @@ public function getQueryInformationDataProvider()
123123
'Content-length' => 123
124124
],
125125
'response' => [
126-
'X-Magento-Tags' => 'FPC'
126+
'X-Magento-Tags' => 'FPC',
127+
'X-Magento-Cache-Id' => '1234'
127128
]
128129
],
129130
'expectedResult' => [
@@ -137,7 +138,8 @@ public function getQueryInformationDataProvider()
137138
LoggerInterface::NUMBER_OF_OPERATIONS => 1,
138139
LoggerInterface::OPERATION_NAMES => 'products',
139140
LoggerInterface::COMPLEXITY => 5,
140-
LoggerInterface::HTTP_RESPONSE_CODE => 200
141+
LoggerInterface::HTTP_RESPONSE_CODE => 200,
142+
LoggerInterface::X_MAGENTO_CACHE_ID => '1234'
141143
]
142144
],
143145
[ // query with no headers
@@ -153,23 +155,20 @@ public function getQueryInformationDataProvider()
153155
}
154156
}
155157
QUERY,
156-
'headers' => [
157-
'response' => [
158-
'X-Magento-Tags' => 'FPC'
159-
]
160-
],
158+
'headers' => [],
161159
'expectedResult' => [
162160
LoggerInterface::HTTP_METHOD => 'POST',
163161
LoggerInterface::STORE_HEADER => '',
164162
LoggerInterface::CURRENCY_HEADER => '',
165163
LoggerInterface::HAS_AUTH_HEADER => 'false',
166-
LoggerInterface::IS_CACHEABLE => 'true',
164+
LoggerInterface::IS_CACHEABLE => 'false',
167165
LoggerInterface::REQUEST_LENGTH => '',
168166
LoggerInterface::HAS_MUTATION => 'false',
169167
LoggerInterface::NUMBER_OF_OPERATIONS => 1,
170168
LoggerInterface::OPERATION_NAMES => 'products',
171169
LoggerInterface::COMPLEXITY => 5,
172-
LoggerInterface::HTTP_RESPONSE_CODE => 200
170+
LoggerInterface::HTTP_RESPONSE_CODE => 200,
171+
LoggerInterface::X_MAGENTO_CACHE_ID => ''
173172
]
174173
],
175174
[ // query with bad operation name
@@ -187,7 +186,8 @@ public function getQueryInformationDataProvider()
187186
QUERY,
188187
'headers' => [
189188
'response' => [
190-
'X-Magento-Tags' => 'FPC'
189+
'X-Magento-Tags' => 'FPC',
190+
'X-Magento-Cache-Id' => '1234'
191191
]
192192
],
193193
'expectedResult' => [
@@ -201,7 +201,8 @@ public function getQueryInformationDataProvider()
201201
LoggerInterface::NUMBER_OF_OPERATIONS => 0,
202202
LoggerInterface::OPERATION_NAMES => 'operationNameNotFound',
203203
LoggerInterface::COMPLEXITY => 5,
204-
LoggerInterface::HTTP_RESPONSE_CODE => 200
204+
LoggerInterface::HTTP_RESPONSE_CODE => 200,
205+
LoggerInterface::X_MAGENTO_CACHE_ID => '1234'
205206
]
206207
],
207208
[ // bad query
@@ -217,7 +218,8 @@ public function getQueryInformationDataProvider()
217218
QUERY,
218219
'headers' => [
219220
'response' => [
220-
'X-Magento-Tags' => 'FPC'
221+
'X-Magento-Tags' => 'FPC',
222+
'X-Magento-Cache-Id' => '1234'
221223
]
222224
],
223225
'expectedResult' => [
@@ -227,7 +229,8 @@ public function getQueryInformationDataProvider()
227229
LoggerInterface::HAS_AUTH_HEADER => 'false',
228230
LoggerInterface::IS_CACHEABLE => 'true',
229231
LoggerInterface::REQUEST_LENGTH => '',
230-
LoggerInterface::HTTP_RESPONSE_CODE => 200
232+
LoggerInterface::HTTP_RESPONSE_CODE => 200,
233+
LoggerInterface::X_MAGENTO_CACHE_ID => '1234'
231234
]
232235
],
233236
[ // mutation with all headers
@@ -246,6 +249,9 @@ public function getQueryInformationDataProvider()
246249
'Currency' => 'USD',
247250
'Authorization' => '1234',
248251
'Content-length' => 123
252+
],
253+
'response' => [
254+
'X-Magento-Cache-Id' => '1234'
249255
]
250256
],
251257
'expectedResult' => [
@@ -259,7 +265,8 @@ public function getQueryInformationDataProvider()
259265
LoggerInterface::NUMBER_OF_OPERATIONS => 1,
260266
LoggerInterface::OPERATION_NAMES => 'placeOrder',
261267
LoggerInterface::COMPLEXITY => 3,
262-
LoggerInterface::HTTP_RESPONSE_CODE => 200
268+
LoggerInterface::HTTP_RESPONSE_CODE => 200,
269+
LoggerInterface::X_MAGENTO_CACHE_ID => '1234'
263270
]
264271
],
265272
[ // mutation with no headers
@@ -284,7 +291,8 @@ public function getQueryInformationDataProvider()
284291
LoggerInterface::NUMBER_OF_OPERATIONS => 1,
285292
LoggerInterface::OPERATION_NAMES => 'placeOrder',
286293
LoggerInterface::COMPLEXITY => 3,
287-
LoggerInterface::HTTP_RESPONSE_CODE => 200
294+
LoggerInterface::HTTP_RESPONSE_CODE => 200,
295+
LoggerInterface::X_MAGENTO_CACHE_ID => ''
288296
]
289297
],
290298
[ // multiple queries
@@ -312,7 +320,9 @@ public function getQueryInformationDataProvider()
312320
'Content-length' => 123
313321
],
314322
'response' => [
315-
'X-Magento-Tags' => 'FPC'
323+
'X-Magento-Tags' => 'FPC',
324+
'X-Magento-Cache-Id' => '1234'
325+
316326
]
317327
],
318328
'expectedResult' => [
@@ -326,7 +336,8 @@ public function getQueryInformationDataProvider()
326336
LoggerInterface::NUMBER_OF_OPERATIONS => 2,
327337
LoggerInterface::OPERATION_NAMES => 'cart,products',
328338
LoggerInterface::COMPLEXITY => 8,
329-
LoggerInterface::HTTP_RESPONSE_CODE => 200
339+
LoggerInterface::HTTP_RESPONSE_CODE => 200,
340+
LoggerInterface::X_MAGENTO_CACHE_ID => '1234'
330341
]
331342
],
332343
];

0 commit comments

Comments
 (0)