This is an automated email from the ASF dual-hosted git repository.

zqr10159 pushed a commit to branch 2.0.0
in repository https://gitbox.apache.org/repos/asf/hertzbeat.git


The following commit(s) were added to refs/heads/2.0.0 by this push:
     new 165a33a470 Scope trace service by entity id
165a33a470 is described below

commit 165a33a470553c6932588720a64ee7b9bfb5c715
Author: Logic <[email protected]>
AuthorDate: Tue Jun 9 20:36:52 2026 +0800

    Scope trace service by entity id
---
 .../service/impl/EntityTraceQueryServiceImpl.java  | 26 ++++++++++++++--------
 .../impl/EntityTraceQueryServiceImplTest.java      |  1 +
 2 files changed, 18 insertions(+), 9 deletions(-)

diff --git 
a/hertzbeat-observability/src/main/java/org/apache/hertzbeat/observability/traces/service/impl/EntityTraceQueryServiceImpl.java
 
b/hertzbeat-observability/src/main/java/org/apache/hertzbeat/observability/traces/service/impl/EntityTraceQueryServiceImpl.java
index f79b368557..716fbfab39 100644
--- 
a/hertzbeat-observability/src/main/java/org/apache/hertzbeat/observability/traces/service/impl/EntityTraceQueryServiceImpl.java
+++ 
b/hertzbeat-observability/src/main/java/org/apache/hertzbeat/observability/traces/service/impl/EntityTraceQueryServiceImpl.java
@@ -55,6 +55,7 @@ import 
org.apache.hertzbeat.common.observability.dto.trace.TraceSpanEventDto;
 import org.apache.hertzbeat.common.observability.dto.trace.TraceSpanLinkDto;
 import org.apache.hertzbeat.common.observability.dto.trace.TraceSpanNodeDto;
 import 
org.apache.hertzbeat.observability.ingestion.enricher.OtlpCorrelationEnricher;
+import 
org.apache.hertzbeat.observability.ingestion.semantic.OtlpResourceSemanticAttributes;
 import 
org.apache.hertzbeat.observability.traces.service.EntityTraceQueryService;
 import org.apache.hertzbeat.warehouse.repository.TraceQueryRepository;
 import org.springframework.data.domain.Page;
@@ -1148,20 +1149,27 @@ public class EntityTraceQueryServiceImpl implements 
EntityTraceQueryService {
     }
 
     private Map<String, Set<String>> 
canonicalIdentityValues(ObservedEntityContext entityContext) {
-        if (entityContext == null || 
CollectionUtils.isEmpty(entityContext.getIdentities())) {
+        if (entityContext == null) {
             return Collections.emptyMap();
         }
         Map<String, Set<String>> values = new LinkedHashMap<>();
-        for (EntityIdentity identity : entityContext.getIdentities()) {
-            String key = trimText(identity.getIdentityKey());
-            String value = trimText(identity.getIdentityValue());
-            if (!StringUtils.hasText(key) || !StringUtils.hasText(value)
-                    || 
!EntityCanonicalIdentityRegistry.isCanonicalOtelResourceKey(key)) {
-                continue;
+        if (entityContext.getEntity() != null && 
entityContext.getEntity().getId() != null
+                && entityContext.getEntity().getId() > 0) {
+            
values.computeIfAbsent(OtlpResourceSemanticAttributes.HERTZBEAT_ENTITY_ID, 
ignored -> new LinkedHashSet<>())
+                    .add(String.valueOf(entityContext.getEntity().getId()));
+        }
+        if (!CollectionUtils.isEmpty(entityContext.getIdentities())) {
+            for (EntityIdentity identity : entityContext.getIdentities()) {
+                String key = trimText(identity.getIdentityKey());
+                String value = trimText(identity.getIdentityValue());
+                if (!StringUtils.hasText(key) || !StringUtils.hasText(value)
+                        || 
!EntityCanonicalIdentityRegistry.isCanonicalOtelResourceKey(key)) {
+                    continue;
+                }
+                values.computeIfAbsent(key, ignored -> new 
LinkedHashSet<>()).add(value);
             }
-            values.computeIfAbsent(key, ignored -> new 
LinkedHashSet<>()).add(value);
         }
-        return values;
+        return values.isEmpty() ? Collections.emptyMap() : values;
     }
 
     private List<String> preferredSearchTerms(Map<String, Set<String>> 
identityValues) {
diff --git 
a/hertzbeat-observability/src/test/java/org/apache/hertzbeat/observability/traces/service/impl/EntityTraceQueryServiceImplTest.java
 
b/hertzbeat-observability/src/test/java/org/apache/hertzbeat/observability/traces/service/impl/EntityTraceQueryServiceImplTest.java
index a0084aa7bb..be2cec643e 100644
--- 
a/hertzbeat-observability/src/test/java/org/apache/hertzbeat/observability/traces/service/impl/EntityTraceQueryServiceImplTest.java
+++ 
b/hertzbeat-observability/src/test/java/org/apache/hertzbeat/observability/traces/service/impl/EntityTraceQueryServiceImplTest.java
@@ -343,6 +343,7 @@ class EntityTraceQueryServiceImplTest {
                 org.mockito.ArgumentMatchers.isNull(), 
org.mockito.ArgumentMatchers.isNull(),
                 org.mockito.ArgumentMatchers.isNull(), 
org.mockito.ArgumentMatchers.isNull(),
                 detailIdentityFilterCaptor.capture(), eq(false));
+        assertEquals(Set.of("1"), 
detailIdentityFilterCaptor.getValue().get("hertzbeat.entity_id"));
         assertEquals(Set.of("checkout-service"), 
detailIdentityFilterCaptor.getValue().get("service.name"));
     }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to