Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions aws-xray-recorder-sdk-aws-sdk/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ dependencies {
testImplementation("com.amazonaws:aws-java-sdk-lambda:1.12.228")
testImplementation("com.amazonaws:aws-java-sdk-s3:1.12.228")
testImplementation("com.amazonaws:aws-java-sdk-sns:1.12.228")
testImplementation("com.amazonaws:aws-java-sdk-xray:1.12.228")
testImplementation("org.skyscreamer:jsonassert:1.3.0")
testImplementation("org.powermock:powermock-module-junit4:2.0.7")
testImplementation("org.powermock:powermock-api-mockito2:2.0.7")
Expand Down
10 changes: 9 additions & 1 deletion aws-xray-recorder-sdk-core/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,15 @@ plugins {
}

dependencies {
api("com.amazonaws:aws-java-sdk-xray:1.12.767")
api("commons-logging:commons-logging:1.3.5")

implementation("com.fasterxml.jackson.core:jackson-annotations:2.17.0")
implementation("com.fasterxml.jackson.core:jackson-databind:2.17.0")
implementation("com.google.auto.value:auto-value-annotations:1.10.4")
implementation("com.google.auto.service:auto-service-annotations:1.1.1")
implementation("org.apache.httpcomponents:httpclient:4.5.14")

annotationProcessor("com.google.auto.value:auto-value:1.10.4")

compileOnly("com.google.code.findbugs:jsr305:3.0.2")
compileOnly("javax.servlet:javax.servlet-api:3.1.0")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,11 @@

package com.amazonaws.xray.internal;

import com.amazonaws.AmazonWebServiceRequest;
import com.amazonaws.AmazonWebServiceResult;
import com.amazonaws.SdkClientException;
import com.amazonaws.services.xray.model.GetSamplingRulesRequest;
import com.amazonaws.services.xray.model.GetSamplingRulesResult;
import com.amazonaws.services.xray.model.GetSamplingTargetsRequest;
import com.amazonaws.services.xray.model.GetSamplingTargetsResult;
import com.amazonaws.xray.config.DaemonConfiguration;
import com.amazonaws.xray.strategy.sampling.GetSamplingRulesRequest;
import com.amazonaws.xray.strategy.sampling.GetSamplingRulesResponse;
import com.amazonaws.xray.strategy.sampling.GetSamplingTargetsRequest;
import com.amazonaws.xray.strategy.sampling.GetSamplingTargetsResponse;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
Expand All @@ -32,7 +29,6 @@
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
import com.fasterxml.jackson.databind.introspect.Annotated;
import com.fasterxml.jackson.databind.introspect.AnnotatedMember;
import com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector;
import com.fasterxml.jackson.databind.module.SimpleModule;
import java.io.ByteArrayOutputStream;
Expand Down Expand Up @@ -67,18 +63,6 @@ public class UnsignedXrayClient {
.setPropertyNamingStrategy(PropertyNamingStrategies.UPPER_CAMEL_CASE)
.registerModule(new SimpleModule().addDeserializer(Date.class, new FloatDateDeserializer()))
.setAnnotationIntrospector(new JacksonAnnotationIntrospector() {
@Override
public boolean hasIgnoreMarker(AnnotatedMember m) {
// This is a somewhat hacky way of having ObjectMapper only serialize the fields in our
// model classes instead of the base class that comes from the SDK. In the future, we will
// remove the SDK dependency itself and the base classes and this hack will go away.
if (m.getDeclaringClass() == AmazonWebServiceRequest.class ||
m.getDeclaringClass() == AmazonWebServiceResult.class) {
return true;
}
return super.hasIgnoreMarker(m);
}

@Override
public PropertyName findNameForDeserialization(Annotated a) {
if (a.getName().equals("hTTPMethod")) {
Expand Down Expand Up @@ -109,12 +93,12 @@ public UnsignedXrayClient() {
}
}

public GetSamplingRulesResult getSamplingRules(GetSamplingRulesRequest request) {
return sendRequest(getSamplingRulesEndpoint, request, GetSamplingRulesResult.class);
public GetSamplingRulesResponse getSamplingRules(GetSamplingRulesRequest request) {
return sendRequest(getSamplingRulesEndpoint, request, GetSamplingRulesResponse.class);
}

public GetSamplingTargetsResult getSamplingTargets(GetSamplingTargetsRequest request) {
return sendRequest(getSamplingTargetsEndpoint, request, GetSamplingTargetsResult.class);
public GetSamplingTargetsResponse getSamplingTargets(GetSamplingTargetsRequest request) {
return sendRequest(getSamplingTargetsEndpoint, request, GetSamplingTargetsResponse.class);
}

private <T> T sendRequest(URL endpoint, Object request, Class<T> responseClass) {
Expand Down Expand Up @@ -216,7 +200,7 @@ private static Date parseServiceSpecificDate(String dateString) {
BigDecimal dateValue = new BigDecimal(dateString);
return new Date(dateValue.scaleByPowerOfTen(AWS_DATE_MILLI_SECOND_PRECISION).longValue());
} catch (NumberFormatException nfe) {
throw new SdkClientException("Unable to parse date : " + dateString, nfe);
throw new IllegalArgumentException("Unable to parse date : " + dateString, nfe);
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@

package com.amazonaws.xray.strategy;

import com.amazonaws.AmazonServiceException;
import com.amazonaws.xray.AWSXRay;
import com.amazonaws.xray.entities.Entity;
import com.amazonaws.xray.entities.Subsegment;
Expand All @@ -29,15 +28,16 @@
import java.util.Set;
import org.checkerframework.checker.nullness.qual.Nullable;


/**
* Default implementation of {@code ThrowableSerializationStrategy}.
* This class auto-registers the {@code AmazonServiceException} class as a remote exception class if no set of remote exception
* This class auto-registers the java.io.UncheckedIOException class as a remote exception class if no set of remote exception
* classes is provided in the constructor.
*/
public class DefaultThrowableSerializationStrategy implements ThrowableSerializationStrategy {
private static final int DEFAULT_MAX_STACK_TRACE_LENGTH = 50;
private static final Set<Class<? extends Throwable>> DEFAULT_REMOTE_EXCEPTION_CLASSES =
Collections.singleton(AmazonServiceException.class);
Collections.singleton(java.io.UncheckedIOException.class);

private final int maxStackTraceLength;
private final Set<Class<? extends Throwable>> remoteExceptionClasses;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
/*
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License").
* You may not use this file except in compliance with the License.
* A copy of the License is located at
*
* http://aws.amazon.com/apache2.0
*
* or in the "license" file accompanying this file. This file is distributed
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the License for the specific language governing
* permissions and limitations under the License.
*/

package com.amazonaws.xray.strategy.sampling;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.google.auto.value.AutoValue;
import javax.annotation.Nullable;

@AutoValue
@JsonSerialize(as = GetSamplingRulesRequest.class)
public abstract class GetSamplingRulesRequest {

public static GetSamplingRulesRequest create(@Nullable String nextToken) {
return new AutoValue_GetSamplingRulesRequest(nextToken);
}

@JsonProperty("NextToken")
@Nullable
abstract String getNextToken();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
/*
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License").
* You may not use this file except in compliance with the License.
* A copy of the License is located at
*
* http://aws.amazon.com/apache2.0
*
* or in the "license" file accompanying this file. This file is distributed
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the License for the specific language governing
* permissions and limitations under the License.
*/

package com.amazonaws.xray.strategy.sampling;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.auto.value.AutoValue;
import java.util.List;
import java.util.Map;
import javax.annotation.Nullable;

@AutoValue
public abstract class GetSamplingRulesResponse {

@JsonCreator
static GetSamplingRulesResponse create(
@JsonProperty("NextToken") String nextToken,
@JsonProperty("SamplingRuleRecords") List<SamplingRuleRecord> samplingRuleRecords) {
return new AutoValue_GetSamplingRulesResponse(nextToken, samplingRuleRecords);
}

@Nullable
abstract String getNextToken();

public abstract List<SamplingRuleRecord> getSamplingRuleRecords();

@AutoValue
public abstract static class SamplingRuleRecord {

@JsonCreator
static SamplingRuleRecord create(
@JsonProperty("CreatedAt") String createdAt,
@JsonProperty("ModifiedAt") String modifiedAt,
@JsonProperty("SamplingRule") SamplingRule samplingRule) {
return new AutoValue_GetSamplingRulesResponse_SamplingRuleRecord(createdAt, modifiedAt, samplingRule);
}

public abstract String getCreatedAt();

public abstract String getModifiedAt();

public abstract SamplingRule getSamplingRule();
}

@AutoValue
public abstract static class SamplingRule {

@JsonCreator
public static SamplingRule create(
@JsonProperty("Attributes") Map<String, String> attributes,
@JsonProperty("FixedRate") Double fixedRate,
@JsonProperty("Host") String host,
@JsonProperty("HTTPMethod") String httpMethod,
@JsonProperty("Priority") Integer priority,
@JsonProperty("ReservoirSize") Integer reservoirSize,
@JsonProperty("ResourceARN") String resourceArn,
@JsonProperty("RuleARN") @Nullable String ruleArn,
@JsonProperty("RuleName") @Nullable String ruleName,
@JsonProperty("ServiceName") String serviceName,
@JsonProperty("ServiceType") String serviceType,
@JsonProperty("URLPath") String urlPath,
@JsonProperty("Version") Integer version) {
return new AutoValue_GetSamplingRulesResponse_SamplingRule(
attributes,
fixedRate,
host,
httpMethod,
priority,
reservoirSize,
resourceArn,
ruleArn,
ruleName,
serviceName,
serviceType,
urlPath,
version);
}

@Nullable
public abstract Map<String, String> getAttributes();

public abstract Double getFixedRate();

@Nullable
public abstract String getHost();

@Nullable
public abstract String getHttpMethod();

public abstract Integer getPriority();

public abstract Integer getReservoirSize();

@Nullable
public abstract String getResourceArn();

@Nullable
public abstract String getRuleArn();

@Nullable
public abstract String getRuleName();

@Nullable
public abstract String getServiceName();

@Nullable
public abstract String getServiceType();

@Nullable
public abstract String getUrlPath();

@Nullable
public abstract Integer getVersion();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
/*
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License").
* You may not use this file except in compliance with the License.
* A copy of the License is located at
*
* http://aws.amazon.com/apache2.0
*
* or in the "license" file accompanying this file. This file is distributed
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the License for the specific language governing
* permissions and limitations under the License.
*/

package com.amazonaws.xray.strategy.sampling;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.google.auto.value.AutoValue;
import java.util.Date;
import java.util.List;
import javax.annotation.Nullable;

@AutoValue
@JsonSerialize(as = GetSamplingTargetsRequest.class)
public abstract class GetSamplingTargetsRequest {

public static GetSamplingTargetsRequest create(List<SamplingStatisticsDocument> documents) {
return new AutoValue_GetSamplingTargetsRequest(documents);
}

// Limit of 25 items
@JsonProperty("SamplingStatisticsDocuments")
abstract List<SamplingStatisticsDocument> getDocuments();

@AutoValue
@JsonSerialize(as = SamplingStatisticsDocument.class)
public abstract static class SamplingStatisticsDocument {

public static SamplingStatisticsDocument.Builder newBuilder() {
return new AutoValue_GetSamplingTargetsRequest_SamplingStatisticsDocument.Builder();
}

@JsonProperty("BorrowCount")
public abstract long getBorrowCount();

@Nullable
@JsonProperty("ClientID")
public abstract String getClientId();

@JsonProperty("RequestCount")
public abstract long getRequestCount();

@JsonProperty("RuleName")
public abstract String getRuleName();

@JsonProperty("SampledCount")
public abstract long getSampledCount();

@JsonProperty("Timestamp")
public abstract Date getTimestamp();

@AutoValue.Builder
public abstract static class Builder {
public abstract Builder setBorrowCount(long borrowCount);

public abstract Builder setClientId(String clientId);

public abstract Builder setRequestCount(long requestCount);

public abstract Builder setRuleName(String ruleName);

public abstract Builder setSampledCount(long sampledCount);

public abstract Builder setTimestamp(Date timestamp);

public abstract SamplingStatisticsDocument build();
}
}
}
Loading
Loading