diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index 6529432..f8fc4bd 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -1,9 +1,10 @@ name: E2E Tests on: - pull_request: push: - workflow_dispatch: + branches: [ master ] + pull_request: + branches: [ master ] jobs: e2e: diff --git a/e2e/Dockerfile b/e2e/Dockerfile index 784b4d7..9b69014 100644 --- a/e2e/Dockerfile +++ b/e2e/Dockerfile @@ -3,6 +3,7 @@ FROM python:3.10 WORKDIR /usr/local/bin RUN pip install Flask +RUN pip install PyYAML COPY vertx-eventbus-client-1.0.0.dev0.tar.gz . @@ -14,4 +15,9 @@ RUN pip install sourceplusplus-0.1.0.tar.gz COPY E2ETest.py . +ADD ./spp-probe.yml . + +RUN mkdir config +ADD ./config/spp-platform.crt ./config/ + CMD ["python", "E2ETest.py"] diff --git a/e2e/Dockerfile-spp-oap-server b/e2e/Dockerfile-spp-oap-server new file mode 100644 index 0000000..ed28916 --- /dev/null +++ b/e2e/Dockerfile-spp-oap-server @@ -0,0 +1,4 @@ +FROM sourceplusplus/spp-oap-server:0.1.19 + +ADD ./config/spp-platform.crt /skywalking +ADD ./config/spp-platform.key /skywalking \ No newline at end of file diff --git a/e2e/Dockerfile-spp-platform b/e2e/Dockerfile-spp-platform new file mode 100644 index 0000000..f03bb81 --- /dev/null +++ b/e2e/Dockerfile-spp-platform @@ -0,0 +1,6 @@ +FROM sourceplusplus/spp-platform:0.1.19 + +ADD ./config/logback.xml /opt/sourceplusplus/config +ADD ./config/spp-platform.crt /opt/sourceplusplus/config +ADD ./config/spp-platform.key /opt/sourceplusplus/config +ADD ./config/spp-platform.yml /opt/sourceplusplus/config \ No newline at end of file diff --git a/e2e/config/logback.xml b/e2e/config/logback.xml new file mode 100644 index 0000000..200bb49 --- /dev/null +++ b/e2e/config/logback.xml @@ -0,0 +1,45 @@ + + + + + + + %black(%d{ISO8601}) %highlight(%-5level) %yellow(%logger{15}): %msg%n%throwable + + + + + logs/spp-platform.log + true + + %d{HH:mm:ss.SSS} %-5level %logger - %msg%n + + + + logs/archived/spp-platform-%d{"yyyy-MM-dd"}.%i.log + + + + 10MB + 14 + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/e2e/config/spp-platform.crt b/e2e/config/spp-platform.crt new file mode 100644 index 0000000..8e57f92 --- /dev/null +++ b/e2e/config/spp-platform.crt @@ -0,0 +1,29 @@ +-----BEGIN CERTIFICATE----- +MIIFBTCCAu2gAwIBAgIGAXm19tRjMA0GCSqGSIb3DQEBCwUAMBkxFzAVBgNVBAMM +DnNreXdhbGtpbmctb2FwMB4XDTIxMDUyOTAyMzIwMloXDTIzMDUyOTAyMzIwMlow +GTEXMBUGA1UEAwwOc2t5d2Fsa2luZy1vYXAwggIiMA0GCSqGSIb3DQEBAQUAA4IC +DwAwggIKAoICAQCMh4NPzjmjwWhsli4mqQCZ089/mJWJtmRXTNkk2eC/MwFdeggp +CE8hYjHWuZus53Irkn4yzWx95e5iA0XWGmEqJ/yBYIF+DIbIT/XWH+cIdHHz3Yzl +MCK0Mb/AKOyvJaqavCh5Ln2MGqlQgETv4E4dkHHSi5Bajz3KfiYOhFql6sdZHgr+ +tmLExzAJc6j/3+m2zLOE7C1LQd1IStr+HGNM7b1ykxMvjEcFl6tC0FCTCCg8BEf+ +8JDfZGnC9WGJlN/aBqAM4rZwD2hH/N7c1Aj4ZBKGKd5L1NgYyQUGmf/KT0U5s6bd +Jucfku+G08b2wxVe134D7TVSbSXAV4QO4dMaemG63cUcsmQQyzto6SSbGbgkhESf +POAkAOFStuOBhRculYjeDyrEy/nHOfRpk3sVrMmEb+Hao5ddwZy97TfapI1xyMUw +bD9qdY3numVHezm3K/Br/yuFnbEPswMfmeB8i0LH9iCsemhJ10lrtTgv9W2QPZj0 +Lb4BV/hvrYSoKDBBntg27yZ+pzBU2jnqD8I25i61qKOXd8XbZtXjnZ4LSdQ4H4Lw +qK6lptk/vnODFbbZZ0o2k8xhOAYN7fKq6wRSrRfggcUuNHWGtAZZpqvkqHy+lYrQ +9z1UVrNhSq7/0me5FOXiEPZNyE5Hc6QvQdeKR2iFUoRiKViNZesCRktzFwIDAQAB +o1MwUTAdBgNVHQ4EFgQUJ8G+IdTAqwY4Be8QqpVBWQkW2AAwHwYDVR0jBBgwFoAU +J8G+IdTAqwY4Be8QqpVBWQkW2AAwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0B +AQsFAAOCAgEAYAriTF5HpA79qC5EQeI/cWkGVllVxwfX74DkxO5gcLesaSOlTwfE +zofz3i4axtZZ1Zu18N1Ab7AXFDSAxUQzGzbTKTi3vdZAmQ+f9dvrxR1Y2NSdXJqn +mjSexqlo86jOR7ZGfPePEZEb8EJxHT2Vay4t2DeL6+gVXeqWqGvCGqHaHuzAvW85 +nxGDMDV2vCQs4HQT2NDNN1KzZWd1hZ7gAbPh8fsCY/mE7qOKAr7Oj83GvAwkigRx +6YIcvvXN2erybsUDdz4KrqZcVjRGFkLZb5G9IerVD8ynat/2d7UlShDs+d+qRQRo +Ek5+eR4L5ArJi0rz5ipGQgQFVNKZhD6sygAG/LCpl2Qjue85B56uALSiEelLuqvD +pHwjuKIAuLbhkF4nAVlrx0L+SC5q++uh4E+UbYa8E5Buht2cAVIHvdQuWyiSLR7Y +/wT53AvdhREC9HHOOKGU7yvWnz1lNj2oESg3GsOqLktjuE/mSj5n77AOx257Buge +TAOI+4XeV7/RbP1o2EgDqkXJ7grHd7/J2STjKMpcqxYMGunF55PqlZNXVRHBDVet +fiY1ZdwIbLAQG8BcuFMy/LN7kpEsP+MdcRpjxaSkf5MikOiaopR8CUAum+PgsJQm +C2qY1tsu3thMz5vcu9iFapWmHJA01y3ClottxY5c5DztQVYJTuZ8T20= +-----END CERTIFICATE----- \ No newline at end of file diff --git a/e2e/config/spp-platform.key b/e2e/config/spp-platform.key new file mode 100644 index 0000000..8d29853 --- /dev/null +++ b/e2e/config/spp-platform.key @@ -0,0 +1,51 @@ +-----BEGIN RSA PRIVATE KEY----- +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 +-----END RSA PRIVATE KEY----- \ No newline at end of file diff --git a/e2e/config/spp-platform.yml b/e2e/config/spp-platform.yml new file mode 100644 index 0000000..67f7cab --- /dev/null +++ b/e2e/config/spp-platform.yml @@ -0,0 +1,20 @@ +spp-platform: + host: 0.0.0.0 + port: 5445 + access_token: "change-me" + logging: + level: trace + probe: + bridge_port: 5450 + marker: + bridge_port: 5455 + processor: + bridge_port: 5460 + +redis: + host: redis + port: 6379 + +skywalking-oap: + host: skywalking-oap + port: 12800 diff --git a/e2e/docker-compose.yml b/e2e/docker-compose.yml index c6d5ef7..920b49a 100644 --- a/e2e/docker-compose.yml +++ b/e2e/docker-compose.yml @@ -12,9 +12,12 @@ services: environment: - SPP_PLATFORM_HOST=spp-platform - SPP_SKYWALKING_HOST=skywalking-oap + - GRPC_DEFAULT_SSL_ROOTS_FILE_PATH=/usr/local/bin/config/spp-platform.crt spp-platform: - image: sourceplusplus/spp-platform:0.1.19 container_name: spp-platform + build: + context: . + dockerfile: Dockerfile-spp-platform hostname: spp-platform ports: - "5445:5445" @@ -29,29 +32,38 @@ services: - SPP_CLUSTER_NAME=docker - SPP_REDIS_HOST=redis - SPP_SKYWALKING_HOST=skywalking-oap - - SPP_DISABLE_TLS=true - - SPP_DISABLE_JWT=true redis: image: redis:6.2.1 container_name: redis hostname: redis skywalking-oap: - image: sourceplusplus/spp-oap-server:0.1.19 container_name: skywalking-oap + build: + context: . + dockerfile: Dockerfile-spp-oap-server hostname: skywalking-oap ports: - "11800:11800" depends_on: - es-server + - spp-platform links: - es-server + - spp-platform restart: on-failure environment: - SW_STORAGE=elasticsearch7 - SW_STORAGE_ES_CLUSTER_NODES=es-server:9200 - SPP_PLATFORM_HOST=spp-platform - SPP_PLATFORM_PORT=5460 - - SPP_DISABLE_TLS=true + - SPP_PLATFORM_CERTIFICATE_FILE=/skywalking/spp-platform.crt + - SW_CORE_GRPC_SSL_ENABLED=true + - SW_CORE_GRPC_SSL_KEY_PATH=/skywalking/spp-platform.key + - SW_CORE_GRPC_SSL_CERT_CHAIN_PATH=/skywalking/spp-platform.crt + - SW_CORE_GRPC_SSL_TRUSTED_CA_PATH=/skywalking/spp-platform.crt + - SW_RECEIVER_GRPC_SSL_ENABLED=true + - SW_RECEIVER_GRPC_SSL_KEY_PATH=/skywalking/spp-platform.key + - SW_RECEIVER_GRPC_SSL_CERT_CHAIN_PATH=/skywalking/spp-platform.crt es-server: image: blacktop/elasticsearch:7.0.0 container_name: es-server diff --git a/e2e/spp-probe.yml b/e2e/spp-probe.yml new file mode 100644 index 0000000..e3ae688 --- /dev/null +++ b/e2e/spp-probe.yml @@ -0,0 +1,15 @@ +spp: + platform_host: "spp-platform" + platform_port: 5450 + quiet_mode: false + verify_host: false + platform_certificate: "MIIFBTCCAu2gAwIBAgIGAXm19tRjMA0GCSqGSIb3DQEBCwUAMBkxFzAVBgNVBAMMDnNreXdhbGtpbmctb2FwMB4XDTIxMDUyOTAyMzIwMloXDTIzMDUyOTAyMzIwMlowGTEXMBUGA1UEAwwOc2t5d2Fsa2luZy1vYXAwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCMh4NPzjmjwWhsli4mqQCZ089/mJWJtmRXTNkk2eC/MwFdeggpCE8hYjHWuZus53Irkn4yzWx95e5iA0XWGmEqJ/yBYIF+DIbIT/XWH+cIdHHz3YzlMCK0Mb/AKOyvJaqavCh5Ln2MGqlQgETv4E4dkHHSi5Bajz3KfiYOhFql6sdZHgr+tmLExzAJc6j/3+m2zLOE7C1LQd1IStr+HGNM7b1ykxMvjEcFl6tC0FCTCCg8BEf+8JDfZGnC9WGJlN/aBqAM4rZwD2hH/N7c1Aj4ZBKGKd5L1NgYyQUGmf/KT0U5s6bdJucfku+G08b2wxVe134D7TVSbSXAV4QO4dMaemG63cUcsmQQyzto6SSbGbgkhESfPOAkAOFStuOBhRculYjeDyrEy/nHOfRpk3sVrMmEb+Hao5ddwZy97TfapI1xyMUwbD9qdY3numVHezm3K/Br/yuFnbEPswMfmeB8i0LH9iCsemhJ10lrtTgv9W2QPZj0Lb4BV/hvrYSoKDBBntg27yZ+pzBU2jnqD8I25i61qKOXd8XbZtXjnZ4LSdQ4H4LwqK6lptk/vnODFbbZZ0o2k8xhOAYN7fKq6wRSrRfggcUuNHWGtAZZpqvkqHy+lYrQ9z1UVrNhSq7/0me5FOXiEPZNyE5Hc6QvQdeKR2iFUoRiKViNZesCRktzFwIDAQABo1MwUTAdBgNVHQ4EFgQUJ8G+IdTAqwY4Be8QqpVBWQkW2AAwHwYDVR0jBBgwFoAUJ8G+IdTAqwY4Be8QqpVBWQkW2AAwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAYAriTF5HpA79qC5EQeI/cWkGVllVxwfX74DkxO5gcLesaSOlTwfEzofz3i4axtZZ1Zu18N1Ab7AXFDSAxUQzGzbTKTi3vdZAmQ+f9dvrxR1Y2NSdXJqnmjSexqlo86jOR7ZGfPePEZEb8EJxHT2Vay4t2DeL6+gVXeqWqGvCGqHaHuzAvW85nxGDMDV2vCQs4HQT2NDNN1KzZWd1hZ7gAbPh8fsCY/mE7qOKAr7Oj83GvAwkigRx6YIcvvXN2erybsUDdz4KrqZcVjRGFkLZb5G9IerVD8ynat/2d7UlShDs+d+qRQRoEk5+eR4L5ArJi0rz5ipGQgQFVNKZhD6sygAG/LCpl2Qjue85B56uALSiEelLuqvDpHwjuKIAuLbhkF4nAVlrx0L+SC5q++uh4E+UbYa8E5Buht2cAVIHvdQuWyiSLR7Y/wT53AvdhREC9HHOOKGU7yvWnz1lNj2oESg3GsOqLktjuE/mSj5n77AOx257BugeTAOI+4XeV7/RbP1o2EgDqkXJ7grHd7/J2STjKMpcqxYMGunF55PqlZNXVRHBDVetfiY1ZdwIbLAQG8BcuFMy/LN7kpEsP+MdcRpjxaSkf5MikOiaopR8CUAum+PgsJQmC2qY1tsu3thMz5vcu9iFapWmHJA01y3ClottxY5c5DztQVYJTuZ8T20=" +skywalking: + logging: + level: "INFO" + agent: + is_cache_enhanced_class: true + class_cache_mode: "FILE" + service_name: "appUuid" + collector: + backend_service: "skywalking-oap:11800" \ No newline at end of file diff --git a/e2e/vertx-eventbus-client-1.0.0.dev0.tar.gz b/e2e/vertx-eventbus-client-1.0.0.dev0.tar.gz index 321d398..735efe5 100644 Binary files a/e2e/vertx-eventbus-client-1.0.0.dev0.tar.gz and b/e2e/vertx-eventbus-client-1.0.0.dev0.tar.gz differ diff --git a/requirements.txt b/requirements.txt index facc9b4..df896e3 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ apache-skywalking~=0.7.0 nopdb~=0.1.0 pyhumps~=3.0.2 +PyYAML~=6.0 diff --git a/setup.py b/setup.py index 55b4889..9242ebb 100644 --- a/setup.py +++ b/setup.py @@ -11,4 +11,5 @@ packages=setuptools.find_packages(), install_requires=['apache-skywalking>=0.7.0', 'nopdb>=0.1.0', - 'pyhumps>=3.0.2']) + 'pyhumps>=3.0.2', + 'PyYAML>=6.0']) diff --git a/sourceplusplus/SourcePlusPlus.py b/sourceplusplus/SourcePlusPlus.py index 9533daa..c137aeb 100644 --- a/sourceplusplus/SourcePlusPlus.py +++ b/sourceplusplus/SourcePlusPlus.py @@ -1,9 +1,11 @@ import json import os +import ssl import sys import time import uuid +import yaml from skywalking import config, agent from vertx import EventBus @@ -15,40 +17,104 @@ class SourcePlusPlus(object): + def get_config_value(self, env, default, true_default): + env_value = os.getenv(env) + if env_value is not None: + return env_value + elif default is not None: + return default + else: + return true_default + def __init__(self, **kwargs): + probe_config_file = os.getenv("SPP_PROBE_CONFIG_FILE", "spp-probe.yml") + probe_config = {} + if os.path.exists(probe_config_file): + probe_config = yaml.full_load(open(probe_config_file, "r")) + else: + probe_config["spp"] = {} + probe_config["skywalking"] = {} + probe_config["skywalking"]["collector"] = {} + probe_config["skywalking"]["agent"] = {} + + probe_config["spp"]["probe_id"] = self.get_config_value( + "SPP_PROBE_ID", probe_config["spp"].get("probe_id"), str(uuid.uuid4()) + ) + probe_config["spp"]["platform_host"] = self.get_config_value( + "SPP_PLATFORM_HOST", probe_config["spp"].get("platform_host"), "localhost" + ) + probe_config["spp"]["platform_port"] = self.get_config_value( + "SPP_PLATFORM_PORT", probe_config["spp"].get("platform_port"), 5450 + ) + probe_config["spp"]["verify_host"] = self.get_config_value( + "SPP_TLS_VERIFY_HOST", probe_config["spp"].get("verify_host"), True + ) + probe_config["spp"]["disable_tls"] = self.get_config_value( + "SPP_DISABLE_TLS", probe_config["spp"].get("disable_tls"), False + ) + probe_config["skywalking"]["agent"]["service_name"] = self.get_config_value( + "SPP_SERVICE_NAME", probe_config["skywalking"]["agent"].get("service_name"), "Python Service" + ) + + skywalking_host = self.get_config_value("SPP_SKYWALKING_HOST", "localhost", "localhost") + skywalking_port = self.get_config_value("SPP_SKYWALKING_PORT", 11800, 11800) + probe_config["skywalking"]["collector"]["backend_service"] = self.get_config_value( + "SPP_SKYWALKING_BACKEND_SERVICE", + probe_config["skywalking"]["collector"].get("backend_service"), + skywalking_host + ":" + str(skywalking_port) + ) + self.probe_config = probe_config + self.instrument_remote = None - self.probe_id = os.getenv("SPP_PROBE_ID", str(uuid.uuid4())) - self.service_name = os.getenv("SPP_SERVICE_NAME", "python") - self.spp_host = os.getenv("SPP_PLATFORM_HOST", "localhost") - self.spp_port = os.getenv("SPP_PLATFORM_PORT", 5450) - self.skywalking_host = os.getenv("SPP_SKYWALKING_HOST", "localhost") - self.skywalking_port = os.getenv("SPP_SKYWALKING_PORT", 11800) for key, val in kwargs.items(): self.__dict__[key] = val def attach(self): - eb = EventBus(host=self.spp_host, port=self.spp_port) + ca_data = None + if self.probe_config["spp"]["disable_tls"] is False \ + and self.probe_config["spp"].get("probe_certificate") is not None: + ca_data = "-----BEGIN CERTIFICATE-----\n" + \ + self.probe_config["spp"]["probe_certificate"] + \ + "\n-----END CERTIFICATE-----" + + ssl_ctx = ssl.create_default_context(cadata=ca_data) + ssl_ctx.check_hostname = self.probe_config["spp"]["verify_host"] + ssl_ctx.verify_mode = ssl.CERT_NONE # todo: CERT_REQUIRED / load_verify_locations ? + eb = EventBus( + host=self.probe_config["spp"]["platform_host"], port=self.probe_config["spp"]["platform_port"], + ssl_context=ssl_ctx + ) eb.connect() self.__send_connected(eb) self.instrument_remote = LiveInstrumentRemote(eb) config.init( - collector_address=self.skywalking_host + ':' + str(self.skywalking_port), - service_name=self.service_name, - log_reporter_active=True + collector_address=self.probe_config["skywalking"]["collector"]["backend_service"], + service_name=self.probe_config["skywalking"]["agent"]["service_name"], + log_reporter_active=True, + force_tls=self.probe_config["spp"]["disable_tls"] is False, + log_reporter_formatted=False ) agent.start() def __send_connected(self, eb: EventBus): + probe_metadata = { + "language": "python", + "probe_version": __version__, + "python_version": sys.version + } + + # add hardcoded probe meta data (if present) + if self.probe_config["spp"].get("probe_metadata") is not None: + for key, val in self.probe_config["spp"].get("probe_metadata").items(): + probe_metadata[key] = val + + # send probe connected event reply_address = str(uuid.uuid4()) eb.send(address="spp.platform.status.probe-connected", body={ - "probeId": self.probe_id, + "probeId": self.probe_config["spp"]["probe_id"], "connectionTime": round(time.time() * 1000), - "meta": { - "language": "python", - "probe_version": __version__, - "python_version": sys.version - } + "meta": probe_metadata }, reply_handler=lambda msg: self.__register_remotes(eb, reply_address, msg["body"]["value"])) def __register_remotes(self, eb, reply_address, status):