public AWSXRayRecorder build()

in aws-xray-recorder-sdk-core/src/main/java/com/amazonaws/xray/AWSXRayRecorderBuilder.java [269:365]


    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;
    }