Skip to content

Commit

Permalink
Track accountID endpoint mode in user-agent (#3000)
Browse files Browse the repository at this point in the history
  • Loading branch information
lucix-aws authored Feb 4, 2025
1 parent c45eaac commit 68c4649
Show file tree
Hide file tree
Showing 63 changed files with 378 additions and 22 deletions.
8 changes: 8 additions & 0 deletions .changelog/1c8f914e6b9a4aef9418a60e7fe62de2.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"id": "1c8f914e-6b9a-4aef-9418-a60e7fe62de2",
"type": "feature",
"description": "Track AccountID endpoint mode in user-agent.",
"modules": [
"service/dynamodb"
]
}
55 changes: 33 additions & 22 deletions aws/middleware/user_agent.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,28 +76,39 @@ type UserAgentFeature string

// Enumerates UserAgentFeature.
const (
UserAgentFeatureResourceModel UserAgentFeature = "A" // n/a (we don't generate separate resource types)
UserAgentFeatureWaiter = "B"
UserAgentFeaturePaginator = "C"
UserAgentFeatureRetryModeLegacy = "D" // n/a (equivalent to standard)
UserAgentFeatureRetryModeStandard = "E"
UserAgentFeatureRetryModeAdaptive = "F"
UserAgentFeatureS3Transfer = "G"
UserAgentFeatureS3CryptoV1N = "H" // n/a (crypto client is external)
UserAgentFeatureS3CryptoV2 = "I" // n/a
UserAgentFeatureS3ExpressBucket = "J"
UserAgentFeatureS3AccessGrants = "K" // not yet implemented
UserAgentFeatureGZIPRequestCompression = "L"
UserAgentFeatureProtocolRPCV2CBOR = "M"
UserAgentFeatureRequestChecksumCRC32 = "U"
UserAgentFeatureRequestChecksumCRC32C = "V"
UserAgentFeatureRequestChecksumCRC64 = "W"
UserAgentFeatureRequestChecksumSHA1 = "X"
UserAgentFeatureRequestChecksumSHA256 = "Y"
UserAgentFeatureRequestChecksumWhenSupported = "Z"
UserAgentFeatureRequestChecksumWhenRequired = "a"
UserAgentFeatureResponseChecksumWhenSupported = "b"
UserAgentFeatureResponseChecksumWhenRequired = "c"
UserAgentFeatureResourceModel UserAgentFeature = "A" // n/a (we don't generate separate resource types)

UserAgentFeatureWaiter = "B"
UserAgentFeaturePaginator = "C"

UserAgentFeatureRetryModeLegacy = "D" // n/a (equivalent to standard)
UserAgentFeatureRetryModeStandard = "E"
UserAgentFeatureRetryModeAdaptive = "F"

UserAgentFeatureS3Transfer = "G"
UserAgentFeatureS3CryptoV1N = "H" // n/a (crypto client is external)
UserAgentFeatureS3CryptoV2 = "I" // n/a
UserAgentFeatureS3ExpressBucket = "J"
UserAgentFeatureS3AccessGrants = "K" // not yet implemented

UserAgentFeatureGZIPRequestCompression = "L"

UserAgentFeatureProtocolRPCV2CBOR = "M"

UserAgentFeatureAccountIDEndpoint = "O" // DO NOT IMPLEMENT: rules output is not currently defined. SDKs should not parse endpoints for feature information.
UserAgentFeatureAccountIDModePreferred = "P"
UserAgentFeatureAccountIDModeDisabled = "Q"
UserAgentFeatureAccountIDModeRequired = "R"

UserAgentFeatureRequestChecksumCRC32 = "U"
UserAgentFeatureRequestChecksumCRC32C = "V"
UserAgentFeatureRequestChecksumCRC64 = "W"
UserAgentFeatureRequestChecksumSHA1 = "X"
UserAgentFeatureRequestChecksumSHA256 = "Y"
UserAgentFeatureRequestChecksumWhenSupported = "Z"
UserAgentFeatureRequestChecksumWhenRequired = "a"
UserAgentFeatureResponseChecksumWhenSupported = "b"
UserAgentFeatureResponseChecksumWhenRequired = "c"
)

// RequestUserAgent is a build middleware that set the User-Agent for the request.
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package software.amazon.smithy.aws.go.codegen.customization;

import java.util.List;
import java.util.Map;
import software.amazon.smithy.aws.go.codegen.AwsGoDependency;
import software.amazon.smithy.codegen.core.SymbolProvider;
import software.amazon.smithy.go.codegen.GoCodegenContext;
import software.amazon.smithy.go.codegen.GoDelegator;
import software.amazon.smithy.go.codegen.GoSettings;
import software.amazon.smithy.go.codegen.SmithyGoDependency;
import software.amazon.smithy.go.codegen.integration.GoIntegration;
import software.amazon.smithy.go.codegen.integration.MiddlewareRegistrar;
import software.amazon.smithy.go.codegen.integration.RuntimeClientPlugin;
import software.amazon.smithy.model.Model;

import static software.amazon.smithy.aws.go.codegen.customization.AccountIDEndpointRouting.hasAccountIdEndpoints;
import static software.amazon.smithy.go.codegen.GoWriter.goTemplate;
import static software.amazon.smithy.go.codegen.SymbolUtils.buildPackageSymbol;

/**
* Tracks the retry mode being used by the caller.
*/
public class AccountIdEndpointModeUserAgent implements GoIntegration {
private static final MiddlewareRegistrar MIDDLEWARE = MiddlewareRegistrar.builder()
.resolvedFunction(buildPackageSymbol("addUserAgentAccountIDEndpointMode"))
.useClientOptions()
.build();

@Override
public List<RuntimeClientPlugin> getClientPlugins() {
return List.of(
RuntimeClientPlugin.builder()
.servicePredicate(AccountIDEndpointRouting::hasAccountIdEndpoints)
.registerMiddleware(MIDDLEWARE)
.build()
);
}

@Override
public void writeAdditionalFiles(GoCodegenContext ctx) {
if (!hasAccountIdEndpoints(ctx.model(), ctx.settings().getService(ctx.model()))) {
return;
}

ctx.writerDelegator().useFileWriter("api_client.go", ctx.settings().getModuleName(), goTemplate("""
$aws:D $awsMiddleware:D
func addUserAgentAccountIDEndpointMode(stack $stack:P, options Options) error {
ua, err := getOrAddRequestUserAgent(stack)
if err != nil {
return err
}
switch options.AccountIDEndpointMode {
case aws.AccountIDEndpointModePreferred:
ua.AddUserAgentFeature(awsmiddleware.UserAgentFeatureAccountIDModePreferred)
case aws.AccountIDEndpointModeRequired:
ua.AddUserAgentFeature(awsmiddleware.UserAgentFeatureAccountIDModeRequired)
case aws.AccountIDEndpointModeDisabled:
ua.AddUserAgentFeature(awsmiddleware.UserAgentFeatureAccountIDModeDisabled)
}
return nil
}""",
Map.of(
"aws", AwsGoDependency.AWS_CORE,
"awsMiddleware", AwsGoDependency.AWS_MIDDLEWARE,
"stack", SmithyGoDependency.SMITHY_MIDDLEWARE.struct("Stack")
)));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -88,3 +88,4 @@ software.amazon.smithy.aws.go.codegen.customization.BackfillRequiredTrait
software.amazon.smithy.aws.go.codegen.customization.DeprecateService
software.amazon.smithy.aws.go.codegen.customization.BasicUserAgentFeatures
software.amazon.smithy.aws.go.codegen.customization.ChecksumMetricsTracking
software.amazon.smithy.aws.go.codegen.customization.AccountIdEndpointModeUserAgent
17 changes: 17 additions & 0 deletions service/dynamodb/api_client.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions service/dynamodb/api_op_BatchExecuteStatement.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions service/dynamodb/api_op_BatchGetItem.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions service/dynamodb/api_op_BatchWriteItem.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions service/dynamodb/api_op_CreateBackup.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions service/dynamodb/api_op_CreateGlobalTable.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions service/dynamodb/api_op_CreateTable.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions service/dynamodb/api_op_DeleteBackup.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions service/dynamodb/api_op_DeleteItem.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions service/dynamodb/api_op_DeleteResourcePolicy.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions service/dynamodb/api_op_DeleteTable.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions service/dynamodb/api_op_DescribeBackup.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions service/dynamodb/api_op_DescribeContinuousBackups.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions service/dynamodb/api_op_DescribeContributorInsights.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions service/dynamodb/api_op_DescribeEndpoints.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions service/dynamodb/api_op_DescribeExport.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions service/dynamodb/api_op_DescribeGlobalTable.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions service/dynamodb/api_op_DescribeGlobalTableSettings.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions service/dynamodb/api_op_DescribeImport.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions service/dynamodb/api_op_DescribeLimits.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions service/dynamodb/api_op_DescribeTable.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions service/dynamodb/api_op_DescribeTableReplicaAutoScaling.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 68c4649

Please sign in to comment.