in aws-xray-agent/src/main/java/com/amazonaws/xray/agent/runtime/handlers/downstream/AWSV2Handler.java [137:172]
private HashMap<String, Object> extractResponseParameters(AwsServiceDownstreamResponseEvent responseEvent) {
// TODO Similar to extract Request Parameters. Need to refactor common functionality
HashMap<String, Object> parameters = new HashMap<>();
AWSOperationHandler operationHandler = getOperationHandler(responseEvent.getService(), responseEvent.getOperation());
if (operationHandler == null) {
return parameters;
}
if (operationHandler.getResponseParameters() != null) {
operationHandler.getResponseParameters().forEach((parameterName) -> {
Optional<Object> parameterValue = (Optional) responseEvent.getValueForField(parameterName, Object.class);
parameterValue.ifPresent(o -> parameters.put(StringTransform.toSnakeCase(parameterName), o));
});
}
if (operationHandler.getResponseDescriptors() != null) {
operationHandler.getResponseDescriptors().forEach((key, descriptor) -> {
if (descriptor.isMap() && descriptor.shouldGetKeys()) {
Optional<Map> parameterValue = (Optional<Map>) responseEvent.getValueForField(key, Map.class);
if (parameterValue.isPresent()) {
String renameTo = descriptor.getRenameTo() != null ? descriptor.getRenameTo() : key;
parameters.put(StringTransform.toSnakeCase(renameTo), parameterValue.get().keySet());
}
} else if (descriptor.isList() && descriptor.shouldGetCount()) {
Optional<List> parameterValue = (Optional<List>) responseEvent.getValueForField(key, List.class);
if (parameterValue.isPresent()) {
String renameTo = descriptor.getRenameTo() != null ? descriptor.getRenameTo() : key;
parameters.put(StringTransform.toSnakeCase(renameTo), parameterValue.get().size());
}
}
});
}
return parameters;
}