Esempio n. 1
0
def relay_server(relay_server_setup, settings):
    adjust_settings_for_relay_tests(settings)
    options = relay_server_setup["options"]
    docker_client = get_docker_client()
    container_name = _relay_server_container_name()
    _remove_container_if_exists(docker_client, container_name)
    container = docker_client.containers.run(**options)

    _log.info("Waiting for Relay container to start")

    url = relay_server_setup["url"]

    for i in range(5):
        try:
            requests.get(url)
            break
        except Exception as ex:
            if i == 4:
                raise ValueError(
                    f"relay did not start in time:\n{container.logs()}"
                ) from ex
            time.sleep(0.1 * 2**i)
    else:
        raise ValueError("relay did not start in time")

    return {"url": relay_server_setup["url"]}
Esempio n. 2
0
def relay_server(relay_server_setup):
    options = relay_server_setup["options"]
    docker_client = get_docker_client()
    container_name = _relay_server_container_name()
    _remove_container_if_exists(docker_client, container_name)
    docker_client.containers.run(**options)
    relay_server_setup["is_started"] = True

    return {"url": relay_server_setup["url"]}
Esempio n. 3
0
def persistent_relay_server(relay_server_setup):
    options = relay_server_setup["options"]

    if not relay_server_setup["is_started"]:
        # first time we use it in a test, everything should be
        # already setup, sentry should be running and configured,
        # just run relay
        docker_client = get_docker_client()
        docker_client.containers.run(**options)
        relay_server_setup["is_started"] = True

    return {"url": relay_server_setup["url"]}
Esempio n. 4
0
def relay_server(relay_server_setup):
    options = relay_server_setup["options"]
    docker_client = get_docker_client()
    container_name = _relay_server_container_name()
    _remove_container_if_exists(docker_client, container_name)
    docker_client.containers.run(**options)

    url = relay_server_setup["url"]

    for i in range(5):
        try:
            requests.get(url)
            break
        except Exception:
            time.sleep(0.1 * 2 ** i)
    else:
        raise ValueError("relay did not start in time")

    return {"url": relay_server_setup["url"]}
Esempio n. 5
0
def relay_server_setup(live_server, tmpdir_factory):
    prefix = "test_relay_config_{}_".format(
        datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S_%f"))
    config_path = tmpdir_factory.mktemp(prefix)
    config_path = six.text_type(config_path)

    parsed_live_server_url = urlparse(live_server.url)
    if parsed_live_server_url.port is not None:
        port = six.text_type(parsed_live_server_url.port)
    else:
        port = "80"

    if sys.platform.startswith("linux"):
        upstream_host = "http://127.0.0.1:%s/" % port
        kafka_host = "127.0.0.1"
        redis_host = "127.0.0.1"
        network = "host"
    else:
        upstream_host = "http://host.docker.internal:%s/" % port
        kafka_host = "sentry_kafka"
        redis_host = "sentry_redis"
        network = "sentry"

    template_path = _get_template_dir()
    sources = ["config.yml", "credentials.json"]

    # NOTE: if we ever need to start the test relay server at various ports here's where we need to change
    relay_port = 33331

    template_vars = {
        "SENTRY_HOST": upstream_host,
        "RELAY_PORT": relay_port,
        "KAFKA_HOST": kafka_host,
        "REDIS_HOST": redis_host,
    }

    for source in sources:
        source_path = path.join(template_path, source)
        dest_path = path.join(config_path, source)
        with open(source_path, "rt") as input:
            content = input.read()

        for var_name, var_val in six.iteritems(template_vars):
            content = content.replace("${%s}" % var_name,
                                      six.text_type(var_val))

        with open(dest_path, "wt") as output:
            output.write(content)

    # we have a config path for relay that is set up with the current live serve as upstream
    # check if we have the test relay docker container
    docker_client = get_docker_client()
    container_name = _relay_server_container_name()
    _remove_container_if_exists(docker_client, container_name)
    options = {
        "image": "us.gcr.io/sentryio/relay:nightly",
        "ports": {
            "%s/tcp" % relay_port: relay_port
        },
        "network": network,
        "detach": True,
        "name": container_name,
        "volumes": {
            config_path: {
                "bind": "/etc/relay"
            }
        },
        "command": ["run", "--config", "/etc/relay"],
    }

    # Some structure similar to what the live_server fixture returns
    server_info = {
        "url": "http://127.0.0.1:{}".format(relay_port),
        "options": options
    }

    yield server_info

    # cleanup
    shutil.rmtree(config_path)
    _remove_container_if_exists(docker_client, container_name)
Esempio n. 6
0
import zlib
from datetime import datetime
from contextlib import contextmanager
from sentry.runner.commands.devservices import get_docker_client, get_or_create
from sentry.utils.apidocs import MockUtils, iter_scenarios, iter_endpoints, get_sections
from sentry.utils.integrationdocs import sync_docs
from sentry.conf.server import SENTRY_DEVSERVICES
from subprocess import Popen

HERE = os.path.abspath(os.path.dirname(__file__))
OUTPUT_PATH = "/usr/src/output"
SENTRY_CONFIG = os.environ["SENTRY_CONF"] = os.path.join(
    HERE, "sentry.conf.py")
os.environ["SENTRY_SKIP_BACKEND_VALIDATION"] = "1"

client = get_docker_client()

# Use a unique network and namespace for our apidocs
namespace = "apidocs"

# Define our set of containers we want to run
APIDOC_CONTAINERS = ["postgres", "redis", "clickhouse", "snuba", "relay"]
devservices_settings = {
    container_name: SENTRY_DEVSERVICES[container_name]
    for container_name in APIDOC_CONTAINERS
}

apidoc_containers_overrides = {
    "postgres": {
        "environment": {
            "POSTGRES_DB": "sentry_api_docs"