From 0fb9eae69d0e8a50142a5407bafc868b807a64eb Mon Sep 17 00:00:00 2001 From: ndr_brt Date: Mon, 10 Jun 2024 10:52:45 +0200 Subject: [PATCH] fix open-telemetry sample --- advanced/advanced-01-open-telemetry/README.md | 47 +++++++--- .../docker-compose.yaml | 21 +++-- .../open-telemetry-runtime/Dockerfile | 12 +-- .../open-telemetry-runtime/build.gradle.kts | 4 +- .../sample/runtime/SeedVaultExtension.java | 87 +++++++++++++++++++ ...rg.eclipse.edc.spi.system.ServiceExtension | 1 + .../resources/negotiate-contract.json | 2 +- gradle/libs.versions.toml | 2 +- system-tests/build.gradle.kts | 4 + 9 files changed, 143 insertions(+), 37 deletions(-) create mode 100644 advanced/advanced-01-open-telemetry/open-telemetry-runtime/src/main/java/org/eclipse/edc/sample/runtime/SeedVaultExtension.java create mode 100644 advanced/advanced-01-open-telemetry/open-telemetry-runtime/src/main/resources/META-INF/services/org.eclipse.edc.spi.system.ServiceExtension diff --git a/advanced/advanced-01-open-telemetry/README.md b/advanced/advanced-01-open-telemetry/README.md index 3527ede0..54bb5e40 100644 --- a/advanced/advanced-01-open-telemetry/README.md +++ b/advanced/advanced-01-open-telemetry/README.md @@ -25,6 +25,12 @@ is configured to expose a Prometheus metrics endpoint. To run the consumer, the provider, and Jaeger execute the following commands in the project root folder: +Build the connector +```bash +./gradlew :advanced:advanced-01-open-telemetry:open-telemetry-runtime:build +``` + +Start the docker compose ```bash docker compose -f advanced/advanced-01-open-telemetry/docker-compose.yaml up --abort-on-container-exit ``` @@ -77,40 +83,55 @@ The output will be something like: "@id": "assetId", "@type": "dcat:Dataset", "odrl:hasPolicy": { - "@id": "MQ==:YXNzZXRJZA==:YjI5ZDVkZDUtZWU0Mi00NWRiLWE2OTktYjNmMjlmMWNjODk3", - "@type": "odrl:Set", + "@id": "MQ==:YXNzZXRJZA==:NjdlNDFhM2EtYThjMS00YTBmLWFkNmYtMjk5NzkzNTE2OTE3", + "@type": "odrl:Offer", "odrl:permission": [], "odrl:prohibition": [], - "odrl:obligation": [], - "odrl:target": "assetId" + "odrl:obligation": [] }, "dcat:distribution": [ { "@type": "dcat:Distribution", "dct:format": { - "@id": "HttpProxy" + "@id": "HttpData-PULL" }, - "dcat:accessService": "06348bca-6bf0-47fe-8bb5-6741cff7a955" + "dcat:accessService": { + "@id": "cb701b36-48ee-4132-8436-dba7b83c606c", + "@type": "dcat:DataService", + "dcat:endpointDescription": "dspace:connector", + "dcat:endpointUrl": "http://provider:19194/protocol", + "dct:terms": "dspace:connector", + "dct:endpointUrl": "http://provider:19194/protocol" + } }, { "@type": "dcat:Distribution", "dct:format": { - "@id": "HttpData" + "@id": "HttpData-PUSH" }, - "dcat:accessService": "06348bca-6bf0-47fe-8bb5-6741cff7a955" + "dcat:accessService": { + "@id": "cb701b36-48ee-4132-8436-dba7b83c606c", + "@type": "dcat:DataService", + "dcat:endpointDescription": "dspace:connector", + "dcat:endpointUrl": "http://provider:19194/protocol", + "dct:terms": "dspace:connector", + "dct:endpointUrl": "http://provider:19194/protocol" + } } ], - "edc:name": "product description", - "edc:id": "assetId", - "edc:contenttype": "application/json", + "name": "product description", + "id": "assetId", + "contenttype": "application/json", "@context": { - "dct": "https://purl.org/dc/terms/", + "@vocab": "https://w3id.org/edc/v0.0.1/ns/", "edc": "https://w3id.org/edc/v0.0.1/ns/", - "dcat": "https://www.w3.org/ns/dcat/", + "dcat": "http://www.w3.org/ns/dcat#", + "dct": "http://purl.org/dc/terms/", "odrl": "http://www.w3.org/ns/odrl/2/", "dspace": "https://w3id.org/dspace/v0.8/" } } + ``` With the `odrl:hasPolicy/@id` we can now replace it in the [negotiate-contract.json](resources/negotiate-contract.json) file diff --git a/advanced/advanced-01-open-telemetry/docker-compose.yaml b/advanced/advanced-01-open-telemetry/docker-compose.yaml index d7708e2c..f918fe2b 100644 --- a/advanced/advanced-01-open-telemetry/docker-compose.yaml +++ b/advanced/advanced-01-open-telemetry/docker-compose.yaml @@ -4,8 +4,7 @@ services: consumer: build: - context: ../.. - dockerfile: advanced/advanced-01-open-telemetry/open-telemetry-runtime/Dockerfile + context: open-telemetry-runtime volumes: - ./:/open-telemetry - ../../transfer/transfer-00-prerequisites/:/prerequisites @@ -14,11 +13,10 @@ services: - "29194:29194" environment: EDC_HOSTNAME: consumer - OTEL_SERVICE_NAME: consumer - OTEL_JAVAAGENT_EXTENSIONS: /app/opentelemetry-exporter-jaeger.jar - OTEL_TRACES_EXPORTER: jaeger + OTEL_SERVICE_NAME: provider OTEL_LOGS_EXPORTER: none - OTEL_EXPORTER_JAEGER_ENDPOINT: http://jaeger:14250 + OTEL_JAVAAGENT_EXTENSIONS: /app/opentelemetry-exporter-otlp.jar + OTEL_EXPORTER_OTLP_ENDPOINT: http://jaeger:4318 OTEL_METRICS_EXPORTER: prometheus WEB_HTTP_PORT: 29191 WEB_HTTP_PATH: /api @@ -44,8 +42,7 @@ services: provider: build: - context: ../.. - dockerfile: advanced/advanced-01-open-telemetry/open-telemetry-runtime/Dockerfile + context: open-telemetry-runtime volumes: - ./:/open-telemetry - ../../transfer/transfer-00-prerequisites/:/prerequisites @@ -56,9 +53,8 @@ services: EDC_HOSTNAME: provider OTEL_SERVICE_NAME: provider OTEL_LOGS_EXPORTER: none - OTEL_JAVAAGENT_EXTENSIONS: /app/opentelemetry-exporter-jaeger.jar - OTEL_TRACES_EXPORTER: jaeger - OTEL_EXPORTER_JAEGER_ENDPOINT: http://jaeger:14250 + OTEL_JAVAAGENT_EXTENSIONS: /app/opentelemetry-exporter-otlp.jar + OTEL_EXPORTER_OTLP_ENDPOINT: http://jaeger:4318 WEB_HTTP_PORT: 19191 WEB_HTTP_PATH: /api WEB_HTTP_PUBLIC_PORT: 19291 @@ -84,7 +80,10 @@ services: jaeger: image: jaegertracing/all-in-one + environment: + - COLLECTOR_OTLP_ENABLED=true ports: + - "4317:4317" - "16686:16686" prometheus: diff --git a/advanced/advanced-01-open-telemetry/open-telemetry-runtime/Dockerfile b/advanced/advanced-01-open-telemetry/open-telemetry-runtime/Dockerfile index 93b17717..1b65b93b 100644 --- a/advanced/advanced-01-open-telemetry/open-telemetry-runtime/Dockerfile +++ b/advanced/advanced-01-open-telemetry/open-telemetry-runtime/Dockerfile @@ -1,12 +1,6 @@ -FROM gradle:jdk17 AS build - -WORKDIR /home/gradle/project/ -COPY --chown=gradle:gradle . /home/gradle/project/ -RUN gradle advanced:advanced-01-open-telemetry:open-telemetry-runtime:build - FROM openjdk:17-slim WORKDIR /app -COPY --from=build /home/gradle/project/advanced/advanced-01-open-telemetry/open-telemetry-runtime/build/libs/opentelemetry-javaagent-*.jar /app/opentelemetry-javaagent.jar -COPY --from=build /home/gradle/project/advanced/advanced-01-open-telemetry/open-telemetry-runtime/build/libs/opentelemetry-exporter-jaeger-*.jar /app/opentelemetry-exporter-jaeger.jar -COPY --from=build /home/gradle/project/advanced/advanced-01-open-telemetry/open-telemetry-runtime/build/libs/connector.jar /app/connector.jar +COPY build/libs/opentelemetry-javaagent-2.4.0.jar /app/opentelemetry-javaagent.jar +COPY build/libs/opentelemetry-exporter-otlp-1.39.0.jar /app/opentelemetry-exporter-otlp.jar +COPY build/libs/connector.jar /app/connector.jar diff --git a/advanced/advanced-01-open-telemetry/open-telemetry-runtime/build.gradle.kts b/advanced/advanced-01-open-telemetry/open-telemetry-runtime/build.gradle.kts index 0b03b2ef..b6c72176 100644 --- a/advanced/advanced-01-open-telemetry/open-telemetry-runtime/build.gradle.kts +++ b/advanced/advanced-01-open-telemetry/open-telemetry-runtime/build.gradle.kts @@ -49,7 +49,7 @@ dependencies { implementation(libs.edc.api.observability) implementation(libs.edc.auth.tokenbased) - implementation(libs.opentelemetry.exporter.jaeger) + implementation(libs.opentelemetry.exporter.otlp) runtimeOnly(libs.edc.monitor.jdk.logger) } @@ -68,7 +68,7 @@ tasks.register("copyOpenTelemetryJar", Copy::class) { dependencies { openTelemetry(libs.opentelemetry.javaagent) - openTelemetry(libs.opentelemetry.exporter.jaeger) + openTelemetry(libs.opentelemetry.exporter.otlp) } from(openTelemetry) diff --git a/advanced/advanced-01-open-telemetry/open-telemetry-runtime/src/main/java/org/eclipse/edc/sample/runtime/SeedVaultExtension.java b/advanced/advanced-01-open-telemetry/open-telemetry-runtime/src/main/java/org/eclipse/edc/sample/runtime/SeedVaultExtension.java new file mode 100644 index 00000000..171d96ff --- /dev/null +++ b/advanced/advanced-01-open-telemetry/open-telemetry-runtime/src/main/java/org/eclipse/edc/sample/runtime/SeedVaultExtension.java @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0 + * + * SPDX-License-Identifier: Apache-2.0 + * + * Contributors: + * Bayerische Motoren Werke Aktiengesellschaft (BMW AG) - initial API and implementation + * + */ + +package org.eclipse.edc.sample.runtime; + +import org.eclipse.edc.runtime.metamodel.annotation.Inject; +import org.eclipse.edc.spi.security.Vault; +import org.eclipse.edc.spi.system.ServiceExtension; +import org.eclipse.edc.spi.system.ServiceExtensionContext; + +public class SeedVaultExtension implements ServiceExtension { + + @Inject + private Vault vault; + + private static final String PUBLIC_KEY = """ + -----BEGIN CERTIFICATE----- + MIIDazCCAlOgAwIBAgIUZ3/sZXYzW4PjmOXKrZn6WBmUJ+4wDQYJKoZIhvcNAQEL + BQAwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoM + GEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDAeFw0yMjAyMjMxNTA2MDNaFw0zMjAy + MjExNTA2MDNaMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEw + HwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwggEiMA0GCSqGSIb3DQEB + AQUAA4IBDwAwggEKAoIBAQDBl6XaJnXTL+6DWip3aBhU+MzmY4d1V9hbTm1tiZ3g + E0VbUrvGO3LoYaxpPv6zFmsg3uJv6JxVAde7EddidN0ITHB9cQNdAfdUJ5njmsGS + PbdQuOQTHw0aG7/QvTI/nsvfEE6e0lbV/0e7DHacZT/+OztBH1RwkG2ymM94Hf8H + I6x7q6yfRTAZOqeOMrPCYTcluAgE9NskoPvjX5qASakBtXISKIsOU84N0/2HDN3W + EGMXvoHUQu6vrij6BwiwxKaw1AKwWENKoga775bPXN3M+JTSaIKE7dZbKzvx0Zi0 + h5X+bxc3BJi3Z/CsUBCzE+Y0SFetOiYmyl/2YmnneYoVAgMBAAGjUzBRMB0GA1Ud + DgQWBBTvK1wVERwjni4B2vdH7KtEJeVWFzAfBgNVHSMEGDAWgBTvK1wVERwjni4B + 2vdH7KtEJeVWFzAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBn + QHiPA7OBYukHd9gS7c0HXE+fsWcS3GZeLqcHfQQnV3pte1vTmu9//IVW71wNCJ1/ + rySRyODPQoPehxEcyHwupNZSzXK//nPlTdSgjMfFxscvt1YndyQLQYCfyOJMixAe + Aqrb14GTFHUUrdor0PyElhkULjkOXUrSIsdBrfWrwLTkelE8NK3tb5ZG8KPzD9Jy + +NwEPPr9d+iHkUkM7EFWw/cl56wka9ryBb97RI7DqbO6/j6OXHMk4GByxKv7DSIR + IvF9/Dw20qytajtaHV0pluFcOBuFc0NfiDvCaQlbTsfjzbc6UmZWbOi9YOJl3VQ/ + g3h+15GuzbsSzOCOEYOT + -----END CERTIFICATE----- + """; + + private static final String PRIVATE_KEY = """ + -----BEGIN PRIVATE KEY----- + MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDBl6XaJnXTL+6D + Wip3aBhU+MzmY4d1V9hbTm1tiZ3gE0VbUrvGO3LoYaxpPv6zFmsg3uJv6JxVAde7 + EddidN0ITHB9cQNdAfdUJ5njmsGSPbdQuOQTHw0aG7/QvTI/nsvfEE6e0lbV/0e7 + DHacZT/+OztBH1RwkG2ymM94Hf8HI6x7q6yfRTAZOqeOMrPCYTcluAgE9NskoPvj + X5qASakBtXISKIsOU84N0/2HDN3WEGMXvoHUQu6vrij6BwiwxKaw1AKwWENKoga7 + 75bPXN3M+JTSaIKE7dZbKzvx0Zi0h5X+bxc3BJi3Z/CsUBCzE+Y0SFetOiYmyl/2 + YmnneYoVAgMBAAECggEBAJHXiN6bctAyn+DcoHlsNkhtVw+Jk5bXIutGXjHTJtiU + K//siAGC78IZMyXmi0KndPVCdBwShROVW8xWWIiXuZxy2Zvm872xqX4Ah3JsN7/Q + NrXdVBUDo38zwIGkxqIfIz9crZ4An+J/eq5zaTfRHzCLtswMqjRS2hFeBY5cKrBY + 4bkSDGTP/c5cP7xS/UwaiTR2Ptd41f4zTyd4l5rl30TYHpazQNlbdxcOV4jh2Rnp + E0+cFEvEfeagVq7RmfBScKG5pk4qcRG0q2QHMyK5y00hdYvhdRjSgN7xIDkeO5B8 + s8/tSLU78nCl2gA9IKxTXYLitpISwZ81Q04mEAKRRtECgYEA+6lKnhn//aXerkLo + ZOLOjWQZhh005jHdNxX7DZqLpTrrfxc8v15KWUkAK1H0QHqYvfPrbbsBV1MY1xXt + sKmkeu/k8fJQzCIvFN4K2J5W5kMfq9PSw5d3XPeDaQuXUVaxBVp0gzPEPHmkKRbA + AkUqY0oJwA9gMKf8dK+flmLZfbsCgYEAxO4Roj2G46/Oox1GEZGxdLpiMpr9rEdR + JlSZ9kMGfddNLV7sFp6yPXDcyc/AOqeNj7tw1MyoT3Ar454+V0q83EZzCXvs4U6f + jUrfFcoVWIwf9AV/J4KWzMIzfqPIeNwqymZKd6BrZgcXXvAEPWt27mwO4a1GhC4G + oZv0t3lAsm8CgYAQ8C0IhSF4tgBN5Ez19VoHpDQflbmowLRt77nNCZjajyOokyzQ + iI0ig0pSoBp7eITtTAyNfyew8/PZDi3IVTKv35OeQTv08VwP4H4EZGve5aetDf3C + kmBDTpl2qYQOwnH5tUPgTMypcVp+NXzI6lTXB/WuCprjy3qvc96e5ZpT3wKBgQC8 + Xny/k9rTL/eYTwgXBiWYYjBL97VudUlKQOKEjNhIxwkrvQBXIrWbz7lh0Tcu49al + BcaHxru4QLO6pkM7fGHq0fh3ufJ8EZjMrjF1xjdk26Q05o0aXe+hLKHVIRVBhlfo + ArB4fRo+HcpdJXjox0KcDQCvHe+1v9DYBTWvymv4QQKBgBy3YH7hKz35DcXvA2r4 + Kis9a4ycuZqTXockO4rkcIwC6CJp9JbHDIRzig8HYOaRqmZ4a+coqLmddXr2uOF1 + 7+iAxxG1KzdT6uFNd+e/j2cdUjnqcSmz49PRtdDswgyYhoDT+W4yVGNQ4VuKg6a3 + Z3pC+KTdoHSKeA2FyAGnSUpD + -----END PRIVATE KEY----- + """; + + @Override + public void initialize(ServiceExtensionContext context) { + vault.storeSecret("public-key", PUBLIC_KEY); + vault.storeSecret("private-key", PRIVATE_KEY); + } +} diff --git a/advanced/advanced-01-open-telemetry/open-telemetry-runtime/src/main/resources/META-INF/services/org.eclipse.edc.spi.system.ServiceExtension b/advanced/advanced-01-open-telemetry/open-telemetry-runtime/src/main/resources/META-INF/services/org.eclipse.edc.spi.system.ServiceExtension new file mode 100644 index 00000000..eaca6845 --- /dev/null +++ b/advanced/advanced-01-open-telemetry/open-telemetry-runtime/src/main/resources/META-INF/services/org.eclipse.edc.spi.system.ServiceExtension @@ -0,0 +1 @@ +org.eclipse.edc.sample.runtime.SeedVaultExtension diff --git a/advanced/advanced-01-open-telemetry/resources/negotiate-contract.json b/advanced/advanced-01-open-telemetry/resources/negotiate-contract.json index 82fe8036..44b73204 100644 --- a/advanced/advanced-01-open-telemetry/resources/negotiate-contract.json +++ b/advanced/advanced-01-open-telemetry/resources/negotiate-contract.json @@ -3,7 +3,7 @@ "@vocab": "https://w3id.org/edc/v0.0.1/ns/" }, "@type": "ContractRequest", - "counterPartyAddress": "http://localhost:19194/protocol", + "counterPartyAddress": "http://provider:19194/protocol", "protocol": "dataspace-protocol-http", "policy": { "@context": "http://www.w3.org/ns/odrl.jsonld", diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 45fa2298..28599df1 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -73,7 +73,7 @@ junit-jupiter-params = { module = "org.junit.jupiter:junit-jupiter-params", vers junit-pioneer = { module = "org.junit-pioneer:junit-pioneer", version.ref = "junit-pioneer" } okhttp-mockwebserver = { module = "com.squareup.okhttp3:mockwebserver", version.ref = "okhttp-mockwebserver" } opentelemetry-annotations = { module = "io.opentelemetry:opentelemetry-extension-annotations", version = "1.18.0" } -opentelemetry-exporter-jaeger = { module = "io.opentelemetry:opentelemetry-exporter-jaeger", version = "1.34.1" } +opentelemetry-exporter-otlp = { module = "io.opentelemetry:opentelemetry-exporter-otlp", version = "1.39.0" } opentelemetry-javaagent = { module = "io.opentelemetry.javaagent:opentelemetry-javaagent", version = "2.4.0" } restAssured = { module = "io.rest-assured:rest-assured", version.ref = "restAssured" } testcontainers = { module = "org.testcontainers:testcontainers", version.ref = "testcontainers" } diff --git a/system-tests/build.gradle.kts b/system-tests/build.gradle.kts index 82cabece..c9076e34 100644 --- a/system-tests/build.gradle.kts +++ b/system-tests/build.gradle.kts @@ -48,3 +48,7 @@ dependencies { testCompileOnly(project(":policy:policy-01-policy-enforcement:policy-enforcement-consumer")) testCompileOnly(project(":policy:policy-01-policy-enforcement:policy-functions")) } + +tasks.compileJava { + dependsOn(":advanced:advanced-01-open-telemetry:open-telemetry-runtime:build") +}