Skip to content

Commit 4cf0829

Browse files
committed
Merge remote-tracking branch 'local/ACP2E-1744' into PR_Jun_06_2023
2 parents 0fe805f + acdf70a commit 4cf0829

File tree

4 files changed

+59
-16
lines changed

4 files changed

+59
-16
lines changed

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

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,9 @@ public function getLogData(
5959
try {
6060
$complexity = $this->getFieldCount($data['parsedQuery'] ?? $data['query'] ?? '');
6161
$logData[LoggerInterface::COMPLEXITY] = $complexity;
62+
$logData[LoggerInterface::TOP_LEVEL_OPERATION_NAME] =
63+
$this->getOperationName($data['parsedQuery'] ?? $data['query'] ?? '')
64+
?: 'operationNameNotFound';
6265
if ($schema) {
6366
$logData = array_merge($logData, $this->gatherQueryInformation($schema));
6467
}
@@ -96,12 +99,12 @@ private function gatherRequestInformation(RequestInterface $request) : array
9699
private function gatherQueryInformation(Schema $schema) : array
97100
{
98101
$schemaConfig = $schema->getConfig();
99-
$mutationOperations = $schemaConfig->getMutation()->getFields();
100-
$queryOperations = $schemaConfig->getQuery()->getFields();
102+
$mutationOperations = array_keys($schemaConfig->getMutation()->getFields());
103+
$queryOperations = array_keys($schemaConfig->getQuery()->getFields());
101104
$queryInformation[LoggerInterface::HAS_MUTATION] = count($mutationOperations) > 0 ? 'true' : 'false';
102105
$queryInformation[LoggerInterface::NUMBER_OF_OPERATIONS] =
103106
count($mutationOperations) + count($queryOperations);
104-
$operationNames = array_merge(array_keys($mutationOperations), array_keys($queryOperations));
107+
$operationNames = array_merge($mutationOperations, $queryOperations);
105108
$queryInformation[LoggerInterface::OPERATION_NAMES] =
106109
count($operationNames) > 0 ? implode(",", $operationNames) : 'operationNameNotFound';
107110
return $queryInformation;
@@ -154,4 +157,37 @@ private function getFieldCount(DocumentNode|string $query): int
154157
}
155158
return 0;
156159
}
160+
161+
/**
162+
* Gets top level OperationName
163+
*
164+
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
165+
*
166+
* @param DocumentNode|string $query
167+
* @return string
168+
* @throws SyntaxError
169+
* @throws \Exception
170+
*/
171+
private function getOperationName(DocumentNode|string $query): string
172+
{
173+
if (!empty($query)) {
174+
$queryName = '';
175+
if (is_string($query)) {
176+
$query = $this->queryParser->parse($query);
177+
}
178+
Visitor::visit(
179+
$query,
180+
[
181+
'enter' => [
182+
NodeKind::NAME => function (Node $node) use (&$queryName) {
183+
$queryName = $node->value;
184+
return Visitor::stop();
185+
}
186+
]
187+
]
188+
);
189+
return $queryName;
190+
}
191+
return '';
192+
}
157193
}

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

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,18 @@ interface LoggerInterface
1414
/**
1515
* Names of properties to be logged
1616
*/
17-
const NUMBER_OF_OPERATIONS = 'GraphQlNumberOfOperations';
18-
const OPERATION_NAMES = 'GraphQlOperationNames';
19-
const STORE_HEADER = 'GraphQlStoreHeader';
20-
const CURRENCY_HEADER = 'GraphQlCurrencyHeader';
21-
const HAS_AUTH_HEADER = 'GraphQlHasAuthHeader';
22-
const HTTP_METHOD = 'GraphQlHttpMethod';
23-
const HAS_MUTATION = 'GraphQlHasMutation';
24-
const COMPLEXITY = 'GraphQlComplexity';
25-
const REQUEST_LENGTH = 'GraphQlRequestLength';
26-
const HTTP_RESPONSE_CODE = 'GraphQlHttpResponseCode';
27-
const X_MAGENTO_CACHE_ID = 'GraphQlXMagentoCacheId';
17+
public const NUMBER_OF_OPERATIONS = 'GraphQlNumberOfOperations';
18+
public const OPERATION_NAMES = 'GraphQlOperationNames';
19+
public const TOP_LEVEL_OPERATION_NAME = 'GraphQlTopLevelOperationName';
20+
public const STORE_HEADER = 'GraphQlStoreHeader';
21+
public const CURRENCY_HEADER = 'GraphQlCurrencyHeader';
22+
public const HAS_AUTH_HEADER = 'GraphQlHasAuthHeader';
23+
public const HTTP_METHOD = 'GraphQlHttpMethod';
24+
public const HAS_MUTATION = 'GraphQlHasMutation';
25+
public const COMPLEXITY = 'GraphQlComplexity';
26+
public const REQUEST_LENGTH = 'GraphQlRequestLength';
27+
public const HTTP_RESPONSE_CODE = 'GraphQlHttpResponseCode';
28+
public const X_MAGENTO_CACHE_ID = 'GraphQlXMagentoCacheId';
2829

2930
/**
3031
* Execute logger

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public function __construct(
4141
*/
4242
public function execute(array $queryDetails)
4343
{
44-
$transactionName = $queryDetails[LoggerInterface::OPERATION_NAMES] ?? '';
44+
$transactionName = $queryDetails[LoggerInterface::TOP_LEVEL_OPERATION_NAME] ?? '';
4545
$this->newRelicWrapper->setTransactionName('GraphQL-' . $transactionName);
4646

4747
if (!$this->config->isNewRelicEnabled()) {

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
*/
2727
class LogDataTest extends TestCase
2828
{
29-
const CONTENT_TYPE = 'application/json';
29+
public const CONTENT_TYPE = 'application/json';
3030

3131
/** @var ObjectManagerInterface */
3232
private $objectManager;
@@ -136,6 +136,7 @@ public function getQueryInformationDataProvider()
136136
LoggerInterface::HAS_MUTATION => 'false',
137137
LoggerInterface::NUMBER_OF_OPERATIONS => 1,
138138
LoggerInterface::OPERATION_NAMES => 'products',
139+
LoggerInterface::TOP_LEVEL_OPERATION_NAME => 'products',
139140
LoggerInterface::COMPLEXITY => 5,
140141
LoggerInterface::HTTP_RESPONSE_CODE => 200,
141142
LoggerInterface::X_MAGENTO_CACHE_ID => '1234'
@@ -164,6 +165,7 @@ public function getQueryInformationDataProvider()
164165
LoggerInterface::HAS_MUTATION => 'false',
165166
LoggerInterface::NUMBER_OF_OPERATIONS => 1,
166167
LoggerInterface::OPERATION_NAMES => 'products',
168+
LoggerInterface::TOP_LEVEL_OPERATION_NAME => 'products',
167169
LoggerInterface::COMPLEXITY => 5,
168170
LoggerInterface::HTTP_RESPONSE_CODE => 200,
169171
LoggerInterface::X_MAGENTO_CACHE_ID => ''
@@ -197,6 +199,7 @@ public function getQueryInformationDataProvider()
197199
LoggerInterface::HAS_MUTATION => 'false',
198200
LoggerInterface::NUMBER_OF_OPERATIONS => 0,
199201
LoggerInterface::OPERATION_NAMES => 'operationNameNotFound',
202+
LoggerInterface::TOP_LEVEL_OPERATION_NAME => 'xyz',
200203
LoggerInterface::COMPLEXITY => 5,
201204
LoggerInterface::HTTP_RESPONSE_CODE => 200,
202205
LoggerInterface::X_MAGENTO_CACHE_ID => '1234'
@@ -259,6 +262,7 @@ public function getQueryInformationDataProvider()
259262
LoggerInterface::HAS_MUTATION => 'true',
260263
LoggerInterface::NUMBER_OF_OPERATIONS => 1,
261264
LoggerInterface::OPERATION_NAMES => 'placeOrder',
265+
LoggerInterface::TOP_LEVEL_OPERATION_NAME => 'placeOrder',
262266
LoggerInterface::COMPLEXITY => 3,
263267
LoggerInterface::HTTP_RESPONSE_CODE => 200,
264268
LoggerInterface::X_MAGENTO_CACHE_ID => '1234'
@@ -284,6 +288,7 @@ public function getQueryInformationDataProvider()
284288
LoggerInterface::HAS_MUTATION => 'true',
285289
LoggerInterface::NUMBER_OF_OPERATIONS => 1,
286290
LoggerInterface::OPERATION_NAMES => 'placeOrder',
291+
LoggerInterface::TOP_LEVEL_OPERATION_NAME => 'placeOrder',
287292
LoggerInterface::COMPLEXITY => 3,
288293
LoggerInterface::HTTP_RESPONSE_CODE => 200,
289294
LoggerInterface::X_MAGENTO_CACHE_ID => ''
@@ -328,6 +333,7 @@ public function getQueryInformationDataProvider()
328333
LoggerInterface::HAS_MUTATION => 'false',
329334
LoggerInterface::NUMBER_OF_OPERATIONS => 2,
330335
LoggerInterface::OPERATION_NAMES => 'cart,products',
336+
LoggerInterface::TOP_LEVEL_OPERATION_NAME => 'products',
331337
LoggerInterface::COMPLEXITY => 8,
332338
LoggerInterface::HTTP_RESPONSE_CODE => 200,
333339
LoggerInterface::X_MAGENTO_CACHE_ID => '1234'

0 commit comments

Comments
 (0)