All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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