use of com.amazonaws.xray.strategy.ContextMissingStrategy in project aws-xray-sdk-java by aws.
the class TracingStatementTest method testCaptureRuntimeExceptionWithoutSegment.
@Test
public void testCaptureRuntimeExceptionWithoutSegment() throws Exception {
ContextMissingStrategy oldStrategy = AWSXRay.getGlobalRecorder().getContextMissingStrategy();
AWSXRay.getGlobalRecorder().setContextMissingStrategy(new IgnoreErrorContextMissingStrategy());
try {
RuntimeException exception = new RuntimeException("foo");
when(delegate.execute(SQL)).thenThrow(exception);
try {
statement.execute(SQL);
fail("Expected exception is not thrown");
} catch (RuntimeException th) {
assertEquals(exception, th);
}
} finally {
AWSXRay.getGlobalRecorder().setContextMissingStrategy(oldStrategy);
}
}
use of com.amazonaws.xray.strategy.ContextMissingStrategy in project aws-xray-sdk-java by aws.
the class AbstractXRayInterceptor method getCurrentSegment.
private static Segment getCurrentSegment() {
Optional<Segment> segment = getCurrentSegmentOptional();
if (segment.isPresent()) {
return segment.get();
}
ContextMissingStrategy contextMissingStrategy = getContextMissingStrategy();
contextMissingStrategy.contextMissing("No segment in progress.", SegmentNotFoundException.class);
return null;
}
use of com.amazonaws.xray.strategy.ContextMissingStrategy in project aws-xray-sdk-java by aws.
the class AWSXRayRecorderBuilder method build.
/**
* Constructs and returns an AWSXRayRecorder with the provided configuration.
*
* @return a configured instance of AWSXRayRecorder
*/
public AWSXRayRecorder build() {
AWSXRayRecorder client = new AWSXRayRecorder();
if (samplingStrategy != null) {
client.setSamplingStrategy(samplingStrategy);
}
if (streamingStrategy != null) {
client.setStreamingStrategy(streamingStrategy);
}
if (prioritizationStrategy != null) {
client.setPrioritizationStrategy(prioritizationStrategy);
}
if (throwableSerializationStrategy != null) {
client.setThrowableSerializationStrategy(throwableSerializationStrategy);
}
ContextMissingStrategy contextMissingStrategy = this.contextMissingStrategy;
if (contextMissingStrategy != null && !AWSXRayRecorderBuilder.contextMissingStrategyFromEnvironmentVariable().isPresent() && !AWSXRayRecorderBuilder.contextMissingStrategyFromSystemProperty().isPresent()) {
client.setContextMissingStrategy(contextMissingStrategy);
}
if (segmentContextResolverChain != null) {
client.setSegmentContextResolverChain(segmentContextResolverChain);
}
if (emitter != null) {
client.setEmitter(emitter);
}
if (!segmentListeners.isEmpty()) {
client.addAllSegmentListeners(segmentListeners);
}
if (useFastIdGenerator) {
client.useFastIdGenerator();
} else {
client.useSecureIdGenerator();
}
if (forcedTraceIdGeneration) {
client.setForcedTraceIdGeneration(true);
}
plugins.stream().filter(Objects::nonNull).filter(p -> p.isEnabled()).forEach(plugin -> {
logger.info("Collecting trace metadata from " + plugin.getClass().getName() + ".");
try {
Map<String, @Nullable Object> runtimeContext = plugin.getRuntimeContext();
if (!runtimeContext.isEmpty()) {
client.putRuntimeContext(plugin.getServiceName(), runtimeContext);
/**
* Given several enabled plugins, the recorder should resolve a single one that's most representative of this
* environment
* Resolution order: EB > EKS > ECS > EC2
* EKS > ECS because the ECS plugin checks for an environment variable whereas the EKS plugin checks for a
* kubernetes authentication file, which is a stronger enable condition
*/
String clientOrigin = client.getOrigin();
if (clientOrigin == null || ORIGIN_PRIORITY.getOrDefault(plugin.getOrigin(), 0) < ORIGIN_PRIORITY.getOrDefault(clientOrigin, 0)) {
client.setOrigin(plugin.getOrigin());
}
} else {
logger.warn(plugin.getClass().getName() + " plugin returned empty runtime context data. The recorder will " + "not be setting segment origin or runtime context values from this plugin.");
}
} catch (Exception e) {
logger.warn("Failed to get runtime context from " + plugin.getClass().getName() + ".", e);
}
try {
Set<AWSLogReference> logReferences = plugin.getLogReferences();
if (Objects.nonNull(logReferences)) {
if (!logReferences.isEmpty()) {
client.addAllLogReferences(logReferences);
} else {
logger.debug(plugin.getClass().getName() + " plugin returned empty Log References. The recorder will not " + "reflect the logs from this plugin.");
}
}
} catch (Exception e) {
logger.warn("Failed to get log references from " + plugin.getClass().getName() + ".", e);
}
});
String logGroupFromEnv = System.getenv(LOG_GROUP_KEY);
if (StringValidator.isNotNullOrBlank(logGroupFromEnv)) {
logger.info("Recording log group " + logGroupFromEnv + " from environment variable.");
AWSLogReference logReference = new AWSLogReference();
logReference.setLogGroup(logGroupFromEnv);
client.addAllLogReferences(Collections.singleton(logReference));
}
return client;
}
use of com.amazonaws.xray.strategy.ContextMissingStrategy in project aws-xray-sdk-java by aws.
the class TracingStatementTest method testCaptureSqlExceptionWithoutSegment.
@Test
public void testCaptureSqlExceptionWithoutSegment() throws Exception {
ContextMissingStrategy oldStrategy = AWSXRay.getGlobalRecorder().getContextMissingStrategy();
AWSXRay.getGlobalRecorder().setContextMissingStrategy(new IgnoreErrorContextMissingStrategy());
try {
SQLException exception = new SQLException("foo");
when(delegate.execute(SQL)).thenThrow(exception);
try {
statement.execute(SQL);
fail("Expected exception is not thrown");
} catch (SQLException th) {
assertEquals(exception, th);
}
} finally {
AWSXRay.getGlobalRecorder().setContextMissingStrategy(oldStrategy);
}
}
Aggregations