From 4cd1ba2f8eadd7b3f3c29a914efec03512a51d82 Mon Sep 17 00:00:00 2001 From: Paul Latzelsperger Date: Thu, 16 Apr 2026 16:00:26 +0200 Subject: [PATCH 1/2] feat: adopt Telemetry mechanism from EDC --- .../CredentialRequestManagerImpl.java | 6 ++---- .../edc/identityhub/did/DidDocumentServiceImpl.java | 7 ++++--- .../edc/identityhub/did/DidServicesExtension.java | 5 ++++- .../identityhub/did/DidDocumentServiceImplTest.java | 2 +- .../ParticipantContextCoordinatorExtension.java | 5 ++++- .../ParticipantContextEventCoordinator.java | 13 +++++++------ .../ParticipantContextEventPublisher.java | 7 +++++-- .../ParticipantContextExtension.java | 5 ++++- ...tyHubParticipantContextEventCoordinatorTest.java | 2 +- .../provisioner/StsAccountProvisionerExtension.java | 6 ++++-- .../provisioner/StsAccountProvisionerImpl.java | 7 ++++--- .../provisioner/StsAccountProvisionerImplTest.java | 2 +- .../dcp/issuer/DcpIssuerCoreExtension.java | 5 ++++- .../protocols/dcp/issuer/DcpIssuerServiceImpl.java | 7 ++++--- .../dcp/issuer/DcpIssuerServiceImplTest.java | 2 +- .../events/ParticipantContextEvent.java | 13 ++++++++++--- 16 files changed, 60 insertions(+), 34 deletions(-) diff --git a/core/identity-hub-core/src/main/java/org/eclipse/edc/identityhub/core/services/verifiablecredential/CredentialRequestManagerImpl.java b/core/identity-hub-core/src/main/java/org/eclipse/edc/identityhub/core/services/verifiablecredential/CredentialRequestManagerImpl.java index 8a8c0c1bb..b5268c59d 100644 --- a/core/identity-hub-core/src/main/java/org/eclipse/edc/identityhub/core/services/verifiablecredential/CredentialRequestManagerImpl.java +++ b/core/identity-hub-core/src/main/java/org/eclipse/edc/identityhub/core/services/verifiablecredential/CredentialRequestManagerImpl.java @@ -14,7 +14,6 @@ package org.eclipse.edc.identityhub.core.services.verifiablecredential; -import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.trace.SpanKind; import io.opentelemetry.instrumentation.annotations.WithSpan; import jakarta.json.JsonObject; @@ -42,7 +41,6 @@ import org.eclipse.edc.spi.response.StatusResult; import org.eclipse.edc.spi.result.Result; import org.eclipse.edc.spi.result.ServiceResult; -import org.eclipse.edc.spi.telemetry.Telemetry; import org.eclipse.edc.statemachine.AbstractStateEntityManager; import org.eclipse.edc.statemachine.Processor; import org.eclipse.edc.statemachine.ProcessorImpl; @@ -91,7 +89,7 @@ private CredentialRequestManagerImpl() { @Override public ServiceResult initiateRequest(String participantContextId, String issuerDid, String holderPid, List requestedCredentials) { - var traceContext = new Telemetry(GlobalOpenTelemetry.get()).getCurrentTraceContext(); + var traceContext = telemetry.getCurrentTraceContext(); var newRequest = HolderCredentialRequest.Builder.newInstance() .id(holderPid) @@ -178,7 +176,7 @@ private ProcessorImpl createProcessor(Function> processInitial(HolderCredentialRequest holderCredentialRequest) { monitor.debug("Processing '%s' request '%s'".formatted(holderCredentialRequest.stateAsString(), holderCredentialRequest.getHolderPid())); - return new Telemetry(GlobalOpenTelemetry.get()).contextPropagationMiddleware(() -> { + return telemetry.contextPropagationMiddleware(() -> { var result = getCredentialRequestEndpoint(holderCredentialRequest) .compose(endpoint -> sendCredentialRequest(holderCredentialRequest, endpoint)) .compose(issuerPid -> handleCredentialResponse(issuerPid, holderCredentialRequest)) diff --git a/core/identity-hub-did/src/main/java/org/eclipse/edc/identityhub/did/DidDocumentServiceImpl.java b/core/identity-hub-did/src/main/java/org/eclipse/edc/identityhub/did/DidDocumentServiceImpl.java index 72b930746..ee252dcf6 100644 --- a/core/identity-hub-did/src/main/java/org/eclipse/edc/identityhub/did/DidDocumentServiceImpl.java +++ b/core/identity-hub-did/src/main/java/org/eclipse/edc/identityhub/did/DidDocumentServiceImpl.java @@ -14,7 +14,6 @@ package org.eclipse.edc.identityhub.did; -import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.trace.SpanKind; import io.opentelemetry.instrumentation.annotations.WithSpan; import org.eclipse.edc.iam.did.spi.document.DidDocument; @@ -66,15 +65,17 @@ public class DidDocumentServiceImpl implements DidDocumentService, EventSubscrib private final ParticipantContextStore participantContextStore; private final Monitor monitor; private final KeyParserRegistry keyParserRegistry; + private final Telemetry telemetry; public DidDocumentServiceImpl(TransactionContext transactionContext, DidResourceStore didResourceStore, DidDocumentPublisherRegistry registry, - ParticipantContextStore participantContextStore, Monitor monitor, KeyParserRegistry keyParserRegistry) { + ParticipantContextStore participantContextStore, Monitor monitor, KeyParserRegistry keyParserRegistry, Telemetry telemetry) { this.transactionContext = transactionContext; this.didResourceStore = didResourceStore; this.registry = registry; this.participantContextStore = participantContextStore; this.monitor = monitor; this.keyParserRegistry = keyParserRegistry; + this.telemetry = telemetry; } @Override @@ -267,7 +268,7 @@ public void on(EventEnvelope eventEnvelope) { }; if (payload instanceof TraceCarrier carrier) { - new Telemetry(GlobalOpenTelemetry.get()).contextPropagationMiddleware(s, carrier).get(); + telemetry.contextPropagationMiddleware(s, carrier).get(); } else { s.get(); } diff --git a/core/identity-hub-did/src/main/java/org/eclipse/edc/identityhub/did/DidServicesExtension.java b/core/identity-hub-did/src/main/java/org/eclipse/edc/identityhub/did/DidServicesExtension.java index 35fc9b825..0f4702cac 100644 --- a/core/identity-hub-did/src/main/java/org/eclipse/edc/identityhub/did/DidServicesExtension.java +++ b/core/identity-hub-did/src/main/java/org/eclipse/edc/identityhub/did/DidServicesExtension.java @@ -28,6 +28,7 @@ import org.eclipse.edc.spi.event.EventRouter; import org.eclipse.edc.spi.system.ServiceExtension; import org.eclipse.edc.spi.system.ServiceExtensionContext; +import org.eclipse.edc.spi.telemetry.Telemetry; import org.eclipse.edc.transaction.spi.TransactionContext; import static org.eclipse.edc.identityhub.did.DidServicesExtension.NAME; @@ -46,6 +47,8 @@ public class DidServicesExtension implements ServiceExtension { @Inject private ParticipantContextStore participantContextStore; private DidDocumentPublisherRegistry didPublisherRegistry; + @Inject + private Telemetry telemetry; @Override public String name() { @@ -63,7 +66,7 @@ public DidDocumentPublisherRegistry getDidPublisherRegistry() { @Provider public DidDocumentService createDidDocumentService(ServiceExtensionContext context) { var service = new DidDocumentServiceImpl(transactionContext, didResourceStore, - getDidPublisherRegistry(), participantContextStore, context.getMonitor().withPrefix("DidDocumentService"), keyParserRegistry); + getDidPublisherRegistry(), participantContextStore, context.getMonitor().withPrefix("DidDocumentService"), keyParserRegistry, telemetry); eventRouter.registerSync(ParticipantContextUpdated.class, service); eventRouter.registerSync(KeyPairRevoked.class, service); eventRouter.registerSync(KeyPairActivated.class, service); diff --git a/core/identity-hub-did/src/test/java/org/eclipse/edc/identityhub/did/DidDocumentServiceImplTest.java b/core/identity-hub-did/src/test/java/org/eclipse/edc/identityhub/did/DidDocumentServiceImplTest.java index 6fac8dd39..35890d080 100644 --- a/core/identity-hub-did/src/test/java/org/eclipse/edc/identityhub/did/DidDocumentServiceImplTest.java +++ b/core/identity-hub-did/src/test/java/org/eclipse/edc/identityhub/did/DidDocumentServiceImplTest.java @@ -82,7 +82,7 @@ void setUp() { registry.register(new JwkParser(new ObjectMapper(), mock())); registry.register(new PemParser(mock())); monitorMock = mock(); - service = new DidDocumentServiceImpl(trx, didResourceStoreMock, publisherRegistry, participantContextServiceMock, monitorMock, registry); + service = new DidDocumentServiceImpl(trx, didResourceStoreMock, publisherRegistry, participantContextServiceMock, monitorMock, registry, mock()); when(participantContextServiceMock.findById(any())).thenReturn(StoreResult.success(ParticipantContext.Builder.newInstance() .participantContextId(TEST_PARTICIPANT_ID) diff --git a/core/identity-hub-participants/src/main/java/org/eclipse/edc/identityhub/participantcontext/ParticipantContextCoordinatorExtension.java b/core/identity-hub-participants/src/main/java/org/eclipse/edc/identityhub/participantcontext/ParticipantContextCoordinatorExtension.java index 52c3a847a..1006c09ae 100644 --- a/core/identity-hub-participants/src/main/java/org/eclipse/edc/identityhub/participantcontext/ParticipantContextCoordinatorExtension.java +++ b/core/identity-hub-participants/src/main/java/org/eclipse/edc/identityhub/participantcontext/ParticipantContextCoordinatorExtension.java @@ -24,6 +24,7 @@ import org.eclipse.edc.spi.event.EventRouter; import org.eclipse.edc.spi.system.ServiceExtension; import org.eclipse.edc.spi.system.ServiceExtensionContext; +import org.eclipse.edc.spi.telemetry.Telemetry; import java.time.Clock; @@ -43,6 +44,8 @@ public class ParticipantContextCoordinatorExtension implements ServiceExtension private EventRouter eventRouter; @Inject private IdentityHubParticipantContextService participantContextService; + @Inject + private Telemetry telemetry; @Override public String name() { @@ -52,7 +55,7 @@ public String name() { @Override public void initialize(ServiceExtensionContext context) { var coordinator = new ParticipantContextEventCoordinator(context.getMonitor().withPrefix("ParticipantContextEventCoordinator"), - didDocumentService, keyPairService, participantContextService); + didDocumentService, keyPairService, participantContextService, telemetry); eventRouter.registerSync(ParticipantContextCreated.class, coordinator); eventRouter.registerSync(ParticipantContextDeleting.class, coordinator); diff --git a/core/identity-hub-participants/src/main/java/org/eclipse/edc/identityhub/participantcontext/ParticipantContextEventCoordinator.java b/core/identity-hub-participants/src/main/java/org/eclipse/edc/identityhub/participantcontext/ParticipantContextEventCoordinator.java index e77fd9e4a..e409e3555 100644 --- a/core/identity-hub-participants/src/main/java/org/eclipse/edc/identityhub/participantcontext/ParticipantContextEventCoordinator.java +++ b/core/identity-hub-participants/src/main/java/org/eclipse/edc/identityhub/participantcontext/ParticipantContextEventCoordinator.java @@ -14,7 +14,6 @@ package org.eclipse.edc.identityhub.participantcontext; -import io.opentelemetry.api.GlobalOpenTelemetry; import org.eclipse.edc.iam.did.spi.document.DidDocument; import org.eclipse.edc.identityhub.spi.did.DidDocumentService; import org.eclipse.edc.identityhub.spi.keypair.KeyPairService; @@ -53,12 +52,14 @@ class ParticipantContextEventCoordinator implements EventSubscriber { private final DidDocumentService didDocumentService; private final KeyPairService keyPairService; private final IdentityHubParticipantContextService participantContextService; + private final Telemetry telemetry; - ParticipantContextEventCoordinator(Monitor monitor, DidDocumentService didDocumentService, KeyPairService keyPairService, IdentityHubParticipantContextService participantContextService) { + ParticipantContextEventCoordinator(Monitor monitor, DidDocumentService didDocumentService, KeyPairService keyPairService, IdentityHubParticipantContextService participantContextService, Telemetry telemetry) { this.monitor = monitor; this.didDocumentService = didDocumentService; this.keyPairService = keyPairService; this.participantContextService = participantContextService; + this.telemetry = telemetry; } @Override @@ -67,7 +68,7 @@ public void on(EventEnvelope event) { if (payload instanceof ParticipantContextCreated createdEvent) { var manifest = createdEvent.getManifest(); - new Telemetry(GlobalOpenTelemetry.get()).contextPropagationMiddleware(() -> { + telemetry.contextPropagationMiddleware(() -> { var doc = DidDocument.Builder.newInstance() .id(manifest.getDid()) .service(manifest.getServiceEndpoints().stream().toList()) @@ -87,14 +88,14 @@ public void on(EventEnvelope event) { : success()) .onFailure(f -> monitor.warning("%s".formatted(f.getFailureDetail()))); return null; - }, createdEvent).get(); + }, createdEvent); } else if (payload instanceof ParticipantContextDeleting deletionEvent) { var participantContext = deletionEvent.getParticipantContext(); // unpublish and delete did document, remove keypairs - new Telemetry(GlobalOpenTelemetry.get()).contextPropagationMiddleware(() -> { + telemetry.contextPropagationMiddleware(() -> { didDocumentService.unpublish(participantContext.getDid()) .compose(u -> didDocumentService.deleteById(participantContext.getDid())) .compose(u -> keyPairService.query(queryByParticipantContextId(participantContext.getParticipantContextId()).build())) @@ -104,7 +105,7 @@ public void on(EventEnvelope event) { .orElse(success())) .onFailure(f -> monitor.warning("Removing key pairs from a deleted ParticipantContext failed: %s".formatted(f.getFailureDetail()))); return null; - }, deletionEvent).get(); + }, deletionEvent); } else { monitor.warning("Received event with unexpected payload type: %s".formatted(payload.getClass())); } diff --git a/core/identity-hub-participants/src/main/java/org/eclipse/edc/identityhub/participantcontext/ParticipantContextEventPublisher.java b/core/identity-hub-participants/src/main/java/org/eclipse/edc/identityhub/participantcontext/ParticipantContextEventPublisher.java index c4863b9f4..da1d17482 100644 --- a/core/identity-hub-participants/src/main/java/org/eclipse/edc/identityhub/participantcontext/ParticipantContextEventPublisher.java +++ b/core/identity-hub-participants/src/main/java/org/eclipse/edc/identityhub/participantcontext/ParticipantContextEventPublisher.java @@ -24,16 +24,19 @@ import org.eclipse.edc.identityhub.spi.participantcontext.model.ParticipantManifest; import org.eclipse.edc.spi.event.EventEnvelope; import org.eclipse.edc.spi.event.EventRouter; +import org.eclipse.edc.spi.telemetry.Telemetry; import java.time.Clock; public class ParticipantContextEventPublisher implements ParticipantContextListener { private final Clock clock; private final EventRouter eventRouter; + private final Telemetry telemetry; - public ParticipantContextEventPublisher(Clock clock, EventRouter eventRouter) { + public ParticipantContextEventPublisher(Clock clock, EventRouter eventRouter, Telemetry telemetry) { this.clock = clock; this.eventRouter = eventRouter; + this.telemetry = telemetry; } @Override @@ -73,7 +76,7 @@ public void deleted(IdentityHubParticipantContext deletedContext) { private void publish(ParticipantContextEvent event) { var envelope = EventEnvelope.Builder.newInstance() - .payload(event) + .payload(event.withTraceContext(telemetry.getCurrentTraceContext())) .at(clock.millis()) .build(); eventRouter.publish(envelope); diff --git a/core/identity-hub-participants/src/main/java/org/eclipse/edc/identityhub/participantcontext/ParticipantContextExtension.java b/core/identity-hub-participants/src/main/java/org/eclipse/edc/identityhub/participantcontext/ParticipantContextExtension.java index 422767104..f3f7f91e4 100644 --- a/core/identity-hub-participants/src/main/java/org/eclipse/edc/identityhub/participantcontext/ParticipantContextExtension.java +++ b/core/identity-hub-participants/src/main/java/org/eclipse/edc/identityhub/participantcontext/ParticipantContextExtension.java @@ -26,6 +26,7 @@ import org.eclipse.edc.spi.event.EventRouter; import org.eclipse.edc.spi.security.Vault; import org.eclipse.edc.spi.system.ServiceExtension; +import org.eclipse.edc.spi.telemetry.Telemetry; import org.eclipse.edc.transaction.spi.TransactionContext; import java.time.Clock; @@ -55,6 +56,8 @@ public class ParticipantContextExtension implements ServiceExtension { private ParticipantContextObservable participantContextObservable; @Inject private ParticipantContextConfigService configService; + @Inject + private Telemetry telemetry; @Override public String name() { @@ -70,7 +73,7 @@ public IdentityHubParticipantContextService createParticipantService() { public ParticipantContextObservable participantContextObservable() { if (participantContextObservable == null) { participantContextObservable = new ParticipantContextObservableImpl(); - participantContextObservable.registerListener(new ParticipantContextEventPublisher(clock, eventRouter)); + participantContextObservable.registerListener(new ParticipantContextEventPublisher(clock, eventRouter, telemetry)); } return participantContextObservable; } diff --git a/core/identity-hub-participants/src/test/java/org/eclipse/edc/identityhub/participantcontext/IdentityHubParticipantContextEventCoordinatorTest.java b/core/identity-hub-participants/src/test/java/org/eclipse/edc/identityhub/participantcontext/IdentityHubParticipantContextEventCoordinatorTest.java index 2772f31ce..db8dc52c1 100644 --- a/core/identity-hub-participants/src/test/java/org/eclipse/edc/identityhub/participantcontext/IdentityHubParticipantContextEventCoordinatorTest.java +++ b/core/identity-hub-participants/src/test/java/org/eclipse/edc/identityhub/participantcontext/IdentityHubParticipantContextEventCoordinatorTest.java @@ -49,7 +49,7 @@ class IdentityHubParticipantContextEventCoordinatorTest { private final DidDocumentService didDocumentService = mock(); private final KeyPairService keyPairService = mock(); private final IdentityHubParticipantContextService participantContextService = mock(); - private final ParticipantContextEventCoordinator coordinator = new ParticipantContextEventCoordinator(monitor, didDocumentService, keyPairService, participantContextService); + private final ParticipantContextEventCoordinator coordinator = new ParticipantContextEventCoordinator(monitor, didDocumentService, keyPairService, participantContextService, mock()); @BeforeEach void setup() { diff --git a/extensions/sts/sts-account-provisioner/src/main/java/org/eclipse/edc/identityhub/common/provisioner/StsAccountProvisionerExtension.java b/extensions/sts/sts-account-provisioner/src/main/java/org/eclipse/edc/identityhub/common/provisioner/StsAccountProvisionerExtension.java index d6d0e560f..13f02c18b 100644 --- a/extensions/sts/sts-account-provisioner/src/main/java/org/eclipse/edc/identityhub/common/provisioner/StsAccountProvisionerExtension.java +++ b/extensions/sts/sts-account-provisioner/src/main/java/org/eclipse/edc/identityhub/common/provisioner/StsAccountProvisionerExtension.java @@ -27,6 +27,7 @@ import org.eclipse.edc.spi.security.Vault; import org.eclipse.edc.spi.system.ServiceExtension; import org.eclipse.edc.spi.system.ServiceExtensionContext; +import org.eclipse.edc.spi.telemetry.Telemetry; import static java.util.Optional.ofNullable; import static org.eclipse.edc.identityhub.common.provisioner.StsAccountProvisionerExtension.NAME; @@ -43,7 +44,8 @@ public class StsAccountProvisionerExtension implements ServiceExtension { private StsClientSecretGenerator stsClientSecretGenerator; @Inject private StsAccountService accountService; - + @Inject + private Telemetry telemetry; private StsAccountProvisionerImpl provisioner; @@ -62,7 +64,7 @@ public void initialize(ServiceExtensionContext context) { public StsAccountProvisioner createProvisioner(ServiceExtensionContext context) { if (provisioner == null) { var monitor = context.getMonitor().withPrefix("STS-Account"); - provisioner = new StsAccountProvisionerImpl(monitor, vault, stsClientSecretGenerator(), accountService); + provisioner = new StsAccountProvisionerImpl(monitor, vault, stsClientSecretGenerator(), accountService, telemetry); eventRouter.registerSync(ParticipantContextDeleted.class, provisioner); eventRouter.registerSync(KeyPairRevoked.class, provisioner); eventRouter.registerSync(KeyPairRotated.class, provisioner); diff --git a/extensions/sts/sts-account-provisioner/src/main/java/org/eclipse/edc/identityhub/common/provisioner/StsAccountProvisionerImpl.java b/extensions/sts/sts-account-provisioner/src/main/java/org/eclipse/edc/identityhub/common/provisioner/StsAccountProvisionerImpl.java index 84c364e24..b50f667da 100644 --- a/extensions/sts/sts-account-provisioner/src/main/java/org/eclipse/edc/identityhub/common/provisioner/StsAccountProvisionerImpl.java +++ b/extensions/sts/sts-account-provisioner/src/main/java/org/eclipse/edc/identityhub/common/provisioner/StsAccountProvisionerImpl.java @@ -14,7 +14,6 @@ package org.eclipse.edc.identityhub.common.provisioner; -import io.opentelemetry.api.GlobalOpenTelemetry; import org.eclipse.edc.iam.decentralizedclaims.sts.spi.model.StsAccount; import org.eclipse.edc.iam.decentralizedclaims.sts.spi.service.StsAccountService; import org.eclipse.edc.iam.decentralizedclaims.sts.spi.service.StsClientSecretGenerator; @@ -43,15 +42,17 @@ public class StsAccountProvisionerImpl implements EventSubscriber, StsAccountPro private final Vault vault; private final StsClientSecretGenerator stsClientSecretGenerator; private final StsAccountService stsAccountService; + private final Telemetry telemetry; public StsAccountProvisionerImpl(Monitor monitor, Vault vault, StsClientSecretGenerator stsClientSecretGenerator, - StsAccountService stsAccountService) { + StsAccountService stsAccountService, Telemetry telemetry) { this.monitor = monitor; this.vault = vault; this.stsClientSecretGenerator = stsClientSecretGenerator; this.stsAccountService = stsAccountService; + this.telemetry = telemetry; } @Override @@ -59,7 +60,7 @@ public void on(EventEnvelope event) { var payload = event.getPayload(); ServiceResult result; if (payload instanceof ParticipantContextDeleted deletedEvent) { - result = new Telemetry(GlobalOpenTelemetry.get()).contextPropagationMiddleware(() -> { + result = telemetry.contextPropagationMiddleware(() -> { return stsAccountService.deleteAccount(deletedEvent.getParticipantContextId()); }, deletedEvent).get(); } else { diff --git a/extensions/sts/sts-account-provisioner/src/test/java/org/eclipse/edc/identityhub/common/provisioner/StsAccountProvisionerImplTest.java b/extensions/sts/sts-account-provisioner/src/test/java/org/eclipse/edc/identityhub/common/provisioner/StsAccountProvisionerImplTest.java index c8fbb293c..40bebc684 100644 --- a/extensions/sts/sts-account-provisioner/src/test/java/org/eclipse/edc/identityhub/common/provisioner/StsAccountProvisionerImplTest.java +++ b/extensions/sts/sts-account-provisioner/src/test/java/org/eclipse/edc/identityhub/common/provisioner/StsAccountProvisionerImplTest.java @@ -59,7 +59,7 @@ class StsAccountProvisionerImplTest { private final Monitor monitor = mock(); private final StsClientSecretGenerator stsClientSecretGenerator = parameters -> UUID.randomUUID().toString(); private final StsAccountService accountServiceMock = mock(); - private final StsAccountProvisionerImpl accountProvisioner = new StsAccountProvisionerImpl(monitor, vault, stsClientSecretGenerator, accountServiceMock); + private final StsAccountProvisionerImpl accountProvisioner = new StsAccountProvisionerImpl(monitor, vault, stsClientSecretGenerator, accountServiceMock, mock()); @Test void create() { diff --git a/protocols/dcp/dcp-issuer/dcp-issuer-core/src/main/java/org/eclipse/edc/identityhub/protocols/dcp/issuer/DcpIssuerCoreExtension.java b/protocols/dcp/dcp-issuer/dcp-issuer-core/src/main/java/org/eclipse/edc/identityhub/protocols/dcp/issuer/DcpIssuerCoreExtension.java index adb00b0ad..d08449849 100644 --- a/protocols/dcp/dcp-issuer/dcp-issuer-core/src/main/java/org/eclipse/edc/identityhub/protocols/dcp/issuer/DcpIssuerCoreExtension.java +++ b/protocols/dcp/dcp-issuer/dcp-issuer-core/src/main/java/org/eclipse/edc/identityhub/protocols/dcp/issuer/DcpIssuerCoreExtension.java @@ -39,6 +39,7 @@ import org.eclipse.edc.spi.monitor.Monitor; import org.eclipse.edc.spi.system.ServiceExtension; import org.eclipse.edc.spi.system.ServiceExtensionContext; +import org.eclipse.edc.spi.telemetry.Telemetry; import org.eclipse.edc.spi.types.TypeManager; import org.eclipse.edc.token.rules.ExpirationIssuedAtValidationRule; import org.eclipse.edc.token.rules.NotBeforeValidationRule; @@ -117,6 +118,8 @@ public class DcpIssuerCoreExtension implements ServiceExtension { private JtiValidationStore jtiValidationStore; @Setting(description = "Allow anonymous onboarding", defaultValue = "false", key = "edc.issuance.anonymous.allowed") private boolean allowAnonymousCredentialRequest; + @Inject + private Telemetry telemetry; @Override public void initialize(ServiceExtensionContext context) { @@ -135,7 +138,7 @@ public void initialize(ServiceExtensionContext context) { @Provider public DcpIssuerService createIssuerService() { - return new DcpIssuerServiceImpl(transactionContext, credentialDefinitionService, issuanceProcessStore, attestationPipeline, credentialRuleDefinitionEvaluator, profileRegistry); + return new DcpIssuerServiceImpl(transactionContext, credentialDefinitionService, issuanceProcessStore, attestationPipeline, credentialRuleDefinitionEvaluator, profileRegistry, telemetry); } @Provider diff --git a/protocols/dcp/dcp-issuer/dcp-issuer-core/src/main/java/org/eclipse/edc/identityhub/protocols/dcp/issuer/DcpIssuerServiceImpl.java b/protocols/dcp/dcp-issuer/dcp-issuer-core/src/main/java/org/eclipse/edc/identityhub/protocols/dcp/issuer/DcpIssuerServiceImpl.java index 24cc2d039..ab068c8fd 100644 --- a/protocols/dcp/dcp-issuer/dcp-issuer-core/src/main/java/org/eclipse/edc/identityhub/protocols/dcp/issuer/DcpIssuerServiceImpl.java +++ b/protocols/dcp/dcp-issuer/dcp-issuer-core/src/main/java/org/eclipse/edc/identityhub/protocols/dcp/issuer/DcpIssuerServiceImpl.java @@ -14,7 +14,6 @@ package org.eclipse.edc.identityhub.protocols.dcp.issuer; -import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.instrumentation.annotations.WithSpan; import org.eclipse.edc.iam.verifiablecredentials.spi.model.CredentialFormat; import org.eclipse.edc.identityhub.protocols.dcp.issuer.spi.DcpIssuerService; @@ -48,19 +47,21 @@ public class DcpIssuerServiceImpl implements DcpIssuerService { private final AttestationPipeline attestationPipeline; private final CredentialRuleDefinitionEvaluator credentialRuleDefinitionEvaluator; private final DcpProfileRegistry profileRegistry; + private final Telemetry telemetry; public DcpIssuerServiceImpl(TransactionContext transactionContext, CredentialDefinitionService credentialDefinitionService, IssuanceProcessStore issuanceProcessStore, AttestationPipeline attestationPipeline, CredentialRuleDefinitionEvaluator credentialRuleDefinitionEvaluator, - DcpProfileRegistry profileRegistry) { + DcpProfileRegistry profileRegistry, Telemetry telemetry) { this.transactionContext = transactionContext; this.credentialDefinitionService = credentialDefinitionService; this.issuanceProcessStore = issuanceProcessStore; this.attestationPipeline = attestationPipeline; this.credentialRuleDefinitionEvaluator = credentialRuleDefinitionEvaluator; this.profileRegistry = profileRegistry; + this.telemetry = telemetry; } @WithSpan(value = "issuance.initiate") @@ -158,7 +159,7 @@ private ServiceResult createIssuanceProcess(String participantC .claims(evaluationResponse.claims()) .participantContextId(participantContextId) .holderPid(holderPid) - .traceContext(new Telemetry(GlobalOpenTelemetry.get()).getCurrentTraceContext()) + .traceContext(telemetry.getCurrentTraceContext()) .credentialFormats(credentialFormats) .build(); diff --git a/protocols/dcp/dcp-issuer/dcp-issuer-core/src/test/java/org/eclipse/edc/identityhub/protocols/dcp/issuer/DcpIssuerServiceImplTest.java b/protocols/dcp/dcp-issuer/dcp-issuer-core/src/test/java/org/eclipse/edc/identityhub/protocols/dcp/issuer/DcpIssuerServiceImplTest.java index 8bec630fd..9dbb5da80 100644 --- a/protocols/dcp/dcp-issuer/dcp-issuer-core/src/test/java/org/eclipse/edc/identityhub/protocols/dcp/issuer/DcpIssuerServiceImplTest.java +++ b/protocols/dcp/dcp-issuer/dcp-issuer-core/src/test/java/org/eclipse/edc/identityhub/protocols/dcp/issuer/DcpIssuerServiceImplTest.java @@ -60,7 +60,7 @@ public class DcpIssuerServiceImplTest { private final CredentialRuleDefinitionEvaluator credentialRuleDefinitionEvaluator = mock(); private final DcpProfileRegistry dcpProfileRegistry = mock(); - private final DcpIssuerService dcpIssuerService = new DcpIssuerServiceImpl(transactionContext, credentialDefinitionService, issuanceProcessStore, attestationPipeline, credentialRuleDefinitionEvaluator, dcpProfileRegistry); + private final DcpIssuerService dcpIssuerService = new DcpIssuerServiceImpl(transactionContext, credentialDefinitionService, issuanceProcessStore, attestationPipeline, credentialRuleDefinitionEvaluator, dcpProfileRegistry, mock()); @Test diff --git a/spi/participant-context-spi/src/main/java/org/eclipse/edc/identityhub/spi/participantcontext/events/ParticipantContextEvent.java b/spi/participant-context-spi/src/main/java/org/eclipse/edc/identityhub/spi/participantcontext/events/ParticipantContextEvent.java index 6db078e39..c99488be0 100644 --- a/spi/participant-context-spi/src/main/java/org/eclipse/edc/identityhub/spi/participantcontext/events/ParticipantContextEvent.java +++ b/spi/participant-context-spi/src/main/java/org/eclipse/edc/identityhub/spi/participantcontext/events/ParticipantContextEvent.java @@ -14,10 +14,8 @@ package org.eclipse.edc.identityhub.spi.participantcontext.events; -import io.opentelemetry.api.GlobalOpenTelemetry; import org.eclipse.edc.identityhub.spi.participantcontext.model.IdentityHubParticipantContext; import org.eclipse.edc.spi.event.Event; -import org.eclipse.edc.spi.telemetry.Telemetry; import org.eclipse.edc.spi.telemetry.TraceCarrier; import java.util.Map; @@ -39,6 +37,11 @@ public Map getTraceContext() { return traceContext; } + public ParticipantContextEvent withTraceContext(Map traceContext) { + this.traceContext = traceContext; + return this; + } + public abstract static class Builder> { protected final T event; @@ -54,9 +57,13 @@ public B participantContextId(String participantContextId) { return self(); } + public B traceContext(Map traceContext) { + event.traceContext = traceContext; + return self(); + } + public T build() { Objects.requireNonNull((event.participantContextId)); - event.traceContext = new Telemetry(GlobalOpenTelemetry.get()).getCurrentTraceContext(); return event; } } From ab3167391f58c2444ed6db7df71786dec9a06363 Mon Sep 17 00:00:00 2001 From: Paul Latzelsperger Date: Fri, 17 Apr 2026 07:47:12 +0200 Subject: [PATCH 2/2] use instance instead of mock --- .../edc/identityhub/did/DidDocumentServiceImplTest.java | 3 ++- .../ParticipantContextEventCoordinator.java | 4 ++-- .../IdentityHubParticipantContextEventCoordinatorTest.java | 3 ++- .../common/provisioner/StsAccountProvisionerImplTest.java | 3 ++- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/core/identity-hub-did/src/test/java/org/eclipse/edc/identityhub/did/DidDocumentServiceImplTest.java b/core/identity-hub-did/src/test/java/org/eclipse/edc/identityhub/did/DidDocumentServiceImplTest.java index 35890d080..bd3a08cd8 100644 --- a/core/identity-hub-did/src/test/java/org/eclipse/edc/identityhub/did/DidDocumentServiceImplTest.java +++ b/core/identity-hub-did/src/test/java/org/eclipse/edc/identityhub/did/DidDocumentServiceImplTest.java @@ -42,6 +42,7 @@ import org.eclipse.edc.spi.query.QuerySpec; import org.eclipse.edc.spi.result.Result; import org.eclipse.edc.spi.result.StoreResult; +import org.eclipse.edc.spi.telemetry.Telemetry; import org.eclipse.edc.transaction.spi.NoopTransactionContext; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -82,7 +83,7 @@ void setUp() { registry.register(new JwkParser(new ObjectMapper(), mock())); registry.register(new PemParser(mock())); monitorMock = mock(); - service = new DidDocumentServiceImpl(trx, didResourceStoreMock, publisherRegistry, participantContextServiceMock, monitorMock, registry, mock()); + service = new DidDocumentServiceImpl(trx, didResourceStoreMock, publisherRegistry, participantContextServiceMock, monitorMock, registry, new Telemetry()); when(participantContextServiceMock.findById(any())).thenReturn(StoreResult.success(ParticipantContext.Builder.newInstance() .participantContextId(TEST_PARTICIPANT_ID) diff --git a/core/identity-hub-participants/src/main/java/org/eclipse/edc/identityhub/participantcontext/ParticipantContextEventCoordinator.java b/core/identity-hub-participants/src/main/java/org/eclipse/edc/identityhub/participantcontext/ParticipantContextEventCoordinator.java index e409e3555..57fa561db 100644 --- a/core/identity-hub-participants/src/main/java/org/eclipse/edc/identityhub/participantcontext/ParticipantContextEventCoordinator.java +++ b/core/identity-hub-participants/src/main/java/org/eclipse/edc/identityhub/participantcontext/ParticipantContextEventCoordinator.java @@ -88,7 +88,7 @@ public void on(EventEnvelope event) { : success()) .onFailure(f -> monitor.warning("%s".formatted(f.getFailureDetail()))); return null; - }, createdEvent); + }, createdEvent).get(); } else if (payload instanceof ParticipantContextDeleting deletionEvent) { @@ -105,7 +105,7 @@ public void on(EventEnvelope event) { .orElse(success())) .onFailure(f -> monitor.warning("Removing key pairs from a deleted ParticipantContext failed: %s".formatted(f.getFailureDetail()))); return null; - }, deletionEvent); + }, deletionEvent).get(); } else { monitor.warning("Received event with unexpected payload type: %s".formatted(payload.getClass())); } diff --git a/core/identity-hub-participants/src/test/java/org/eclipse/edc/identityhub/participantcontext/IdentityHubParticipantContextEventCoordinatorTest.java b/core/identity-hub-participants/src/test/java/org/eclipse/edc/identityhub/participantcontext/IdentityHubParticipantContextEventCoordinatorTest.java index db8dc52c1..a86c73178 100644 --- a/core/identity-hub-participants/src/test/java/org/eclipse/edc/identityhub/participantcontext/IdentityHubParticipantContextEventCoordinatorTest.java +++ b/core/identity-hub-participants/src/test/java/org/eclipse/edc/identityhub/participantcontext/IdentityHubParticipantContextEventCoordinatorTest.java @@ -25,6 +25,7 @@ import org.eclipse.edc.spi.event.EventEnvelope; import org.eclipse.edc.spi.monitor.Monitor; import org.eclipse.edc.spi.result.ServiceResult; +import org.eclipse.edc.spi.telemetry.Telemetry; import org.jetbrains.annotations.NotNull; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -49,7 +50,7 @@ class IdentityHubParticipantContextEventCoordinatorTest { private final DidDocumentService didDocumentService = mock(); private final KeyPairService keyPairService = mock(); private final IdentityHubParticipantContextService participantContextService = mock(); - private final ParticipantContextEventCoordinator coordinator = new ParticipantContextEventCoordinator(monitor, didDocumentService, keyPairService, participantContextService, mock()); + private final ParticipantContextEventCoordinator coordinator = new ParticipantContextEventCoordinator(monitor, didDocumentService, keyPairService, participantContextService, new Telemetry()); @BeforeEach void setup() { diff --git a/extensions/sts/sts-account-provisioner/src/test/java/org/eclipse/edc/identityhub/common/provisioner/StsAccountProvisionerImplTest.java b/extensions/sts/sts-account-provisioner/src/test/java/org/eclipse/edc/identityhub/common/provisioner/StsAccountProvisionerImplTest.java index 40bebc684..f67566435 100644 --- a/extensions/sts/sts-account-provisioner/src/test/java/org/eclipse/edc/identityhub/common/provisioner/StsAccountProvisionerImplTest.java +++ b/extensions/sts/sts-account-provisioner/src/test/java/org/eclipse/edc/identityhub/common/provisioner/StsAccountProvisionerImplTest.java @@ -30,6 +30,7 @@ import org.eclipse.edc.spi.result.Result; import org.eclipse.edc.spi.result.ServiceResult; import org.eclipse.edc.spi.security.Vault; +import org.eclipse.edc.spi.telemetry.Telemetry; import org.junit.jupiter.api.Test; import java.util.Map; @@ -59,7 +60,7 @@ class StsAccountProvisionerImplTest { private final Monitor monitor = mock(); private final StsClientSecretGenerator stsClientSecretGenerator = parameters -> UUID.randomUUID().toString(); private final StsAccountService accountServiceMock = mock(); - private final StsAccountProvisionerImpl accountProvisioner = new StsAccountProvisionerImpl(monitor, vault, stsClientSecretGenerator, accountServiceMock, mock()); + private final StsAccountProvisionerImpl accountProvisioner = new StsAccountProvisionerImpl(monitor, vault, stsClientSecretGenerator, accountServiceMock, new Telemetry()); @Test void create() {