|
28 | 28 | using Amazon.DynamoDBv2.DataModel;
|
29 | 29 | using Amazon.Runtime.Internal.Util;
|
30 | 30 | using Amazon.Runtime.Telemetry.Tracing;
|
| 31 | +using Amazon.Runtime.Internal.UserAgent; |
31 | 32 |
|
32 | 33 | namespace Amazon.DynamoDBv2.DocumentModel
|
33 | 34 | {
|
@@ -499,39 +500,22 @@ private static Primitive KeyDateTimeToEpochSecondsLong(Primitive key, string att
|
499 | 500 | return converted;
|
500 | 501 | }
|
501 | 502 |
|
502 |
| - internal void UserAgentRequestEventHandlerSync(object sender, RequestEventArgs args) |
| 503 | + internal void UpdateRequestUserAgentDetails(AmazonDynamoDBRequest request, bool isAsync) |
503 | 504 | {
|
504 |
| - UserAgentRequestEventHandler(sender, args, false); |
505 |
| - } |
506 |
| - internal void UserAgentRequestEventHandlerAsync(object sender, RequestEventArgs args) |
507 |
| - { |
508 |
| - UserAgentRequestEventHandler(sender, args, true); |
509 |
| - } |
| 505 | + if (request == null) return; |
510 | 506 |
|
511 |
| - internal void AddRequestHandler(AmazonDynamoDBRequest request, bool isAsync) |
512 |
| - { |
513 |
| - ((Amazon.Runtime.Internal.IAmazonWebServiceRequest)request).AddBeforeRequestHandler(isAsync ? |
514 |
| - new RequestEventHandler(this.UserAgentRequestEventHandlerAsync) : |
515 |
| - new RequestEventHandler(this.UserAgentRequestEventHandlerSync) |
516 |
| - ); |
517 |
| - } |
| 507 | + var userAgentDetails = ((Runtime.Internal.IAmazonWebServiceRequest)request).UserAgentDetails; |
518 | 508 |
|
519 |
| - private void UserAgentRequestEventHandler(object sender, RequestEventArgs args, bool isAsync) |
520 |
| - { |
521 |
| - WebServiceRequestEventArgs wsArgs = args as WebServiceRequestEventArgs; |
522 |
| - if (wsArgs != null) |
| 509 | + userAgentDetails.AddUserAgentComponent("ft/ddb-hll"); |
| 510 | + userAgentDetails.AddUserAgentComponent($"md/{(isAsync ? "TableAsync" : "TableSync")}"); |
| 511 | + |
| 512 | + if (this.TableConsumer == DynamoDBConsumer.DataModel) |
523 | 513 | {
|
524 |
| - var feature = string.Format(" ft/ddb-hll md/{0} md/{1}", this.TableConsumer, (isAsync ? "TableAsync" : "TableSync")); |
525 |
| - if (wsArgs.Headers.Keys.Contains(HeaderKeys.UserAgentHeader)) |
526 |
| - { |
527 |
| - string currentUserAgent = wsArgs.Headers[HeaderKeys.UserAgentHeader]; |
528 |
| - wsArgs.Headers[HeaderKeys.UserAgentHeader] = currentUserAgent + feature; |
529 |
| - } |
530 |
| - else if (wsArgs.Headers.Keys.Contains(HeaderKeys.XAmzUserAgentHeader)) |
531 |
| - { |
532 |
| - string currentUserAgent = wsArgs.Headers[HeaderKeys.XAmzUserAgentHeader]; |
533 |
| - wsArgs.Headers[HeaderKeys.XAmzUserAgentHeader] = currentUserAgent + feature; |
534 |
| - } |
| 514 | + userAgentDetails.AddFeature(UserAgentFeatureId.DDB_MAPPER); |
| 515 | + } |
| 516 | + else |
| 517 | + { |
| 518 | + userAgentDetails.AddUserAgentComponent($"md/{this.TableConsumer}"); |
535 | 519 | }
|
536 | 520 | }
|
537 | 521 |
|
@@ -572,7 +556,7 @@ private TableDescription DescribeTable(string tableName)
|
572 | 556 | {
|
573 | 557 | TableName = TableName
|
574 | 558 | };
|
575 |
| - this.AddRequestHandler(req, isAsync: false); |
| 559 | + this.UpdateRequestUserAgentDetails(req, isAsync: false); |
576 | 560 |
|
577 | 561 | #if NETSTANDARD
|
578 | 562 | // Cast the IAmazonDynamoDB to the concrete client instead, so we can access the internal sync-over-async methods
|
@@ -1191,7 +1175,7 @@ internal Document PutItemHelper(Document doc, PutItemOperationConfig config)
|
1191 | 1175 | TableName = TableName,
|
1192 | 1176 | Item = this.ToAttributeMap(doc)
|
1193 | 1177 | };
|
1194 |
| - this.AddRequestHandler(req, isAsync: false); |
| 1178 | + this.UpdateRequestUserAgentDetails(req, isAsync: false); |
1195 | 1179 |
|
1196 | 1180 | if (currentConfig.ReturnValues == ReturnValues.AllOldAttributes)
|
1197 | 1181 | req.ReturnValues = EnumMapper.Convert(currentConfig.ReturnValues);
|
@@ -1249,7 +1233,7 @@ internal async Task<Document> PutItemHelperAsync(Document doc, PutItemOperationC
|
1249 | 1233 | TableName = TableName,
|
1250 | 1234 | Item = this.ToAttributeMap(doc)
|
1251 | 1235 | };
|
1252 |
| - this.AddRequestHandler(req, isAsync: true); |
| 1236 | + this.UpdateRequestUserAgentDetails(req, isAsync: true); |
1253 | 1237 |
|
1254 | 1238 | if (currentConfig.ReturnValues == ReturnValues.AllOldAttributes)
|
1255 | 1239 | req.ReturnValues = EnumMapper.Convert(currentConfig.ReturnValues);
|
@@ -1301,7 +1285,7 @@ internal Document GetItemHelper(Key key, GetItemOperationConfig config)
|
1301 | 1285 | ConsistentRead = currentConfig.ConsistentRead
|
1302 | 1286 | };
|
1303 | 1287 |
|
1304 |
| - this.AddRequestHandler(request, isAsync: false); |
| 1288 | + this.UpdateRequestUserAgentDetails(request, isAsync: false); |
1305 | 1289 |
|
1306 | 1290 | #if NETSTANDARD
|
1307 | 1291 | // Cast the IAmazonDynamoDB to the concrete client instead, so we can access the internal sync-over-async methods
|
@@ -1336,7 +1320,7 @@ internal async Task<Document> GetItemHelperAsync(Key key, GetItemOperationConfig
|
1336 | 1320 | ConsistentRead = currentConfig.ConsistentRead
|
1337 | 1321 | };
|
1338 | 1322 |
|
1339 |
| - this.AddRequestHandler(request, isAsync: true); |
| 1323 | + this.UpdateRequestUserAgentDetails(request, isAsync: true); |
1340 | 1324 |
|
1341 | 1325 | if (currentConfig.AttributesToGet != null)
|
1342 | 1326 | request.AttributesToGet = currentConfig.AttributesToGet;
|
@@ -1390,7 +1374,7 @@ internal Document UpdateHelper(Document doc, Key key, UpdateItemOperationConfig
|
1390 | 1374 | ReturnValues = EnumMapper.Convert(currentConfig.ReturnValues)
|
1391 | 1375 | };
|
1392 | 1376 |
|
1393 |
| - this.AddRequestHandler(req, isAsync: false); |
| 1377 | + this.UpdateRequestUserAgentDetails(req, isAsync: false); |
1394 | 1378 |
|
1395 | 1379 | ValidateConditional(currentConfig);
|
1396 | 1380 |
|
@@ -1481,7 +1465,7 @@ internal async Task<Document> UpdateHelperAsync(Document doc, Key key, UpdateIte
|
1481 | 1465 | ReturnValues = EnumMapper.Convert(currentConfig.ReturnValues)
|
1482 | 1466 | };
|
1483 | 1467 |
|
1484 |
| - this.AddRequestHandler(req, isAsync: true); |
| 1468 | + this.UpdateRequestUserAgentDetails(req, isAsync: true); |
1485 | 1469 |
|
1486 | 1470 | ValidateConditional(currentConfig);
|
1487 | 1471 |
|
@@ -1564,7 +1548,7 @@ internal Document DeleteHelper(Key key, DeleteItemOperationConfig config)
|
1564 | 1548 | TableName = TableName,
|
1565 | 1549 | Key = key
|
1566 | 1550 | };
|
1567 |
| - this.AddRequestHandler(req, isAsync: false); |
| 1551 | + this.UpdateRequestUserAgentDetails(req, isAsync: false); |
1568 | 1552 |
|
1569 | 1553 | if (currentConfig.ReturnValues == ReturnValues.AllOldAttributes)
|
1570 | 1554 | req.ReturnValues = EnumMapper.Convert(currentConfig.ReturnValues);
|
@@ -1620,7 +1604,7 @@ internal async Task<Document> DeleteHelperAsync(Key key, DeleteItemOperationConf
|
1620 | 1604 | TableName = TableName,
|
1621 | 1605 | Key = key
|
1622 | 1606 | };
|
1623 |
| - this.AddRequestHandler(req, isAsync: true); |
| 1607 | + this.UpdateRequestUserAgentDetails(req, isAsync: true); |
1624 | 1608 |
|
1625 | 1609 | if (currentConfig.ReturnValues == ReturnValues.AllOldAttributes)
|
1626 | 1610 | req.ReturnValues = EnumMapper.Convert(currentConfig.ReturnValues);
|
|
0 commit comments