diff --git a/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/build.gradle.kts b/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/build.gradle.kts index 989236a82..c83b1e869 100644 --- a/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/build.gradle.kts +++ b/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/build.gradle.kts @@ -19,9 +19,9 @@ dependencies { implementation("org.hypertrace.core.datamodel:data-model:0.1.16") implementation("org.hypertrace.entity.service:entity-service-client:0.6.8") implementation("org.hypertrace.core.serviceframework:platform-metrics:0.1.26") - implementation("org.hypertrace.core.grpcutils:grpc-client-utils:0.4.0") + implementation("org.hypertrace.core.grpcutils:grpc-client-utils:0.5.2") implementation("org.hypertrace.config.service:spaces-config-service-api:0.1.0") - implementation("org.hypertrace.core.grpcutils:grpc-context-utils:0.4.0") + implementation("org.hypertrace.core.grpcutils:grpc-context-utils:0.5.2") implementation("com.typesafe:config:1.4.1") implementation("org.apache.httpcomponents:httpclient:4.5.13") diff --git a/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/src/main/java/org/hypertrace/traceenricher/enrichment/enrichers/backend/AbstractBackendEntityEnricher.java b/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/src/main/java/org/hypertrace/traceenricher/enrichment/enrichers/backend/AbstractBackendEntityEnricher.java index 104659efa..d5ed889fb 100644 --- a/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/src/main/java/org/hypertrace/traceenricher/enrichment/enrichers/backend/AbstractBackendEntityEnricher.java +++ b/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/src/main/java/org/hypertrace/traceenricher/enrichment/enrichers/backend/AbstractBackendEntityEnricher.java @@ -19,6 +19,7 @@ import org.hypertrace.core.datamodel.shared.SpanAttributeUtils; import org.hypertrace.core.datamodel.shared.StructuredTraceGraph; import org.hypertrace.core.datamodel.shared.trace.AttributeValueCreator; +import org.hypertrace.core.grpcutils.context.RequestContext; import org.hypertrace.entity.constants.v1.BackendAttribute; import org.hypertrace.entity.data.service.client.EdsClient; import org.hypertrace.entity.data.service.v1.AttributeValue; @@ -95,7 +96,7 @@ public void enrichTrace(StructuredTrace trace) { EnrichedSpanUtils.isExitSpan(event) && SpanAttributeUtils.isLeafSpan(structuredTraceGraph, event)) // resolve backend entity - .map(event -> Pair.of(event, resolve(event, structuredTraceGraph))) + .map(event -> Pair.of(event, resolve(event, trace, structuredTraceGraph))) .filter(pair -> pair.getRight().isPresent()) // check if backend entity is valid .filter(pair -> isValidBackendEntity(pair.getLeft(), pair.getRight().get())) @@ -235,16 +236,15 @@ private Map getAttributesT @Nullable private Entity createBackendIfMissing(Entity backendEntity) { + RequestContext requestContext = RequestContext.forTenantId(backendEntity.getTenantId()); try { Optional backendFromCache = entityCache .getBackendIdAttrsToEntityCache() - .get( - Pair.of( - backendEntity.getTenantId(), backendEntity.getIdentifyingAttributesMap())); + .get(requestContext.buildContextualKey(backendEntity.getIdentifyingAttributesMap())); return backendFromCache.orElseGet( () -> { - Entity result = edsClient.upsert(backendEntity); + Entity result = this.upsertBackend(backendEntity); LOGGER.info("Created backend:{}", result); return result; }); @@ -259,7 +259,8 @@ private org.hypertrace.core.datamodel.AttributeValue createAttributeValue(Attrib } @VisibleForTesting - public Optional resolve(Event event, StructuredTraceGraph structuredTraceGraph) { + public Optional resolve( + Event event, StructuredTrace trace, StructuredTraceGraph structuredTraceGraph) { for (BackendProvider backendProvider : getBackendProviders()) { backendProvider.init(event); @@ -280,7 +281,7 @@ public Optional resolve(Event event, StructuredTraceGraph structure } String backendUri = maybeBackendUri.get(); - final Builder entityBuilder = getBackendEntityBuilder(type, backendUri, event); + final Builder entityBuilder = getBackendEntityBuilder(type, backendUri, event, trace); backendProvider.getEntityAttributes(event).forEach(entityBuilder::putAttributes); Map enrichedAttributes = @@ -303,14 +304,15 @@ public Optional resolve(Event event, StructuredTraceGraph structure return Optional.empty(); } - private Builder getBackendEntityBuilder(BackendType type, String backendURI, Event event) { + protected Builder getBackendEntityBuilder( + BackendType type, String backendURI, Event event, StructuredTrace trace) { String[] hostAndPort = backendURI.split(COLON); String host = hostAndPort[0]; - String port = (hostAndPort.length == 2) ? hostAndPort[1] : DEFAULT_PORT; + String port = hostAndPort.length == 2 ? hostAndPort[1] : DEFAULT_PORT; String fqn = fqnResolver.resolve(host, event); String entityName = port.equals(DEFAULT_PORT) ? fqn : COLON_JOINER.join(fqn, port); final Builder entityBuilder = - org.hypertrace.entity.data.service.v1.Entity.newBuilder() + Entity.newBuilder() .setEntityType(EntityType.BACKEND.name()) .setTenantId(event.getCustomerId()) .setEntityName(entityName) @@ -328,4 +330,8 @@ private Builder getBackendEntityBuilder(BackendType type, String backendURI, Eve EnricherUtil.createAttributeValue(HexUtils.getHex(event.getEventId()))); return entityBuilder; } + + protected Entity upsertBackend(Entity backendEntity) { + return edsClient.upsert(backendEntity); + } } diff --git a/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/src/main/java/org/hypertrace/traceenricher/enrichment/enrichers/cache/EntityCache.java b/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/src/main/java/org/hypertrace/traceenricher/enrichment/enrichers/cache/EntityCache.java index 95b303a56..6eba0d88a 100644 --- a/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/src/main/java/org/hypertrace/traceenricher/enrichment/enrichers/cache/EntityCache.java +++ b/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/src/main/java/org/hypertrace/traceenricher/enrichment/enrichers/cache/EntityCache.java @@ -9,6 +9,7 @@ import java.util.concurrent.TimeUnit; import javax.annotation.Nonnull; import org.apache.commons.lang3.tuple.Pair; +import org.hypertrace.core.grpcutils.context.ContextualKey; import org.hypertrace.entity.constants.v1.CommonAttribute; import org.hypertrace.entity.data.service.client.EdsClient; import org.hypertrace.entity.data.service.v1.AttributeValue; @@ -89,25 +90,12 @@ public List load(@Nonnull Pair key) { * Cache of Backend identifying attributes to Entity Key: Map of identifying attributes Value: * Optional Backend entity */ - private final LoadingCache>, Optional> + private final LoadingCache>, Optional> backendIdAttrsToEntityCache = CacheBuilder.newBuilder() .maximumSize(10000) .expireAfterWrite(5, TimeUnit.MINUTES) - .build( - new CacheLoader<>() { - @Override - public Optional load( - @Nonnull Pair> pair) { - ByTypeAndIdentifyingAttributes request = - ByTypeAndIdentifyingAttributes.newBuilder() - .setEntityType(EntityType.BACKEND.name()) - .putAllIdentifyingAttributes(pair.getRight()) - .build(); - return Optional.ofNullable( - edsClient.getByTypeAndIdentifyingAttributes(pair.getLeft(), request)); - } - }); + .build(CacheLoader.from(this::loadBackendFromIdentifyingAttributes)); public EntityCache(EdsClient edsClient) { this.edsClient = edsClient; @@ -125,8 +113,20 @@ public LoadingCache, List> getNameToNamespaceEntity return namespaceCache; } - public LoadingCache>, Optional> + public LoadingCache>, Optional> getBackendIdAttrsToEntityCache() { return backendIdAttrsToEntityCache; } + + protected Optional loadBackendFromIdentifyingAttributes( + ContextualKey> key) { + ByTypeAndIdentifyingAttributes request = + ByTypeAndIdentifyingAttributes.newBuilder() + .setEntityType(EntityType.BACKEND.name()) + .putAllIdentifyingAttributes(key.getData()) + .build(); + return Optional.ofNullable( + edsClient.getByTypeAndIdentifyingAttributes( + key.getContext().getTenantId().orElseThrow(), request)); + } } diff --git a/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/src/test/java/org/hypertrace/traceenricher/enrichment/enrichers/backend/provider/CassandraBackendProviderTest.java b/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/src/test/java/org/hypertrace/traceenricher/enrichment/enrichers/backend/provider/CassandraBackendProviderTest.java index c6970ae7a..63d267eb9 100644 --- a/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/src/test/java/org/hypertrace/traceenricher/enrichment/enrichers/backend/provider/CassandraBackendProviderTest.java +++ b/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/src/test/java/org/hypertrace/traceenricher/enrichment/enrichers/backend/provider/CassandraBackendProviderTest.java @@ -16,6 +16,7 @@ import org.hypertrace.core.datamodel.EventRefType; import org.hypertrace.core.datamodel.MetricValue; import org.hypertrace.core.datamodel.Metrics; +import org.hypertrace.core.datamodel.StructuredTrace; import org.hypertrace.core.datamodel.shared.StructuredTraceGraph; import org.hypertrace.core.datamodel.shared.trace.AttributeValueCreator; import org.hypertrace.entity.data.service.v1.Entity; @@ -32,6 +33,7 @@ public class CassandraBackendProviderTest { private AbstractBackendEntityEnricher backendEntityEnricher; private StructuredTraceGraph structuredTraceGraph; + private StructuredTrace structuredTrace; @BeforeEach public void setup() { @@ -39,12 +41,15 @@ public void setup() { backendEntityEnricher.init(ConfigFactory.empty(), mock(ClientRegistry.class)); structuredTraceGraph = mock(StructuredTraceGraph.class); + structuredTrace = mock(StructuredTrace.class); } @Test public void testBackendResolution() { BackendInfo backendInfo = - backendEntityEnricher.resolve(getCassandraEvent(), structuredTraceGraph).get(); + backendEntityEnricher + .resolve(getCassandraEvent(), structuredTrace, structuredTraceGraph) + .get(); Entity entity = backendInfo.getEntity(); Assertions.assertEquals("localhost:9000", entity.getEntityName()); Map attributes = backendInfo.getAttributes(); @@ -60,7 +65,9 @@ public void testBackendResolution() { @Test public void testBackendResolutionForOTEvent() { BackendInfo backendInfo = - backendEntityEnricher.resolve(getCassandraOTEvent(), structuredTraceGraph).get(); + backendEntityEnricher + .resolve(getCassandraOTEvent(), structuredTrace, structuredTraceGraph) + .get(); Entity entity = backendInfo.getEntity(); Assertions.assertEquals("localhost:9000", entity.getEntityName()); Map attributes = backendInfo.getAttributes(); @@ -70,7 +77,9 @@ public void testBackendResolutionForOTEvent() { @Test public void testBackendResolutionWithoutConnectionString() { BackendInfo backendInfo = - backendEntityEnricher.resolve(getCassandraOTelEvent(), structuredTraceGraph).get(); + backendEntityEnricher + .resolve(getCassandraOTelEvent(), structuredTrace, structuredTraceGraph) + .get(); Entity entity = backendInfo.getEntity(); Assertions.assertEquals("test:9000", entity.getEntityName()); Map attributes = backendInfo.getAttributes(); diff --git a/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/src/test/java/org/hypertrace/traceenricher/enrichment/enrichers/backend/provider/ClientSpanEndpointProviderTest.java b/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/src/test/java/org/hypertrace/traceenricher/enrichment/enrichers/backend/provider/ClientSpanEndpointProviderTest.java index 008471eaf..fbb9e7315 100644 --- a/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/src/test/java/org/hypertrace/traceenricher/enrichment/enrichers/backend/provider/ClientSpanEndpointProviderTest.java +++ b/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/src/test/java/org/hypertrace/traceenricher/enrichment/enrichers/backend/provider/ClientSpanEndpointProviderTest.java @@ -17,6 +17,7 @@ import org.hypertrace.core.datamodel.EventRefType; import org.hypertrace.core.datamodel.MetricValue; import org.hypertrace.core.datamodel.Metrics; +import org.hypertrace.core.datamodel.StructuredTrace; import org.hypertrace.core.datamodel.shared.StructuredTraceGraph; import org.hypertrace.entity.constants.v1.BackendAttribute; import org.hypertrace.entity.constants.v1.ServiceAttribute; @@ -37,12 +38,14 @@ public class ClientSpanEndpointProviderTest { private AbstractBackendEntityEnricher backendEntityEnricher; private StructuredTraceGraph structuredTraceGraph; + private StructuredTrace structuredTrace; @BeforeEach public void setup() { backendEntityEnricher = new MockBackendEntityEnricher(); backendEntityEnricher.init(ConfigFactory.empty(), mock(ClientRegistry.class)); + structuredTrace = mock(StructuredTrace.class); structuredTraceGraph = mock(StructuredTraceGraph.class); } @@ -115,7 +118,8 @@ public void checkFallbackBackendEntityGeneratedFromClientExitSpan() { .build(); when(structuredTraceGraph.getParentEvent(e)).thenReturn(parentEvent); - Entity backendEntity = backendEntityEnricher.resolve(e, structuredTraceGraph).get().getEntity(); + Entity backendEntity = + backendEntityEnricher.resolve(e, structuredTrace, structuredTraceGraph).get().getEntity(); assertEquals( "redis", backendEntity @@ -197,7 +201,8 @@ public void checkFallbackBackendEntityGeneratedFromClientExitSpan() { // Since the event serviceName is same as parentServiceName, no new service entity should be // created. when(structuredTraceGraph.getParentEvent(e)).thenReturn(parentEvent); - Assertions.assertTrue(backendEntityEnricher.resolve(e, structuredTraceGraph).isEmpty()); + Assertions.assertTrue( + backendEntityEnricher.resolve(e, structuredTrace, structuredTraceGraph).isEmpty()); } static class MockBackendEntityEnricher extends AbstractBackendEntityEnricher { diff --git a/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/src/test/java/org/hypertrace/traceenricher/enrichment/enrichers/backend/provider/ElasticsearchBackendProviderTest.java b/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/src/test/java/org/hypertrace/traceenricher/enrichment/enrichers/backend/provider/ElasticsearchBackendProviderTest.java index f28a0512f..9626816ca 100644 --- a/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/src/test/java/org/hypertrace/traceenricher/enrichment/enrichers/backend/provider/ElasticsearchBackendProviderTest.java +++ b/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/src/test/java/org/hypertrace/traceenricher/enrichment/enrichers/backend/provider/ElasticsearchBackendProviderTest.java @@ -16,6 +16,7 @@ import org.hypertrace.core.datamodel.EventRefType; import org.hypertrace.core.datamodel.MetricValue; import org.hypertrace.core.datamodel.Metrics; +import org.hypertrace.core.datamodel.StructuredTrace; import org.hypertrace.core.datamodel.shared.StructuredTraceGraph; import org.hypertrace.core.datamodel.shared.trace.AttributeValueCreator; import org.hypertrace.entity.data.service.v1.Entity; @@ -31,19 +32,23 @@ public class ElasticsearchBackendProviderTest { private AbstractBackendEntityEnricher backendEntityEnricher; private StructuredTraceGraph structuredTraceGraph; + private StructuredTrace structuredTrace; @BeforeEach public void setup() { backendEntityEnricher = new MockBackendEntityEnricher(); backendEntityEnricher.init(ConfigFactory.empty(), mock(ClientRegistry.class)); + structuredTrace = mock(StructuredTrace.class); structuredTraceGraph = mock(StructuredTraceGraph.class); } @Test public void testBackendResolution() { BackendInfo backendInfo = - backendEntityEnricher.resolve(getElasticsearchEvent(), structuredTraceGraph).get(); + backendEntityEnricher + .resolve(getElasticsearchEvent(), structuredTrace, structuredTraceGraph) + .get(); Entity entity = backendInfo.getEntity(); Assertions.assertEquals("test-index", entity.getEntityName()); Map attributes = backendInfo.getAttributes(); @@ -59,7 +64,9 @@ public void testBackendResolution() { @Test public void testBackendResolutionForOTEvent() { BackendInfo backendInfo = - backendEntityEnricher.resolve(getElasticsearchOTEvent(), structuredTraceGraph).get(); + backendEntityEnricher + .resolve(getElasticsearchOTEvent(), structuredTrace, structuredTraceGraph) + .get(); Entity entity = backendInfo.getEntity(); Assertions.assertEquals("test", entity.getEntityName()); Map attributes = backendInfo.getAttributes(); @@ -75,7 +82,9 @@ public void testBackendResolutionForOTEvent() { @Test public void testBackendResolutionForOTelEvent() { BackendInfo backendInfo = - backendEntityEnricher.resolve(getElasticsearchOTelEvent(), structuredTraceGraph).get(); + backendEntityEnricher + .resolve(getElasticsearchOTelEvent(), structuredTrace, structuredTraceGraph) + .get(); Entity entity = backendInfo.getEntity(); Assertions.assertEquals("test:2000", entity.getEntityName()); Map attributes = backendInfo.getAttributes(); diff --git a/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/src/test/java/org/hypertrace/traceenricher/enrichment/enrichers/backend/provider/GrpcBackendProviderTest.java b/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/src/test/java/org/hypertrace/traceenricher/enrichment/enrichers/backend/provider/GrpcBackendProviderTest.java index bcc4e29ec..f52ccf257 100644 --- a/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/src/test/java/org/hypertrace/traceenricher/enrichment/enrichers/backend/provider/GrpcBackendProviderTest.java +++ b/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/src/test/java/org/hypertrace/traceenricher/enrichment/enrichers/backend/provider/GrpcBackendProviderTest.java @@ -17,6 +17,7 @@ import org.hypertrace.core.datamodel.EventRefType; import org.hypertrace.core.datamodel.MetricValue; import org.hypertrace.core.datamodel.Metrics; +import org.hypertrace.core.datamodel.StructuredTrace; import org.hypertrace.core.datamodel.shared.StructuredTraceGraph; import org.hypertrace.core.datamodel.shared.trace.AttributeValueCreator; import org.hypertrace.core.span.constants.v1.Grpc; @@ -35,12 +36,14 @@ public class GrpcBackendProviderTest { private AbstractBackendEntityEnricher backendEntityEnricher; private StructuredTraceGraph structuredTraceGraph; + private StructuredTrace structuredTrace; @BeforeEach public void setup() { backendEntityEnricher = new MockBackendEntityEnricher(); backendEntityEnricher.init(ConfigFactory.empty(), mock(ClientRegistry.class)); + structuredTrace = mock(StructuredTrace.class); structuredTraceGraph = mock(StructuredTraceGraph.class); } @@ -110,7 +113,8 @@ public void checkBackendEntityGeneratedFromGrpcEvent() { .setRefType(EventRefType.CHILD_OF) .build())) .build(); - final BackendInfo backendInfo = backendEntityEnricher.resolve(e, structuredTraceGraph).get(); + final BackendInfo backendInfo = + backendEntityEnricher.resolve(e, structuredTrace, structuredTraceGraph).get(); final Entity backendEntity = backendInfo.getEntity(); assertEquals("productcatalogservice:3550", backendEntity.getEntityName()); assertEquals(3, backendEntity.getIdentifyingAttributesCount()); diff --git a/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/src/test/java/org/hypertrace/traceenricher/enrichment/enrichers/backend/provider/HttpBackendProviderTest.java b/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/src/test/java/org/hypertrace/traceenricher/enrichment/enrichers/backend/provider/HttpBackendProviderTest.java index fe8374d9f..1cfc407be 100644 --- a/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/src/test/java/org/hypertrace/traceenricher/enrichment/enrichers/backend/provider/HttpBackendProviderTest.java +++ b/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/src/test/java/org/hypertrace/traceenricher/enrichment/enrichers/backend/provider/HttpBackendProviderTest.java @@ -20,6 +20,7 @@ import org.hypertrace.core.datamodel.EventRefType; import org.hypertrace.core.datamodel.MetricValue; import org.hypertrace.core.datamodel.Metrics; +import org.hypertrace.core.datamodel.StructuredTrace; import org.hypertrace.core.datamodel.eventfields.http.Request; import org.hypertrace.core.datamodel.shared.StructuredTraceGraph; import org.hypertrace.core.datamodel.shared.trace.AttributeValueCreator; @@ -41,12 +42,14 @@ public class HttpBackendProviderTest { private AbstractBackendEntityEnricher backendEntityEnricher; private StructuredTraceGraph structuredTraceGraph; + private StructuredTrace structuredTrace; @BeforeEach public void setup() { backendEntityEnricher = new MockBackendEntityEnricher(); backendEntityEnricher.init(ConfigFactory.empty(), mock(ClientRegistry.class)); + structuredTrace = mock(StructuredTrace.class); structuredTraceGraph = mock(StructuredTraceGraph.class); } @@ -117,7 +120,8 @@ public void checkBackendEntityGeneratedFromHttpEventType1() { .build()) .build(); - final BackendInfo backendInfo = backendEntityEnricher.resolve(e, structuredTraceGraph).get(); + final BackendInfo backendInfo = + backendEntityEnricher.resolve(e, structuredTrace, structuredTraceGraph).get(); final Entity backendEntity = backendInfo.getEntity(); assertEquals(backendEntity.getEntityName(), "dataservice:9394"); assertEquals(3, backendEntity.getIdentifyingAttributesCount()); @@ -247,7 +251,7 @@ public void checkBackendEntityGeneratedFromHttpEventType2() { .build(); final Entity backendEntity = - backendEntityEnricher.resolve(e, structuredTraceGraph).get().getEntity(); + backendEntityEnricher.resolve(e, structuredTrace, structuredTraceGraph).get().getEntity(); assertEquals("dataservice:9394", backendEntity.getEntityName()); assertEquals(3, backendEntity.getIdentifyingAttributesCount()); assertEquals( @@ -355,7 +359,7 @@ public void checkBackendEntityGeneratedFromHttpEventType3() { .build(); final Entity backendEntity = - backendEntityEnricher.resolve(e, structuredTraceGraph).get().getEntity(); + backendEntityEnricher.resolve(e, structuredTrace, structuredTraceGraph).get().getEntity(); assertEquals("dataservice:9394", backendEntity.getEntityName()); assertEquals(3, backendEntity.getIdentifyingAttributesCount()); assertEquals( @@ -462,7 +466,7 @@ public void checkBackendEntityGeneratedFromHttpsEvent() { .build(); final Entity backendEntity = - backendEntityEnricher.resolve(e, structuredTraceGraph).get().getEntity(); + backendEntityEnricher.resolve(e, structuredTrace, structuredTraceGraph).get().getEntity(); assertEquals(backendEntity.getEntityName(), "dataservice:9394"); assertEquals(3, backendEntity.getIdentifyingAttributesCount()); assertEquals( @@ -581,7 +585,8 @@ public void checkBackendEntityGeneratedFromHttpEventUrlWithIllegalQueryCharacter .build()) .build(); - Entity backendEntity = backendEntityEnricher.resolve(e, structuredTraceGraph).get().getEntity(); + Entity backendEntity = + backendEntityEnricher.resolve(e, structuredTrace, structuredTraceGraph).get().getEntity(); assertEquals("dataservice:9394", backendEntity.getEntityName()); assertEquals(3, backendEntity.getIdentifyingAttributesCount()); assertEquals( @@ -700,7 +705,7 @@ public void checkBackendEntityGeneratedFromHttpEventUrlWithIllegalCharacterAndHt .build(); final Entity backendEntity = - backendEntityEnricher.resolve(e, structuredTraceGraph).get().getEntity(); + backendEntityEnricher.resolve(e, structuredTrace, structuredTraceGraph).get().getEntity(); assertEquals(backendEntity.getEntityName(), "dataservice:9394"); assertEquals(3, backendEntity.getIdentifyingAttributesCount()); assertEquals( diff --git a/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/src/test/java/org/hypertrace/traceenricher/enrichment/enrichers/backend/provider/JdbcBackendProviderTest.java b/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/src/test/java/org/hypertrace/traceenricher/enrichment/enrichers/backend/provider/JdbcBackendProviderTest.java index f892b54fe..83adc95e3 100644 --- a/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/src/test/java/org/hypertrace/traceenricher/enrichment/enrichers/backend/provider/JdbcBackendProviderTest.java +++ b/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/src/test/java/org/hypertrace/traceenricher/enrichment/enrichers/backend/provider/JdbcBackendProviderTest.java @@ -18,6 +18,7 @@ import org.hypertrace.core.datamodel.EventRefType; import org.hypertrace.core.datamodel.MetricValue; import org.hypertrace.core.datamodel.Metrics; +import org.hypertrace.core.datamodel.StructuredTrace; import org.hypertrace.core.datamodel.shared.StructuredTraceGraph; import org.hypertrace.core.datamodel.shared.trace.AttributeValueCreator; import org.hypertrace.core.semantic.convention.constants.db.OTelDbSemanticConventions; @@ -42,12 +43,14 @@ public class JdbcBackendProviderTest { private AbstractBackendEntityEnricher backendEntityEnricher; private StructuredTraceGraph structuredTraceGraph; + private StructuredTrace structuredTrace; @BeforeEach public void setup() { backendEntityEnricher = new MockBackendEntityEnricher(); backendEntityEnricher.init(ConfigFactory.empty(), mock(ClientRegistry.class)); + structuredTrace = mock(StructuredTrace.class); structuredTraceGraph = mock(StructuredTraceGraph.class); } @@ -107,7 +110,8 @@ public void testWebgoatUrl() { .setRefType(EventRefType.CHILD_OF) .build())) .build(); - BackendInfo backendInfo = backendEntityEnricher.resolve(e, structuredTraceGraph).get(); + BackendInfo backendInfo = + backendEntityEnricher.resolve(e, structuredTrace, structuredTraceGraph).get(); final Entity backendEntity = backendInfo.getEntity(); assertEquals("dbhost:9001", backendEntity.getEntityName()); assertEquals(3, backendEntity.getIdentifyingAttributesCount()); @@ -201,7 +205,8 @@ public void testBackendOperationWithSqlQuery() { .setRefType(EventRefType.CHILD_OF) .build())) .build(); - BackendInfo backendInfo = backendEntityEnricher.resolve(e, structuredTraceGraph).get(); + BackendInfo backendInfo = + backendEntityEnricher.resolve(e, structuredTrace, structuredTraceGraph).get(); Map attributes = backendInfo.getAttributes(); assertEquals(Map.of("BACKEND_OPERATION", AttributeValueCreator.create("insert")), attributes); } @@ -242,7 +247,8 @@ public void testBackendOperationWithDbStatement() { .setRefType(EventRefType.CHILD_OF) .build())) .build(); - BackendInfo backendInfo = backendEntityEnricher.resolve(e, structuredTraceGraph).get(); + BackendInfo backendInfo = + backendEntityEnricher.resolve(e, structuredTrace, structuredTraceGraph).get(); Map attributes = backendInfo.getAttributes(); assertEquals(Map.of("BACKEND_OPERATION", AttributeValueCreator.create("insert")), attributes); } @@ -283,7 +289,8 @@ public void testBackendDestinationWithTableName() { .setRefType(EventRefType.CHILD_OF) .build())) .build(); - BackendInfo backendInfo = backendEntityEnricher.resolve(e, structuredTraceGraph).get(); + BackendInfo backendInfo = + backendEntityEnricher.resolve(e, structuredTrace, structuredTraceGraph).get(); Map attributes = backendInfo.getAttributes(); assertEquals( Map.of("BACKEND_DESTINATION", AttributeValueCreator.create("customer.orders")), attributes); @@ -323,7 +330,8 @@ public void testBackendDestinationWithoutTableName() { .setRefType(EventRefType.CHILD_OF) .build())) .build(); - BackendInfo backendInfo = backendEntityEnricher.resolve(e, structuredTraceGraph).get(); + BackendInfo backendInfo = + backendEntityEnricher.resolve(e, structuredTrace, structuredTraceGraph).get(); Map attributes = backendInfo.getAttributes(); assertEquals( Map.of("BACKEND_DESTINATION", AttributeValueCreator.create("customer")), attributes); @@ -380,7 +388,8 @@ public void testWithOtelFormatUrl() { .build())) .build(); - BackendInfo backendInfo = backendEntityEnricher.resolve(e, structuredTraceGraph).get(); + BackendInfo backendInfo = + backendEntityEnricher.resolve(e, structuredTrace, structuredTraceGraph).get(); final Entity backendEntity = backendInfo.getEntity(); assertEquals("127.0.0.1:3306", backendEntity.getEntityName()); @@ -487,7 +496,8 @@ public void checkBackendEntityGeneratedFromJdbcEvent() { .setRefType(EventRefType.CHILD_OF) .build())) .build(); - BackendInfo backendInfo = backendEntityEnricher.resolve(e, structuredTraceGraph).get(); + BackendInfo backendInfo = + backendEntityEnricher.resolve(e, structuredTrace, structuredTraceGraph).get(); final Entity backendEntity = backendInfo.getEntity(); assertEquals("mysql:3306", backendEntity.getEntityName()); assertEquals(3, backendEntity.getIdentifyingAttributesCount()); @@ -592,7 +602,8 @@ public void testGetBackendEntity() { .setRefType(EventRefType.CHILD_OF) .build())) .build(); - Entity backendEntity = backendEntityEnricher.resolve(e, structuredTraceGraph).get().getEntity(); + Entity backendEntity = + backendEntityEnricher.resolve(e, structuredTrace, structuredTraceGraph).get().getEntity(); Map idAttrMap = backendEntity.getIdentifyingAttributesMap(); assertEquals( diff --git a/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/src/test/java/org/hypertrace/traceenricher/enrichment/enrichers/backend/provider/KafkaBackendProviderTest.java b/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/src/test/java/org/hypertrace/traceenricher/enrichment/enrichers/backend/provider/KafkaBackendProviderTest.java index 14649d4fb..0f4735f5c 100644 --- a/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/src/test/java/org/hypertrace/traceenricher/enrichment/enrichers/backend/provider/KafkaBackendProviderTest.java +++ b/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/src/test/java/org/hypertrace/traceenricher/enrichment/enrichers/backend/provider/KafkaBackendProviderTest.java @@ -16,6 +16,7 @@ import org.hypertrace.core.datamodel.EventRefType; import org.hypertrace.core.datamodel.MetricValue; import org.hypertrace.core.datamodel.Metrics; +import org.hypertrace.core.datamodel.StructuredTrace; import org.hypertrace.core.datamodel.shared.StructuredTraceGraph; import org.hypertrace.core.datamodel.shared.trace.AttributeValueCreator; import org.hypertrace.entity.data.service.v1.Entity; @@ -32,12 +33,14 @@ public class KafkaBackendProviderTest { private AbstractBackendEntityEnricher backendEntityEnricher; private StructuredTraceGraph structuredTraceGraph; + private StructuredTrace structuredTrace; @BeforeEach public void setup() { backendEntityEnricher = new MockBackendEntityEnricher(); backendEntityEnricher.init(ConfigFactory.empty(), mock(ClientRegistry.class)); + structuredTrace = mock(StructuredTrace.class); structuredTraceGraph = mock(StructuredTraceGraph.class); } @@ -45,7 +48,9 @@ public void setup() { public void TestOtelBackendEventResolution() { String broker = "kafka-test.hypertrace.com:9092"; BackendInfo backendInfo = - backendEntityEnricher.resolve(getOtelKafkaBackendEvent(broker), structuredTraceGraph).get(); + backendEntityEnricher + .resolve(getOtelKafkaBackendEvent(broker), structuredTrace, structuredTraceGraph) + .get(); Entity entity = backendInfo.getEntity(); Assertions.assertEquals(broker, entity.getEntityName()); Map attributes = backendInfo.getAttributes(); @@ -58,7 +63,10 @@ public void TestOTBackendEventResolution() { String brokerPort = "9092"; Entity entity = backendEntityEnricher - .resolve(getOTKafkaBackendEvent(brokerHost, brokerPort), structuredTraceGraph) + .resolve( + getOTKafkaBackendEvent(brokerHost, brokerPort), + structuredTrace, + structuredTraceGraph) .get() .getEntity(); Assertions.assertEquals(String.format("%s:%s", brokerHost, brokerPort), entity.getEntityName()); @@ -69,7 +77,10 @@ public void TestOtelBackendDestinationResolution() { String broker = "kafka-test.hypertrace.com:9092"; BackendInfo backendInfo = backendEntityEnricher - .resolve(getOtelKafkaBackendEventForDestination(broker), structuredTraceGraph) + .resolve( + getOtelKafkaBackendEventForDestination(broker), + structuredTrace, + structuredTraceGraph) .get(); Entity entity = backendInfo.getEntity(); Assertions.assertEquals(broker, entity.getEntityName()); diff --git a/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/src/test/java/org/hypertrace/traceenricher/enrichment/enrichers/backend/provider/MongoBackendProviderTest.java b/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/src/test/java/org/hypertrace/traceenricher/enrichment/enrichers/backend/provider/MongoBackendProviderTest.java index 09b87356a..67613e892 100644 --- a/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/src/test/java/org/hypertrace/traceenricher/enrichment/enrichers/backend/provider/MongoBackendProviderTest.java +++ b/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/src/test/java/org/hypertrace/traceenricher/enrichment/enrichers/backend/provider/MongoBackendProviderTest.java @@ -17,6 +17,7 @@ import org.hypertrace.core.datamodel.EventRefType; import org.hypertrace.core.datamodel.MetricValue; import org.hypertrace.core.datamodel.Metrics; +import org.hypertrace.core.datamodel.StructuredTrace; import org.hypertrace.core.datamodel.shared.StructuredTraceGraph; import org.hypertrace.core.datamodel.shared.trace.AttributeValueCreator; import org.hypertrace.core.semantic.convention.constants.db.OTelDbSemanticConventions; @@ -39,12 +40,14 @@ public class MongoBackendProviderTest { private AbstractBackendEntityEnricher backendEntityEnricher; private StructuredTraceGraph structuredTraceGraph; + private StructuredTrace structuredTrace; @BeforeEach public void setup() { backendEntityEnricher = new MockBackendEntityEnricher(); backendEntityEnricher.init(ConfigFactory.empty(), mock(ClientRegistry.class)); + structuredTrace = mock(StructuredTrace.class); structuredTraceGraph = mock(StructuredTraceGraph.class); } @@ -101,7 +104,7 @@ public void checkBackendEntityGeneratedFromUninstrumentedMongoEvent() { .build())) .build(); final Entity backendEntity = - backendEntityEnricher.resolve(e, structuredTraceGraph).get().getEntity(); + backendEntityEnricher.resolve(e, structuredTrace, structuredTraceGraph).get().getEntity(); assertEquals("mongo:27017", backendEntity.getEntityName()); assertEquals(3, backendEntity.getIdentifyingAttributesCount()); assertEquals( @@ -199,7 +202,7 @@ public void checkBackendEntityGeneratedFromInstrumentedMongoEvent() { .build())) .build(); final Entity backendEntity = - backendEntityEnricher.resolve(e, structuredTraceGraph).get().getEntity(); + backendEntityEnricher.resolve(e, structuredTrace, structuredTraceGraph).get().getEntity(); assertEquals("mongo:27017", backendEntity.getEntityName()); assertEquals(3, backendEntity.getIdentifyingAttributesCount()); assertEquals( @@ -302,7 +305,8 @@ public void checkBackendEntityGeneratedFromInstrumentedMongoEventOtelFormat() { .setRefType(EventRefType.CHILD_OF) .build())) .build(); - final BackendInfo backendInfo = backendEntityEnricher.resolve(e, structuredTraceGraph).get(); + final BackendInfo backendInfo = + backendEntityEnricher.resolve(e, structuredTrace, structuredTraceGraph).get(); final Entity backendEntity = backendInfo.getEntity(); assertEquals("mongodb0:27017", backendEntity.getEntityName()); assertEquals(3, backendEntity.getIdentifyingAttributesCount()); diff --git a/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/src/test/java/org/hypertrace/traceenricher/enrichment/enrichers/backend/provider/RabbitMqBackendProviderTest.java b/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/src/test/java/org/hypertrace/traceenricher/enrichment/enrichers/backend/provider/RabbitMqBackendProviderTest.java index a30a0cf0e..868ace85b 100644 --- a/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/src/test/java/org/hypertrace/traceenricher/enrichment/enrichers/backend/provider/RabbitMqBackendProviderTest.java +++ b/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/src/test/java/org/hypertrace/traceenricher/enrichment/enrichers/backend/provider/RabbitMqBackendProviderTest.java @@ -16,6 +16,7 @@ import org.hypertrace.core.datamodel.EventRefType; import org.hypertrace.core.datamodel.MetricValue; import org.hypertrace.core.datamodel.Metrics; +import org.hypertrace.core.datamodel.StructuredTrace; import org.hypertrace.core.datamodel.shared.StructuredTraceGraph; import org.hypertrace.core.datamodel.shared.trace.AttributeValueCreator; import org.hypertrace.entity.data.service.v1.Entity; @@ -32,12 +33,14 @@ public class RabbitMqBackendProviderTest { private AbstractBackendEntityEnricher backendEntityEnricher; private StructuredTraceGraph structuredTraceGraph; + private StructuredTrace structuredTrace; @BeforeEach public void setup() { backendEntityEnricher = new MockBackendEntityEnricher(); backendEntityEnricher.init(ConfigFactory.empty(), mock(ClientRegistry.class)); + structuredTrace = mock(StructuredTrace.class); structuredTraceGraph = mock(StructuredTraceGraph.class); } @@ -45,7 +48,9 @@ public void setup() { public void testEventResolution() { String routingKey = "routingkey"; BackendInfo backendInfo = - backendEntityEnricher.resolve(getRabbitMqEvent(routingKey), structuredTraceGraph).get(); + backendEntityEnricher + .resolve(getRabbitMqEvent(routingKey), structuredTrace, structuredTraceGraph) + .get(); Entity entity = backendInfo.getEntity(); Assertions.assertEquals(routingKey, entity.getEntityName()); Map attributes = backendInfo.getAttributes(); @@ -63,7 +68,8 @@ public void testBackendOperationAndDestinationResolution() { String routingKey = "routingkey"; BackendInfo backendInfo = backendEntityEnricher - .resolve(getRabbitMqEventMissingOperation(routingKey), structuredTraceGraph) + .resolve( + getRabbitMqEventMissingOperation(routingKey), structuredTrace, structuredTraceGraph) .get(); Entity entity = backendInfo.getEntity(); Assertions.assertEquals(routingKey, entity.getEntityName()); @@ -82,7 +88,10 @@ public void testBackendDestinationResolutionWithRoutingKey() { String routingKey = "routingkey"; BackendInfo backendInfo = backendEntityEnricher - .resolve(getRabbitMqDestinationWithRoutingKey(routingKey), structuredTraceGraph) + .resolve( + getRabbitMqDestinationWithRoutingKey(routingKey), + structuredTrace, + structuredTraceGraph) .get(); Entity entity = backendInfo.getEntity(); Assertions.assertEquals(routingKey, entity.getEntityName()); diff --git a/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/src/test/java/org/hypertrace/traceenricher/enrichment/enrichers/backend/provider/RedisBackendProviderTest.java b/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/src/test/java/org/hypertrace/traceenricher/enrichment/enrichers/backend/provider/RedisBackendProviderTest.java index e509e17fc..732b218ad 100644 --- a/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/src/test/java/org/hypertrace/traceenricher/enrichment/enrichers/backend/provider/RedisBackendProviderTest.java +++ b/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/src/test/java/org/hypertrace/traceenricher/enrichment/enrichers/backend/provider/RedisBackendProviderTest.java @@ -17,6 +17,7 @@ import org.hypertrace.core.datamodel.EventRefType; import org.hypertrace.core.datamodel.MetricValue; import org.hypertrace.core.datamodel.Metrics; +import org.hypertrace.core.datamodel.StructuredTrace; import org.hypertrace.core.datamodel.shared.StructuredTraceGraph; import org.hypertrace.core.datamodel.shared.trace.AttributeValueCreator; import org.hypertrace.core.semantic.convention.constants.db.OTelDbSemanticConventions; @@ -36,12 +37,14 @@ public class RedisBackendProviderTest { private AbstractBackendEntityEnricher backendEntityEnricher; private StructuredTraceGraph structuredTraceGraph; + private StructuredTrace structuredTrace; @BeforeEach public void setup() { backendEntityEnricher = new MockBackendEntityEnricher(); backendEntityEnricher.init(ConfigFactory.empty(), mock(ClientRegistry.class)); + structuredTrace = mock(StructuredTrace.class); structuredTraceGraph = mock(StructuredTraceGraph.class); } @@ -99,7 +102,8 @@ public void checkBackendEntityGeneratedFromRedisEvent() { .setRefType(EventRefType.CHILD_OF) .build())) .build(); - BackendInfo backendInfo = backendEntityEnricher.resolve(e, structuredTraceGraph).get(); + BackendInfo backendInfo = + backendEntityEnricher.resolve(e, structuredTrace, structuredTraceGraph).get(); final Entity backendEntity = backendInfo.getEntity(); assertEquals("redis-cart:6379", backendEntity.getEntityName()); assertEquals(3, backendEntity.getIdentifyingAttributesCount()); @@ -202,7 +206,8 @@ public void checkBackendEntityGeneratedFromRedisEventOtelFormat() { .setRefType(EventRefType.CHILD_OF) .build())) .build(); - BackendInfo backendInfo = backendEntityEnricher.resolve(e, structuredTraceGraph).get(); + BackendInfo backendInfo = + backendEntityEnricher.resolve(e, structuredTrace, structuredTraceGraph).get(); final Entity backendEntity = backendInfo.getEntity(); assertEquals("redis-cart:6379", backendEntity.getEntityName()); assertEquals(3, backendEntity.getIdentifyingAttributesCount()); diff --git a/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/src/test/java/org/hypertrace/traceenricher/enrichment/enrichers/backend/provider/SqsBackendProviderTest.java b/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/src/test/java/org/hypertrace/traceenricher/enrichment/enrichers/backend/provider/SqsBackendProviderTest.java index d7f100f5c..bc2b88057 100644 --- a/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/src/test/java/org/hypertrace/traceenricher/enrichment/enrichers/backend/provider/SqsBackendProviderTest.java +++ b/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/src/test/java/org/hypertrace/traceenricher/enrichment/enrichers/backend/provider/SqsBackendProviderTest.java @@ -18,6 +18,7 @@ import org.hypertrace.core.datamodel.EventRefType; import org.hypertrace.core.datamodel.MetricValue; import org.hypertrace.core.datamodel.Metrics; +import org.hypertrace.core.datamodel.StructuredTrace; import org.hypertrace.core.datamodel.shared.StructuredTraceGraph; import org.hypertrace.core.datamodel.shared.trace.AttributeValueCreator; import org.hypertrace.entity.data.service.v1.Entity; @@ -33,12 +34,14 @@ public class SqsBackendProviderTest { private AbstractBackendEntityEnricher backendEntityEnricher; private StructuredTraceGraph structuredTraceGraph; + private StructuredTrace structuredTrace; @BeforeEach public void setup() { backendEntityEnricher = new MockBackendEntityEnricher(); backendEntityEnricher.init(ConfigFactory.empty(), mock(ClientRegistry.class)); + structuredTrace = mock(StructuredTrace.class); structuredTraceGraph = mock(StructuredTraceGraph.class); } @@ -51,7 +54,10 @@ public void TestOtelSqsBackendResolution() { String sqsHost = sqsURL.getHost(); BackendInfo backendInfo = backendEntityEnricher - .resolve(getOtelSqsBackendEvent(sqsConnectionString), structuredTraceGraph) + .resolve( + getOtelSqsBackendEvent(sqsConnectionString), + structuredTrace, + structuredTraceGraph) .get(); Entity entity = backendInfo.getEntity(); Assertions.assertEquals(sqsHost, entity.getEntityName()); @@ -72,7 +78,9 @@ public void TestOtelSqsBackendResolution() { public void TestOTBackendEventResolution() { String sqsHost = "sqs.ap-south-1.amazonaws.com"; BackendInfo entity = - backendEntityEnricher.resolve(getOTSqsBackendEvent(sqsHost), structuredTraceGraph).get(); + backendEntityEnricher + .resolve(getOTSqsBackendEvent(sqsHost), structuredTrace, structuredTraceGraph) + .get(); Assertions.assertEquals(sqsHost, entity.getEntity().getEntityName()); } diff --git a/hypertrace-trace-enricher/trace-reader/build.gradle.kts b/hypertrace-trace-enricher/trace-reader/build.gradle.kts index 01d0b40fc..f583f73fb 100644 --- a/hypertrace-trace-enricher/trace-reader/build.gradle.kts +++ b/hypertrace-trace-enricher/trace-reader/build.gradle.kts @@ -12,8 +12,8 @@ dependencies { api("org.hypertrace.entity.service:entity-data-service-rx-client:0.6.4") api("org.hypertrace.core.datamodel:data-model:0.1.14") implementation("org.hypertrace.core.attribute.service:attribute-projection-registry:0.12.0") - implementation("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.4.0") - implementation("org.hypertrace.core.grpcutils:grpc-context-utils:0.4.0") + implementation("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.5.2") + implementation("org.hypertrace.core.grpcutils:grpc-context-utils:0.5.2") implementation("io.reactivex.rxjava3:rxjava:3.0.11") annotationProcessor("org.projectlombok:lombok:1.18.20")