Skip to content

Commit 346c790

Browse files
committed
Calculate hash
1 parent 0ed8bfe commit 346c790

File tree

1 file changed

+53
-11
lines changed
  • dd-java-agent/instrumentation/aws-java-s3-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/s3

1 file changed

+53
-11
lines changed
Lines changed: 53 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,69 @@
11
package datadog.trace.instrumentation.aws.v2.s3;
22

3-
import software.amazon.awssdk.core.SdkRequest;
3+
import java.nio.charset.StandardCharsets;
4+
import java.security.MessageDigest;
5+
import java.security.NoSuchAlgorithmException;
46
import software.amazon.awssdk.core.interceptor.Context;
57
import software.amazon.awssdk.core.interceptor.ExecutionAttributes;
68
import software.amazon.awssdk.core.interceptor.ExecutionInterceptor;
79
import software.amazon.awssdk.services.s3.model.CompleteMultipartUploadRequest;
10+
import software.amazon.awssdk.services.s3.model.CompleteMultipartUploadResponse;
811
import software.amazon.awssdk.services.s3.model.CopyObjectRequest;
12+
import software.amazon.awssdk.services.s3.model.CopyObjectResponse;
913
import software.amazon.awssdk.services.s3.model.PutObjectRequest;
14+
import software.amazon.awssdk.services.s3.model.PutObjectResponse;
1015

1116
public class S3Interceptor implements ExecutionInterceptor {
17+
// TODO wrap with try/catch
1218
@Override
13-
public SdkRequest modifyRequest(
14-
Context.ModifyRequest context, ExecutionAttributes executionAttributes) {
15-
if (context.request() instanceof PutObjectRequest) {
16-
System.out.println("[DEBUG] PutObjectRequest");
17-
} else if (context.request() instanceof CopyObjectRequest) {
18-
System.out.println("[DEBUG] CopyObjectRequest");
19-
} else if (context.request() instanceof CompleteMultipartUploadRequest) {
20-
System.out.println("[DEBUG] CompleteMultipartUploadRequest");
19+
public void afterExecution(
20+
Context.AfterExecution context, ExecutionAttributes executionAttributes) {
21+
String bucket, key, eTag;
22+
Object request = context.request();
23+
Object response = context.response();
24+
25+
// https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3Client.html
26+
if (request instanceof PutObjectRequest) {
27+
PutObjectRequest putObjectRequest = (PutObjectRequest) request;
28+
bucket = putObjectRequest.bucket();
29+
key = putObjectRequest.key();
30+
eTag = ((PutObjectResponse) response).eTag();
31+
} else if (request instanceof CopyObjectRequest) {
32+
CopyObjectRequest copyObjectRequest = (CopyObjectRequest) request;
33+
bucket = copyObjectRequest.destinationBucket();
34+
key = copyObjectRequest.destinationKey();
35+
eTag = ((CopyObjectResponse) response).copyObjectResult().eTag();
36+
} else if (request instanceof CompleteMultipartUploadRequest) {
37+
CompleteMultipartUploadRequest completeMultipartUploadRequest =
38+
(CompleteMultipartUploadRequest) request;
39+
bucket = completeMultipartUploadRequest.bucket();
40+
key = completeMultipartUploadRequest.key();
41+
eTag = ((CompleteMultipartUploadResponse) response).eTag();
2142
} else {
22-
System.out.println("[DEBUG] unknown request");
43+
return;
44+
}
45+
46+
if (eTag.startsWith("\"") && eTag.endsWith("\"")) {
47+
eTag = eTag.substring(1, eTag.length() - 1);
2348
}
49+
System.out.printf("[DEBUG] bucket: %s, key: %s, eTag: %s%n", bucket, key, eTag);
50+
String hash = generatePointerHash(new String[] {bucket, key, eTag});
51+
System.out.println("[DEBUG] hash: " + hash);
52+
}
53+
54+
private static String generatePointerHash(String[] components) {
55+
try {
56+
byte[] hash =
57+
MessageDigest.getInstance("SHA-256")
58+
.digest(String.join("|", components).getBytes(StandardCharsets.UTF_8));
2459

25-
return context.request();
60+
StringBuilder hex = new StringBuilder(64);
61+
for (byte b : hash) {
62+
hex.append(String.format("%02x", b));
63+
}
64+
return hex.substring(0, 32);
65+
} catch (NoSuchAlgorithmException e) {
66+
return "";
67+
}
2668
}
2769
}

0 commit comments

Comments
 (0)