
com.undefinedlabs.scope.settings.factory.AbstractScopeSettingsFactory Maven / Gradle / Ivy
package com.undefinedlabs.scope.settings.factory;
import com.undefinedlabs.scope.clock.Clock;
import com.undefinedlabs.scope.logger.ScopeLoggerLevel;
import com.undefinedlabs.scope.settings.ScopeEnvironmentPropertiesBooleanExtractor;
import com.undefinedlabs.scope.settings.ScopeExtProperties;
import com.undefinedlabs.scope.settings.ScopeSettings;
import com.undefinedlabs.scope.settings.ScopeSettingsFactory;
import com.undefinedlabs.scope.settings.ScopeSettingsFactoryResolverOpts;
import com.undefinedlabs.scope.settings.ScopeTestingFrameworkDetector;
import com.undefinedlabs.scope.settings.utils.ListUtils;
import com.undefinedlabs.scope.utils.GitUtils;
import com.undefinedlabs.scope.utils.PathUtils;
import com.undefinedlabs.scope.utils.dependencies.DependenciesExtractorResolver;
import com.undefinedlabs.scope.utils.metadata.model.GitDiffData;
import com.undefinedlabs.scope.utils.metadata.model.configuration.ConfigurationDataFactory;
import com.undefinedlabs.scope.utils.metadata.model.usermetadata.UserMetadataFactoryResolver;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
public abstract class AbstractScopeSettingsFactory implements ScopeSettingsFactory {
private final ScopeExtProperties properties;
private final ScopeTestingFrameworkDetector testingFrameworkDetector;
public AbstractScopeSettingsFactory(final ScopeSettingsFactoryResolverOpts opts) {
properties = opts.getExtProperties();
testingFrameworkDetector = opts.getTestingFrameworkDetector();
}
protected ScopeExtProperties getProperties() {
return properties;
}
protected abstract Map getSpecificSettings();
@Override
public ScopeSettings create() {
final Map settings = new HashMap<>();
settings.put(
ScopeSettings.SCOPE_TESTING_MODE,
getFlag(
ScopeSettings.SCOPE_TESTING_MODE, testingFrameworkDetector.detectIfTestsAreRunning()));
settings.put(ScopeSettings.SCOPE_DSN, getProperties().get(ScopeSettings.SCOPE_DSN));
settings.put(ScopeSettings.SCOPE_SERVICE, getService());
settings.put(
ScopeSettings.SCOPE_TRACER_GLOBAL, getFlag(ScopeSettings.SCOPE_TRACER_GLOBAL, false));
settings.put(
ScopeSettings.SCOPE_TRACER_DISPATCHER_CONCURRENCY_LEVEL,
getInt(getProperties().get(ScopeSettings.SCOPE_TRACER_DISPATCHER_CONCURRENCY_LEVEL)));
settings.put(
ScopeSettings.SCOPE_TRACER_DISPATCHER_CLOSE_TIMEOUT,
getInt(getProperties().get(ScopeSettings.SCOPE_TRACER_DISPATCHER_CLOSE_TIMEOUT)));
settings.put(
ScopeSettings.SCOPE_TRACER_DISPATCHER_SPANS_MAX_BUFFER_SIZE,
((boolean) settings.get(ScopeSettings.SCOPE_TESTING_MODE))
? getInt(
getProperties().get(ScopeSettings.SCOPE_TRACER_DISPATCHER_SPANS_MAX_BUFFER_SIZE))
: Integer.valueOf(1));
settings.put(
ScopeSettings.SCOPE_TRACER_DISPATCHER_EVENTS_MAX_BUFFER_SIZE,
((boolean) settings.get(ScopeSettings.SCOPE_TESTING_MODE))
? getInt(
getProperties().get(ScopeSettings.SCOPE_TRACER_DISPATCHER_EVENTS_MAX_BUFFER_SIZE))
: Integer.valueOf(1));
settings.put(
ScopeSettings.SCOPE_TRACER_DISPATCHER_CONNECTIONS_POOL_SIZE,
getInt(getProperties().get(ScopeSettings.SCOPE_TRACER_DISPATCHER_CONNECTIONS_POOL_SIZE)));
settings.put(
ScopeSettings.SCOPE_TRACER_DISPATCHER_CONNECTIONS_KEEP_ALIVE_DURATION,
getInt(
getProperties()
.get(ScopeSettings.SCOPE_TRACER_DISPATCHER_CONNECTIONS_KEEP_ALIVE_DURATION)));
settings.put(
ScopeSettings.SCOPE_CODE_PATH_ENABLED,
getFlag(ScopeSettings.SCOPE_CODE_PATH_ENABLED, false));
settings.put(
ScopeSettings.SCOPE_CODE_PATH_BASE_PACKAGES,
getProperties().get(ScopeSettings.SCOPE_CODE_PATH_BASE_PACKAGES));
settings.put(
ScopeSettings.SCOPE_LOGGER_LEVEL,
ScopeLoggerLevel.fromString(getProperties().get(ScopeSettings.SCOPE_LOGGER_LEVEL)));
settings.put(
ScopeSettings.SCOPE_LOGGER_ROOT,
PathUtils.INSTANCE.expandTilde(getProperties().get(ScopeSettings.SCOPE_LOGGER_ROOT)));
settings.put(
ScopeSettings.SCOPE_INSTRUMENTATION_ENABLED,
getFlag(ScopeSettings.SCOPE_INSTRUMENTATION_ENABLED, true));
settings.put(
ScopeSettings.SCOPE_INSTRUMENTATION_DB_STATEMENT_VALUES,
getFlag(ScopeSettings.SCOPE_INSTRUMENTATION_DB_STATEMENT_VALUES, false));
settings.put(
ScopeSettings.SCOPE_INSTRUMENTATION_DB_STACKTRACE,
getFlag(ScopeSettings.SCOPE_INSTRUMENTATION_DB_STACKTRACE, false));
settings.put(
ScopeSettings.SCOPE_INSTRUMENTATION_HTTP_PAYLOADS,
getFlag(ScopeSettings.SCOPE_INSTRUMENTATION_HTTP_PAYLOADS, false));
settings.put(
ScopeSettings.SCOPE_INSTRUMENTATION_HTTP_HEADERS,
getProperties().get(ScopeSettings.SCOPE_INSTRUMENTATION_HTTP_HEADERS));
settings.put(
ScopeSettings.SCOPE_INSTRUMENTATION_HTTP_STACKTRACE,
getFlag(ScopeSettings.SCOPE_INSTRUMENTATION_HTTP_STACKTRACE, false));
settings.put(
ScopeSettings.SCOPE_REPORTER_HEALTH_CHECK_INTERVAL,
(boolean) settings.get(ScopeSettings.SCOPE_TESTING_MODE)
? selectWithDefault(
getInt(
getProperties()
.get(
ScopeSettings
.SCOPE_TRACER_DISPATCHER_HEALTHCHECK_FREQUENCY_IN_TESTMODE)),
Clock.ONE_SEC_MS)
: selectWithDefault(
getInt(
getProperties()
.get(ScopeSettings.SCOPE_TRACER_DISPATCHER_HEALTHCHECK_FREQUENCY)),
Clock.ONE_MINUTE_MS));
settings.put(
ScopeSettings.SCOPE_METADATA,
UserMetadataFactoryResolver.INSTANCE
.get()
.create(getProperties().get(ScopeSettings.SCOPE_METADATA)));
settings.put(
ScopeSettings.SCOPE_CONFIGURATION,
ConfigurationDataFactory.INSTANCE.create(
getProperties().get(ScopeSettings.SCOPE_CONFIGURATION)));
settings.put(
ScopeSettings.SCOPE_DEPENDENCIES,
DependenciesExtractorResolver.INSTANCE
.resolve()
.extract(System.getProperty("java.class.path")));
settings.put(
ScopeSettings.SCOPE_RUNNER_ENABLED, getFlag(ScopeSettings.SCOPE_RUNNER_ENABLED, false));
settings.put(
ScopeSettings.SCOPE_RUNNER_INCLUDE_BRANCHES,
ListUtils.INSTANCE.getStringList(
getProperties().get(ScopeSettings.SCOPE_RUNNER_INCLUDE_BRANCHES)));
settings.put(
ScopeSettings.SCOPE_RUNNER_EXCLUDE_BRANCHES,
ListUtils.INSTANCE.getStringList(
getProperties().get(ScopeSettings.SCOPE_RUNNER_EXCLUDE_BRANCHES)));
settings.putAll(
getSpecificSettings() != null ? getSpecificSettings() : new HashMap());
settings.put(
ScopeSettings.SCOPE_REPOSITORY,
StringUtils.isNotEmpty((String) settings.get(ScopeSettings.SCOPE_REPOSITORY))
? settings.get(ScopeSettings.SCOPE_REPOSITORY)
: GitUtils.INSTANCE.getRepository());
settings.put(
ScopeSettings.SCOPE_COMMIT_SHA,
StringUtils.isNotEmpty((String) settings.get(ScopeSettings.SCOPE_COMMIT_SHA))
? settings.get(ScopeSettings.SCOPE_COMMIT_SHA)
: GitUtils.INSTANCE.getCommit());
settings.put(
ScopeSettings.SCOPE_SOURCE_ROOT,
StringUtils.isNotEmpty((String) settings.get(ScopeSettings.SCOPE_SOURCE_ROOT))
? PathUtils.INSTANCE.expandTilde((String) settings.get(ScopeSettings.SCOPE_SOURCE_ROOT))
: PathUtils.INSTANCE.expandTilde(GitUtils.INSTANCE.getSourceRootPath()));
settings.put(
ScopeSettings.SCOPE_BRANCH,
StringUtils.isNotEmpty((String) settings.get(ScopeSettings.SCOPE_BRANCH))
? GitUtils.INSTANCE.removeRefs((String) settings.get(ScopeSettings.SCOPE_BRANCH))
: GitUtils.INSTANCE.getBranch());
settings.put(
ScopeSettings.SCOPE_DIFF,
!GitDiffData.EMPTY.equals(GitUtils.INSTANCE.getDiff())
? GitUtils.INSTANCE.getDiff()
: null);
return new ScopeSettings(Collections.unmodifiableMap(settings));
}
private Integer getInt(final String str) {
return StringUtils.isNotEmpty(str) && StringUtils.isNumeric(str) ? Integer.valueOf(str) : null;
}
private String getService() {
return StringUtils.isNotEmpty(getProperties().get(ScopeSettings.SCOPE_SERVICE))
? getProperties().get(ScopeSettings.SCOPE_SERVICE)
: "default";
}
private boolean getFlag(final String envVarKey, final boolean defaultValue) {
final String envVarValue = getProperties().get(envVarKey);
return (StringUtils.isNotEmpty(envVarValue))
? ScopeEnvironmentPropertiesBooleanExtractor.INSTANCE.extract(envVarValue)
: defaultValue;
}
private Object selectWithDefault(final Object selectedVal, final Object defaultVal) {
return selectedVal != null ? selectedVal : defaultVal;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy