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"]}
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"]}
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"]}
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"]}
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)
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"