use of org.hypertrace.core.datamodel.Entity in project hypertrace-ingester by hypertrace.
the class ApiTraceGraphBuilderTest method testBuildGraph.
@Test
void testBuildGraph() {
Entity entity = mock(Entity.class);
Event parent = mock(Event.class);
Event child = mock(Event.class);
Edge eventEdge = mock(Edge.class);
StructuredTrace underTestTrace = mock(StructuredTrace.class);
when(underTestTrace.getCustomerId()).thenReturn("__defaultTenant");
when(underTestTrace.getTraceId()).thenReturn(ByteBuffer.wrap("2ebbc19b6428510f".getBytes()));
when(underTestTrace.getEntityList()).thenReturn(List.of(entity));
when(underTestTrace.getEventList()).thenReturn(List.of(parent, child));
when(underTestTrace.getEntityEdgeList()).thenReturn(List.of());
when(underTestTrace.getEntityEventEdgeList()).thenReturn(List.of());
when(underTestTrace.getEventEdgeList()).thenReturn(List.of(eventEdge));
// structure trace builder
try (MockedStatic<StructuredTrace> builderMockedStatic = mockStatic(StructuredTrace.class)) {
StructuredTrace.Builder builder = mock(StructuredTrace.Builder.class);
when(builder.build()).thenReturn(underTestTrace);
builderMockedStatic.when(() -> StructuredTrace.newBuilder(underTestTrace)).thenReturn(builder);
// make two calls, and check that first call create cache entries, and second call uses same
try (MockedConstruction<ApiTraceGraph> mockedConstruction = mockConstruction(ApiTraceGraph.class)) {
// first call
ApiTraceGraph actual = ApiTraceGraphBuilder.buildGraph(underTestTrace);
Assertions.assertNotNull(actual);
Assertions.assertEquals(1, mockedConstruction.constructed().size());
// second call
ApiTraceGraph second = ApiTraceGraphBuilder.buildGraph(underTestTrace);
Assertions.assertEquals(actual, second);
Assertions.assertEquals(1, mockedConstruction.constructed().size());
}
}
}
use of org.hypertrace.core.datamodel.Entity in project hypertrace-ingester by hypertrace.
the class GraphBuilderUtilTest method testIsTraceEntitiesChanged.
@Test
public void testIsTraceEntitiesChanged() {
Entity entity1 = mock(Entity.class);
Entity entity2 = mock(Entity.class);
Event parent = mock(Event.class);
Event child1 = mock(Event.class);
Event child2 = mock(Event.class);
Edge eventEdge1 = mock(Edge.class);
Edge eventEdge2 = mock(Edge.class);
// same size
StructuredTrace cachedTrace = mock(StructuredTrace.class);
when(cachedTrace.getCustomerId()).thenReturn("__defaultTenant");
when(cachedTrace.getTraceId()).thenReturn(ByteBuffer.wrap("2ebbc19b6428510f".getBytes()));
when(cachedTrace.getEntityList()).thenReturn(List.of(entity1));
when(cachedTrace.getEntityEdgeList()).thenReturn(List.of());
when(cachedTrace.getEntityEventEdgeList()).thenReturn(List.of());
when(cachedTrace.getEventList()).thenReturn(List.of(parent, child1, child2));
when(cachedTrace.getEventEdgeList()).thenReturn(List.of(eventEdge1, eventEdge2));
StructuredTrace underTestTrace = mock(StructuredTrace.class);
when(underTestTrace.getCustomerId()).thenReturn("__defaultTenant");
when(underTestTrace.getTraceId()).thenReturn(ByteBuffer.wrap("2ebbc19b6428510f".getBytes()));
when(underTestTrace.getEntityList()).thenReturn(List.of(entity1, entity2));
when(underTestTrace.getEntityEdgeList()).thenReturn(List.of());
when(underTestTrace.getEntityEventEdgeList()).thenReturn(List.of());
when(underTestTrace.getEventList()).thenReturn(List.of(parent, child1, child2));
when(underTestTrace.getEventEdgeList()).thenReturn(List.of(eventEdge1, eventEdge2));
Assertions.assertFalse(GraphBuilderUtil.isTraceEventsChanged(cachedTrace, underTestTrace));
Assertions.assertTrue(GraphBuilderUtil.isTraceEntitiesChanged(cachedTrace, underTestTrace));
}
use of org.hypertrace.core.datamodel.Entity in project hypertrace-ingester by hypertrace.
the class GraphBuilderUtilTest method testIsTraceEventsChanged.
@Test
public void testIsTraceEventsChanged() {
Entity entity = mock(Entity.class);
Event parent = mock(Event.class);
Event child1 = mock(Event.class);
Event child2 = mock(Event.class);
Edge eventEdge1 = mock(Edge.class);
Edge eventEdge2 = mock(Edge.class);
// same size
StructuredTrace cachedTrace = mock(StructuredTrace.class);
when(cachedTrace.getCustomerId()).thenReturn("__defaultTenant");
when(cachedTrace.getTraceId()).thenReturn(ByteBuffer.wrap("2ebbc19b6428510f".getBytes()));
when(cachedTrace.getEntityList()).thenReturn(List.of(entity));
when(cachedTrace.getEntityEdgeList()).thenReturn(List.of());
when(cachedTrace.getEntityEventEdgeList()).thenReturn(List.of());
when(cachedTrace.getEventList()).thenReturn(List.of(parent, child1, child2));
when(cachedTrace.getEventEdgeList()).thenReturn(List.of(eventEdge1));
StructuredTrace underTestTrace = mock(StructuredTrace.class);
when(underTestTrace.getCustomerId()).thenReturn("__defaultTenant");
when(underTestTrace.getTraceId()).thenReturn(ByteBuffer.wrap("2ebbc19b6428510f".getBytes()));
when(underTestTrace.getEntityList()).thenReturn(List.of(entity));
when(underTestTrace.getEntityEdgeList()).thenReturn(List.of());
when(underTestTrace.getEntityEventEdgeList()).thenReturn(List.of());
when(underTestTrace.getEventList()).thenReturn(List.of(parent, child1, child2));
when(underTestTrace.getEventEdgeList()).thenReturn(List.of(eventEdge1, eventEdge2));
Assertions.assertTrue(GraphBuilderUtil.isTraceEventsChanged(cachedTrace, underTestTrace));
Assertions.assertFalse(GraphBuilderUtil.isTraceEntitiesChanged(cachedTrace, underTestTrace));
}
use of org.hypertrace.core.datamodel.Entity in project hypertrace-ingester by hypertrace.
the class EnrichmentProcessor method applyEnricher.
private void applyEnricher(Enricher enricher, StructuredTrace trace) {
// Enrich entities
List<Entity> entityList = trace.getEntityList();
LOG.debug("Enriching Entities for {}", enricher.getClass().getName());
for (Entity entity : entityList) {
enricher.enrichEntity(trace, entity);
}
enricher.onEnrichEntitiesComplete(trace);
LOG.debug("Enriching Events for {}", enricher.getClass().getName());
// Enrich Events
List<Event> eventList = trace.getEventList();
for (Event event : eventList) {
enricher.enrichEvent(trace, event);
}
// Enrich Edges
List<Edge> eventEdgeList = trace.getEventEdgeList();
for (Edge edge : eventEdgeList) {
enricher.enrichEdge(trace, edge);
}
List<Edge> entityEdgeList = trace.getEntityEdgeList();
for (Edge edge : entityEdgeList) {
enricher.enrichEdge(trace, edge);
}
List<Edge> entityEventEdgeList = trace.getEntityEventEdgeList();
for (Edge edge : entityEventEdgeList) {
enricher.enrichEdge(trace, edge);
}
LOG.debug("Enriching Trace ID {} for {}", HexUtils.getHex(trace.getTraceId()), enricher.getClass().getName());
// Enrich trace attributes/metrics
enricher.enrichTrace(trace);
}
use of org.hypertrace.core.datamodel.Entity in project hypertrace-ingester by hypertrace.
the class AvroEntityConverterTest method convertsAttributeMaps.
@Test
void convertsAttributeMaps() {
org.hypertrace.entity.data.service.v1.Entity inputEntity = BASIC_ENTITY.toBuilder().putAttributes("map", stringMapAttributeValue(Map.of("map-key-1", "map-value-1"))).build();
Entity expectedAvroEntity = Entity.newBuilder(BASIC_AVRO_ENTITY).setAttributesBuilder(Attributes.newBuilder().setAttributeMap(Map.of("map", buildAttributeValueMap(Map.of("map-key-1", "map-value-1"))))).build();
assertEquals(expectedAvroEntity, convertToAvroEntity(TENANT_ID, inputEntity).blockingGet());
}
Aggregations