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

wusheng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/skywalking.git


The following commit(s) were added to refs/heads/master by this push:
     new bf9f8aa8be support query endpoint list with time range (#12693)
bf9f8aa8be is described below

commit bf9f8aa8beee641ac17aba43bee88fff5b2d4939
Author: mrproliu <[email protected]>
AuthorDate: Tue Oct 15 15:17:12 2024 +0800

    support query endpoint list with time range (#12693)
---
 docs/en/changes/changes.md                             |  2 ++
 .../core/analysis/manual/endpoint/EndpointTraffic.java | 18 ++++++++++++++++--
 .../manual/endpoint/EndpointTrafficDispatcher.java     |  1 +
 .../oap/server/core/query/MetadataQueryService.java    |  4 ++--
 .../server/core/storage/query/IMetadataQueryDAO.java   |  3 ++-
 .../oap/query/promql/handler/PromQLApiHandler.java     |  4 ++--
 .../oap/query/graphql/resolver/MetadataQuery.java      |  2 +-
 .../oap/query/graphql/resolver/MetadataQueryV2.java    |  4 ++--
 .../src/main/resources/query-protocol                  |  2 +-
 .../banyandb/measure/BanyanDBMetadataQueryDAO.java     |  8 +++++++-
 .../plugin/elasticsearch/query/MetadataQueryEsDAO.java |  8 +++++++-
 .../plugin/jdbc/common/dao/JDBCMetadataQueryDAO.java   | 10 +++++++++-
 test/e2e-v2/cases/browser/expected/dependency.yml      |  4 ++++
 .../cases/cilium/expected/dependency-services.yml      |  8 ++++++++
 .../gateway/expected/dependency-services-consumer.yml  |  6 ++++++
 .../gateway/expected/dependency-services-provider.yml  |  6 ++++++
 .../cases/go/expected/dependency-services-go.yml       |  6 ++++++
 .../als/expected/dependency-services-productpage.yml   |  8 ++++++++
 .../istio/als/expected/dependency-services-reviews.yml |  6 ++++++
 .../expected/dependency-services-productpage.yml       |  8 ++++++++
 test/e2e-v2/cases/lua/expected/dependency-services.yml |  6 ++++++
 .../expected/dependency-services-consumer-nodejs.yml   |  6 ++++++
 .../nodejs/expected/dependency-services-consumer.yml   |  6 ++++++
 .../expected/dependency-services-provider-nodejs.yml   |  4 ++++
 .../cases/php/expected/dependency-services-php.yml     |  6 ++++++
 .../php/expected/dependency-services-provider.yml      |  6 ++++++
 .../ebpf/access_log/expected/dependency-services.yml   |  8 ++++++++
 .../expected/dependency-services-consumer-py.yml       |  8 ++++++++
 .../expected/dependency-services-provider-py.yml       |  4 ++++
 .../native-protocols/expected/dependency-services.yml  |  4 ++++
 .../simple/expected/dependency-services-consumer.yml   |  6 ++++++
 .../simple/expected/dependency-services-provider.yml   |  6 ++++++
 test/e2e-v2/cases/simple/simple-cases.yaml             |  3 +++
 .../storage/expected/dependency-services-consumer.yml  |  6 ++++++
 .../storage/expected/dependency-services-provider.yml  |  6 ++++++
 test/e2e-v2/script/env                                 |  2 +-
 36 files changed, 190 insertions(+), 15 deletions(-)

diff --git a/docs/en/changes/changes.md b/docs/en/changes/changes.md
index 80abde735c..78bd688eb1 100644
--- a/docs/en/changes/changes.md
+++ b/docs/en/changes/changes.md
@@ -7,6 +7,8 @@
 * Reduce the count of process index and adding time range when query process 
index.
 * Bump up Apache commons-io to 2.17.0.
 * Polish eBPF so11y metrics and add error count for query metrics.
+* Support query endpoint list with duration parameter(optional).
+* Change the endpoint_traffic to updatable for the additional column 
`last_ping`.
 
 
 #### UI
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/endpoint/EndpointTraffic.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/endpoint/EndpointTraffic.java
index a2beaca1d3..f44a1af6eb 100644
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/endpoint/EndpointTraffic.java
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/endpoint/EndpointTraffic.java
@@ -40,14 +40,18 @@ import 
org.apache.skywalking.oap.server.core.storage.type.StorageBuilder;
 
 @Stream(name = EndpointTraffic.INDEX_NAME, scopeId = 
DefaultScopeDefine.ENDPOINT,
     builder = EndpointTraffic.Builder.class, processor = 
MetricsStreamProcessor.class)
-@MetricsExtension(supportDownSampling = false, supportUpdate = false)
-@EqualsAndHashCode
+@MetricsExtension(supportDownSampling = false, supportUpdate = true)
+@EqualsAndHashCode(of = {
+    "serviceId",
+    "name"
+})
 public class EndpointTraffic extends Metrics {
 
     public static final String INDEX_NAME = "endpoint_traffic";
 
     public static final String SERVICE_ID = "service_id";
     public static final String NAME = "endpoint_traffic_name";
+    public static final String LAST_PING_TIME_BUCKET = "last_ping";
 
     @Setter
     @Getter
@@ -62,6 +66,10 @@ public class EndpointTraffic extends Metrics {
     @BanyanDB.MatchQuery(analyzer = BanyanDB.MatchQuery.AnalyzerType.URL)
     @BanyanDB.SeriesID(index = 1)
     private String name = Const.EMPTY_STRING;
+    @Setter
+    @Getter
+    @Column(name = LAST_PING_TIME_BUCKET)
+    private long lastPingTimestamp;
 
     @Override
     protected StorageID id0() {
@@ -82,6 +90,7 @@ public class EndpointTraffic extends Metrics {
     public RemoteData.Builder serialize() {
         RemoteData.Builder remoteBuilder = RemoteData.newBuilder();
         remoteBuilder.addDataLongs(getTimeBucket());
+        remoteBuilder.addDataLongs(getLastPingTimestamp());
 
         remoteBuilder.addDataStrings(serviceId);
         remoteBuilder.addDataStrings(Strings.isNullOrEmpty(name) ? 
Const.EMPTY_STRING : name);
@@ -91,6 +100,7 @@ public class EndpointTraffic extends Metrics {
     @Override
     public void deserialize(RemoteData remoteData) {
         setTimeBucket(remoteData.getDataLongs(0));
+        setLastPingTimestamp(remoteData.getDataLongs(1));
 
         setServiceId(remoteData.getDataStrings(0));
         setName(remoteData.getDataStrings(1));
@@ -108,6 +118,7 @@ public class EndpointTraffic extends Metrics {
             inventory.setServiceId((String) converter.get(SERVICE_ID));
             inventory.setName((String) converter.get(NAME));
             inventory.setTimeBucket(((Number) 
converter.get(TIME_BUCKET)).longValue());
+            inventory.setLastPingTimestamp(((Number) 
converter.get(LAST_PING_TIME_BUCKET)).longValue());
             return inventory;
         }
 
@@ -116,11 +127,14 @@ public class EndpointTraffic extends Metrics {
             converter.accept(SERVICE_ID, storageData.getServiceId());
             converter.accept(NAME, storageData.getName());
             converter.accept(TIME_BUCKET, storageData.getTimeBucket());
+            converter.accept(LAST_PING_TIME_BUCKET, 
storageData.getLastPingTimestamp());
         }
     }
 
     @Override
     public boolean combine(final Metrics metrics) {
+        final EndpointTraffic endpointTraffic = (EndpointTraffic) metrics;
+        this.lastPingTimestamp = endpointTraffic.getLastPingTimestamp();
         return true;
     }
 
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/endpoint/EndpointTrafficDispatcher.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/endpoint/EndpointTrafficDispatcher.java
index 44ff6d9f3a..c97b42be76 100644
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/endpoint/EndpointTrafficDispatcher.java
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/endpoint/EndpointTrafficDispatcher.java
@@ -30,6 +30,7 @@ public class EndpointTrafficDispatcher implements 
SourceDispatcher<Endpoint> {
         traffic.setTimeBucket(source.getTimeBucket());
         traffic.setName(source.getName());
         traffic.setServiceId(source.getServiceId());
+        traffic.setLastPingTimestamp(source.getTimeBucket());
         MetricsStreamProcessor.getInstance().in(traffic);
     }
 }
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/MetadataQueryService.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/MetadataQueryService.java
index eda7e1d990..96b9955f2e 100644
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/MetadataQueryService.java
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/MetadataQueryService.java
@@ -123,8 +123,8 @@ public class MetadataQueryService implements 
org.apache.skywalking.oap.server.li
     }
 
     public List<Endpoint> findEndpoint(final String keyword, final String 
serviceId,
-                                       final int limit) throws IOException {
-        return getMetadataQueryDAO().findEndpoint(keyword, serviceId, limit)
+                                       final int limit, final Duration 
duration) throws IOException {
+        return getMetadataQueryDAO().findEndpoint(keyword, serviceId, limit, 
duration)
                                     
.stream().distinct().collect(Collectors.toList());
     }
 
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/query/IMetadataQueryDAO.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/query/IMetadataQueryDAO.java
index d5883d7870..f8e8f2150b 100644
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/query/IMetadataQueryDAO.java
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/query/IMetadataQueryDAO.java
@@ -56,9 +56,10 @@ public interface IMetadataQueryDAO extends DAO {
      * @param keyword   to filter the endpoints
      * @param serviceId the owner of the endpoints
      * @param limit     max match size.
+     * @param duration  filter endpoints with time range(last ping time)
      * @return list of endpoint matching the given conditions.
      */
-    List<Endpoint> findEndpoint(final String keyword, final String serviceId, 
final int limit) throws IOException;
+    List<Endpoint> findEndpoint(final String keyword, final String serviceId, 
final int limit, final Duration duration) throws IOException;
 
     /**
      * @param serviceId the service id of the process.
diff --git 
a/oap-server/server-query-plugin/promql-plugin/src/main/java/org/apache/skywalking/oap/query/promql/handler/PromQLApiHandler.java
 
b/oap-server/server-query-plugin/promql-plugin/src/main/java/org/apache/skywalking/oap/query/promql/handler/PromQLApiHandler.java
index 85652125e4..d6fccf0a70 100644
--- 
a/oap-server/server-query-plugin/promql-plugin/src/main/java/org/apache/skywalking/oap/query/promql/handler/PromQLApiHandler.java
+++ 
b/oap-server/server-query-plugin/promql-plugin/src/main/java/org/apache/skywalking/oap/query/promql/handler/PromQLApiHandler.java
@@ -315,7 +315,7 @@ public class PromQLApiHandler {
                     String limit = 
parseResult.getLabelMap().getOrDefault(LabelName.LIMIT.getLabel(), "100");
                     List<Endpoint> endpoints = metadataQuery.findEndpoint(
                         keyword, IDManager.ServiceID.buildId(serviceName, 
Layer.valueOf(layer).isNormal()),
-                        Integer.parseInt(limit)
+                        Integer.parseInt(limit), duration
                     ).join();
                     endpoints.forEach(endpoint -> {
                         response.getData().add(endpoint.getName());
@@ -382,7 +382,7 @@ public class PromQLApiHandler {
             String limit = 
parseResult.getLabelMap().getOrDefault(LabelName.LIMIT.getLabel(), "100");
             List<Endpoint> endpoints = metadataQuery.findEndpoint(
                 keyword, IDManager.ServiceID.buildId(serviceName, 
Layer.valueOf(layer).isNormal()),
-                Integer.parseInt(limit)
+                Integer.parseInt(limit), duration
             ).join();
             endpoints.forEach(endpoint -> {
                 response.getData().add(buildMetricInfoFromTraffic(metricName, 
endpoint));
diff --git 
a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/MetadataQuery.java
 
b/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/MetadataQuery.java
index b7e6904962..038dc4c2c7 100644
--- 
a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/MetadataQuery.java
+++ 
b/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/MetadataQuery.java
@@ -91,7 +91,7 @@ public class MetadataQuery implements GraphQLQueryResolver {
 
     public List<Endpoint> searchEndpoint(final String keyword, final String 
serviceId,
                                          final int limit) throws IOException {
-        return getMetadataQueryService().findEndpoint(keyword, serviceId, 
limit);
+        return getMetadataQueryService().findEndpoint(keyword, serviceId, 
limit, null);
     }
 
     public List<Database> getAllDatabases(final Duration duration) throws 
IOException {
diff --git 
a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/MetadataQueryV2.java
 
b/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/MetadataQueryV2.java
index 32f70f7829..bc971d40b0 100644
--- 
a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/MetadataQueryV2.java
+++ 
b/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/MetadataQueryV2.java
@@ -87,8 +87,8 @@ public class MetadataQueryV2 implements GraphQLQueryResolver {
     }
 
     public CompletableFuture<List<Endpoint>> findEndpoint(final String 
keyword, final String serviceId,
-                                                          final int limit) {
-        return queryAsync(() -> 
getMetadataQueryService().findEndpoint(keyword, serviceId, limit));
+                                                          final int limit, 
final Duration duration) {
+        return queryAsync(() -> 
getMetadataQueryService().findEndpoint(keyword, serviceId, limit, duration));
     }
 
     public CompletableFuture<EndpointInfo> getEndpointInfo(final String 
endpointId) {
diff --git 
a/oap-server/server-query-plugin/query-graphql-plugin/src/main/resources/query-protocol
 
b/oap-server/server-query-plugin/query-graphql-plugin/src/main/resources/query-protocol
index 0fa72b147f..d5a8b092d1 160000
--- 
a/oap-server/server-query-plugin/query-graphql-plugin/src/main/resources/query-protocol
+++ 
b/oap-server/server-query-plugin/query-graphql-plugin/src/main/resources/query-protocol
@@ -1 +1 @@
-Subproject commit 0fa72b147fb4d0569b7182d6753cc225a2145c82
+Subproject commit d5a8b092d1ebbc5fe330c1c2a06fa688050a21c9
diff --git 
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBMetadataQueryDAO.java
 
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBMetadataQueryDAO.java
index 5e4fd9dfd6..6b6eb28807 100644
--- 
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBMetadataQueryDAO.java
+++ 
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBMetadataQueryDAO.java
@@ -176,7 +176,7 @@ public class BanyanDBMetadataQueryDAO extends 
AbstractBanyanDBDAO implements IMe
     }
 
     @Override
-    public List<Endpoint> findEndpoint(String keyword, String serviceId, int 
limit) throws IOException {
+    public List<Endpoint> findEndpoint(String keyword, String serviceId, int 
limit, Duration duration) throws IOException {
         MetadataRegistry.Schema schema = 
MetadataRegistry.INSTANCE.findMetadata(EndpointTraffic.INDEX_NAME, 
DownSampling.Minute);
         MeasureQueryResponse resp = query(schema,
                 ENDPOINT_TRAFFIC_TAGS,
@@ -193,6 +193,12 @@ public class BanyanDBMetadataQueryDAO extends 
AbstractBanyanDBDAO implements IMe
                                                 
BanyandbModel.Condition.MatchOption.Operator.OPERATOR_AND).build()
                             ));
                         }
+                        if (duration != null) {
+                            final var startTimeBucket = 
TimeBucket.getMinuteTimeBucket(duration.getStartTimestamp());
+                            final var endTimeBucket = 
TimeBucket.getMinuteTimeBucket(duration.getEndTimestamp());
+                            
query.and(gte(EndpointTraffic.LAST_PING_TIME_BUCKET, startTimeBucket));
+                            
query.and(lte(EndpointTraffic.LAST_PING_TIME_BUCKET, endTimeBucket));
+                        }
                         query.setOrderBy(new 
AbstractQuery.OrderBy(AbstractQuery.Sort.DESC));
                     }
                 });
diff --git 
a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/MetadataQueryEsDAO.java
 
b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/MetadataQueryEsDAO.java
index b68ba473a8..59804e07fd 100644
--- 
a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/MetadataQueryEsDAO.java
+++ 
b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/MetadataQueryEsDAO.java
@@ -217,7 +217,7 @@ public class MetadataQueryEsDAO extends EsDAO implements 
IMetadataQueryDAO {
     }
 
     @Override
-    public List<Endpoint> findEndpoint(String keyword, String serviceId, int 
limit) {
+    public List<Endpoint> findEndpoint(String keyword, String serviceId, int 
limit, Duration duration) {
         initColumnName();
         final String index = 
IndexController.LogicIndicesRegister.getPhysicalTableName(
             EndpointTraffic.INDEX_NAME);
@@ -235,6 +235,12 @@ public class MetadataQueryEsDAO extends EsDAO implements 
IMetadataQueryDAO {
             
query.must(Query.term(IndexController.LogicIndicesRegister.METRIC_TABLE_NAME, 
EndpointTraffic.INDEX_NAME));
         }
 
+        if (duration != null) {
+            final long startMinuteTimeBucket = 
TimeBucket.getMinuteTimeBucket(duration.getStartTimestamp());
+            final long endMinuteTimeBucket = 
TimeBucket.getMinuteTimeBucket(duration.getEndTimestamp());
+            
query.must(Query.range(EndpointTraffic.LAST_PING_TIME_BUCKET).gte(startMinuteTimeBucket).lte(endMinuteTimeBucket));
+        }
+
         final var search = Search.builder().query(query).size(limit).sort(
             EndpointTraffic.TIME_BUCKET,
             Sort.Order.DESC
diff --git 
a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/common/dao/JDBCMetadataQueryDAO.java
 
b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/common/dao/JDBCMetadataQueryDAO.java
index 08a4324de7..ec0f7f87de 100644
--- 
a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/common/dao/JDBCMetadataQueryDAO.java
+++ 
b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/common/dao/JDBCMetadataQueryDAO.java
@@ -205,7 +205,7 @@ public class JDBCMetadataQueryDAO implements 
IMetadataQueryDAO {
 
     @Override
     @SneakyThrows
-    public List<Endpoint> findEndpoint(String keyword, String serviceId, int 
limit) {
+    public List<Endpoint> findEndpoint(String keyword, String serviceId, int 
limit, Duration duration) {
         final var results = new ArrayList<Endpoint>();
         final var tables = 
tableHelper.getTablesWithinTTL(EndpointTraffic.INDEX_NAME);
 
@@ -223,6 +223,14 @@ public class JDBCMetadataQueryDAO implements 
IMetadataQueryDAO {
                 sql.append(" and ").append(EndpointTraffic.NAME).append(" like 
concat('%',?,'%') ");
                 condition.add(keyword);
             }
+            if (duration != null) {
+                final var startMinuteTimeBucket = 
TimeBucket.getMinuteTimeBucket(duration.getStartTimestamp());
+                final var endMinuteTimeBucket = 
TimeBucket.getMinuteTimeBucket(duration.getEndTimestamp());
+                sql.append(" and 
").append(EndpointTraffic.LAST_PING_TIME_BUCKET).append(" >= ?");
+                condition.add(startMinuteTimeBucket);
+                sql.append(" and 
").append(EndpointTraffic.LAST_PING_TIME_BUCKET).append(" <= ?");
+                condition.add(endMinuteTimeBucket);
+            }
             sql.append(" order by 
").append(EndpointTraffic.TIME_BUCKET).append(" desc");
             sql.append(" limit ").append(limit);
 
diff --git a/test/e2e-v2/cases/browser/expected/dependency.yml 
b/test/e2e-v2/cases/browser/expected/dependency.yml
index db15fc6fe1..887a2b26d1 100644
--- a/test/e2e-v2/cases/browser/expected/dependency.yml
+++ b/test/e2e-v2/cases/browser/expected/dependency.yml
@@ -19,10 +19,14 @@ nodes:
   name: provider-py
   type: Python
   isreal: true
+  layers:
+    - GENERAL
 - id: {{ b64enc "test-ui<browser>"}}.1
   name: test-ui<browser>
   type: null
   isreal: true
+  layers:
+    - UNDEFINED
 {{- end }}
 calls:
 {{- contains .calls }}
diff --git a/test/e2e-v2/cases/cilium/expected/dependency-services.yml 
b/test/e2e-v2/cases/cilium/expected/dependency-services.yml
index ab14539a5f..74cae94364 100644
--- a/test/e2e-v2/cases/cilium/expected/dependency-services.yml
+++ b/test/e2e-v2/cases/cilium/expected/dependency-services.yml
@@ -19,18 +19,26 @@ nodes:
   name: productpage.default
   type: http
   isreal: true
+  layers:
+    - CILIUM_SERVICE
 - id: {{ b64enc "details.default"}}.1
   name: details.default
   type: http
   isreal: true
+  layers:
+    - CILIUM_SERVICE
 - id: {{ b64enc "ratings.default" }}.1
   name: ratings.default
   type: http
   isreal: true
+  layers:
+    - CILIUM_SERVICE
 - id: {{ b64enc "reviews.default" }}.1
   name: reviews.default
   type: http
   isreal: true
+  layers:
+    - CILIUM_SERVICE
 {{- end }}
 calls:
 {{- contains .calls }}
diff --git 
a/test/e2e-v2/cases/gateway/expected/dependency-services-consumer.yml 
b/test/e2e-v2/cases/gateway/expected/dependency-services-consumer.yml
index 4c8f66f4a8..622bd59478 100644
--- a/test/e2e-v2/cases/gateway/expected/dependency-services-consumer.yml
+++ b/test/e2e-v2/cases/gateway/expected/dependency-services-consumer.yml
@@ -19,14 +19,20 @@ nodes:
   name: User
   type: USER
   isreal: false
+  layers:
+    - UNDEFINED
 - id: {{ b64enc "e2e-service-consumer" }}.1
   name: e2e-service-consumer
   type: Tomcat
   isreal: true
+  layers:
+    - GENERAL
 - id: {{ b64enc "gateway:80" }}.0
   name: gateway:80
   type: SpringRestTemplate
   isreal: false
+  layers:
+    - UNDEFINED
 {{- end }}
 calls:
 {{- contains .calls }}
diff --git 
a/test/e2e-v2/cases/gateway/expected/dependency-services-provider.yml 
b/test/e2e-v2/cases/gateway/expected/dependency-services-provider.yml
index e37c6b732a..c1758196f3 100644
--- a/test/e2e-v2/cases/gateway/expected/dependency-services-provider.yml
+++ b/test/e2e-v2/cases/gateway/expected/dependency-services-provider.yml
@@ -19,14 +19,20 @@ nodes:
   name: e2e-service-provider
   type: Tomcat
   isreal: true
+  layers:
+    - GENERAL
 - id: {{ b64enc "gateway:80" }}.0
   name: gateway:80
   type: Tomcat
   isreal: false
+  layers:
+    - UNDEFINED
 - id: {{ b64enc "localhost:-1" }}.0
   name: localhost:-1
   type: H2
   isreal: false
+  layers:
+    - VIRTUAL_DATABASE
 {{- end }}
 calls:
 {{- contains .calls }}
diff --git a/test/e2e-v2/cases/go/expected/dependency-services-go.yml 
b/test/e2e-v2/cases/go/expected/dependency-services-go.yml
index 5d08db3d94..2b7d8d7dca 100644
--- a/test/e2e-v2/cases/go/expected/dependency-services-go.yml
+++ b/test/e2e-v2/cases/go/expected/dependency-services-go.yml
@@ -19,14 +19,20 @@ nodes:
   name: e2e-service-provider
   type: Tomcat
   isreal: true
+  layers:
+    - GENERAL
 - id: {{ b64enc "e2e-service-consumer"}}.1
   name: e2e-service-consumer
   type: Tomcat
   isreal: true
+  layers:
+    - GENERAL
 - id: {{ b64enc "go-service" }}.1
   name: go-service
   type: Gin
   isreal: true
+  layers:
+    - GENERAL
 {{- end }}
 calls:
 {{- contains .calls }}
diff --git 
a/test/e2e-v2/cases/istio/als/expected/dependency-services-productpage.yml 
b/test/e2e-v2/cases/istio/als/expected/dependency-services-productpage.yml
index 1115fe4247..032a0df8db 100644
--- a/test/e2e-v2/cases/istio/als/expected/dependency-services-productpage.yml
+++ b/test/e2e-v2/cases/istio/als/expected/dependency-services-productpage.yml
@@ -19,18 +19,26 @@ nodes:
   name: e2e::reviews
   type: http
   isreal: true
+  layers:
+    - MESH
 - id: {{ b64enc "e2e::productpage"}}.1
   name: e2e::productpage
   type: http
   isreal: true
+  layers:
+    - MESH
 - id: {{ b64enc "e2e::details" }}.1
   name: e2e::details
   type: http
   isreal: true
+  layers:
+    - MESH
 - id: {{ b64enc "e2e::istio-ingressgateway" }}.1
   name: e2e::istio-ingressgateway
   type: http
   isreal: true
+  layers:
+    - MESH
 {{- end }}
 calls:
 {{- contains .calls }}
diff --git 
a/test/e2e-v2/cases/istio/als/expected/dependency-services-reviews.yml 
b/test/e2e-v2/cases/istio/als/expected/dependency-services-reviews.yml
index b69ec4ae1b..f62ff2b7ac 100644
--- a/test/e2e-v2/cases/istio/als/expected/dependency-services-reviews.yml
+++ b/test/e2e-v2/cases/istio/als/expected/dependency-services-reviews.yml
@@ -19,14 +19,20 @@ nodes:
   name: e2e::reviews
   type: http
   isreal: true
+  layers:
+    - MESH
 - id: {{ b64enc "e2e::ratings"}}.1
   name: e2e::ratings
   type: http
   isreal: true
+  layers:
+    - MESH
 - id: {{ b64enc "e2e::productpage" }}.1
   name: e2e::productpage
   type: http
   isreal: true
+  layers:
+    - MESH
 {{- end }}
 calls:
 {{- contains .calls }}
diff --git 
a/test/e2e-v2/cases/istio/metrics/expected/dependency-services-productpage.yml 
b/test/e2e-v2/cases/istio/metrics/expected/dependency-services-productpage.yml
index 3759299c8d..cfa78b0d71 100644
--- 
a/test/e2e-v2/cases/istio/metrics/expected/dependency-services-productpage.yml
+++ 
b/test/e2e-v2/cases/istio/metrics/expected/dependency-services-productpage.yml
@@ -19,18 +19,26 @@ nodes:
   name: e2e::reviews
   type: null
   isreal: true
+  layers:
+    - MESH_DP
 - id: {{ b64enc "e2e::productpage"}}.1
   name: e2e::productpage
   type: null
   isreal: true
+  layers:
+    - MESH_DP
 - id: {{ b64enc "e2e::details" }}.1
   name: e2e::details
   type: null
   isreal: true
+  layers:
+    - MESH_DP
 - id: ZTJlOjppc3Rpby1pbmdyZXNzZ2F0ZXdheQ==.1
   name: e2e::istio-ingressgateway
   type: null
   isreal: true
+  layers:
+    - MESH_DP
 {{- end }}
 calls:
 {{- contains .calls }}
diff --git a/test/e2e-v2/cases/lua/expected/dependency-services.yml 
b/test/e2e-v2/cases/lua/expected/dependency-services.yml
index 8f2b3152fb..bfafc44d0c 100644
--- a/test/e2e-v2/cases/lua/expected/dependency-services.yml
+++ b/test/e2e-v2/cases/lua/expected/dependency-services.yml
@@ -19,14 +19,20 @@ nodes:
   name: e2e-service-entry-provider
   type: Tomcat
   isreal: true
+  layers:
+    - GENERAL
 - id: {{ b64enc "e2e-service-end-provider"}}.1
   name: e2e-service-end-provider
   type: Tomcat
   isreal: true
+  layers:
+    - GENERAL
 - id: {{ b64enc "User_Service_Name"}}.1
   name: User_Service_Name
   type: Nginx
   isreal: true
+  layers:
+    - GENERAL
 {{- end }}
 calls:
 {{- contains .calls }}
diff --git 
a/test/e2e-v2/cases/nodejs/expected/dependency-services-consumer-nodejs.yml 
b/test/e2e-v2/cases/nodejs/expected/dependency-services-consumer-nodejs.yml
index 89d3f96520..0f3a5c8880 100644
--- a/test/e2e-v2/cases/nodejs/expected/dependency-services-consumer-nodejs.yml
+++ b/test/e2e-v2/cases/nodejs/expected/dependency-services-consumer-nodejs.yml
@@ -19,14 +19,20 @@ nodes:
   name: User
   type: USER
   isreal: false
+  layers:
+    - UNDEFINED
 - id: {{ b64enc "e2e-service-consumer" }}.1
   name: e2e-service-consumer
   type: Tomcat
   isreal: true
+  layers:
+    - GENERAL
 - id: {{ b64enc "consumer" }}.1
   name: consumer
   type: http
   isreal: true
+  layers:
+    - GENERAL
 {{- end }}
 calls:
 {{- contains .calls }}
diff --git a/test/e2e-v2/cases/nodejs/expected/dependency-services-consumer.yml 
b/test/e2e-v2/cases/nodejs/expected/dependency-services-consumer.yml
index d750b2b1f2..2e351c3ae6 100644
--- a/test/e2e-v2/cases/nodejs/expected/dependency-services-consumer.yml
+++ b/test/e2e-v2/cases/nodejs/expected/dependency-services-consumer.yml
@@ -19,14 +19,20 @@ nodes:
   name: provider
   type: Express
   isreal: true
+  layers:
+    - GENERAL
 - id: {{ b64enc "e2e-service-consumer" }}.1
   name: e2e-service-consumer
   type: Tomcat
   isreal: true
+  layers:
+    - GENERAL
 - id: {{ b64enc "consumer" }}.1
   name: consumer
   type: http
   isreal: true
+  layers:
+    - GENERAL
 {{- end }}
 calls:
 {{- contains .calls }}
diff --git 
a/test/e2e-v2/cases/nodejs/expected/dependency-services-provider-nodejs.yml 
b/test/e2e-v2/cases/nodejs/expected/dependency-services-provider-nodejs.yml
index 495660f51c..1baa339c98 100644
--- a/test/e2e-v2/cases/nodejs/expected/dependency-services-provider-nodejs.yml
+++ b/test/e2e-v2/cases/nodejs/expected/dependency-services-provider-nodejs.yml
@@ -19,10 +19,14 @@ nodes:
   name: provider
   type: Express
   isreal: true
+  layers:
+    - GENERAL
 - id: {{ b64enc "e2e-service-consumer" }}.1
   name: e2e-service-consumer
   type: Tomcat
   isreal: true
+  layers:
+    - GENERAL
 {{- end }}
 calls:
 {{- contains .calls }}
diff --git a/test/e2e-v2/cases/php/expected/dependency-services-php.yml 
b/test/e2e-v2/cases/php/expected/dependency-services-php.yml
index 55ad77c7e5..fc94d421db 100644
--- a/test/e2e-v2/cases/php/expected/dependency-services-php.yml
+++ b/test/e2e-v2/cases/php/expected/dependency-services-php.yml
@@ -19,14 +19,20 @@ nodes:
   name: User
   type: USER
   isreal: false
+  layers:
+    - UNDEFINED
 - id: {{ b64enc "e2e-service-provider" }}.1
   name: e2e-service-provider
   type: Tomcat
   isreal: true
+  layers:
+    - GENERAL
 - id: {{ b64enc "php" }}.1
   name: php
   type: PHP
   isreal: true
+  layers:
+    - GENERAL
 {{- end }}
 calls:
 {{- contains .calls }}
diff --git a/test/e2e-v2/cases/php/expected/dependency-services-provider.yml 
b/test/e2e-v2/cases/php/expected/dependency-services-provider.yml
index b5b9426f56..db0e6bbc53 100644
--- a/test/e2e-v2/cases/php/expected/dependency-services-provider.yml
+++ b/test/e2e-v2/cases/php/expected/dependency-services-provider.yml
@@ -19,14 +19,20 @@ nodes:
   name: e2e-service-provider
   type: Tomcat
   isreal: true
+  layers:
+    - GENERAL
 - id: {{ b64enc "localhost:-1" }}.0
   name: localhost:-1
   type: H2
   isreal: false
+  layers:
+    - VIRTUAL_DATABASE
 - id: {{ b64enc "php" }}.1
   name: php
   type: PHP
   isreal: true
+  layers:
+    - GENERAL
 {{- end }}
 calls:
 {{- contains .calls }}
diff --git 
a/test/e2e-v2/cases/profiling/ebpf/access_log/expected/dependency-services.yml 
b/test/e2e-v2/cases/profiling/ebpf/access_log/expected/dependency-services.yml
index f54beebc4e..dfc1f7c18b 100644
--- 
a/test/e2e-v2/cases/profiling/ebpf/access_log/expected/dependency-services.yml
+++ 
b/test/e2e-v2/cases/profiling/ebpf/access_log/expected/dependency-services.yml
@@ -19,18 +19,26 @@ nodes:
   name: productpage.default
   type: http
   isreal: true
+  layers:
+    - K8S_SERVICE
 - id: {{ b64enc "details.default"}}.1
   name: details.default
   type: http
   isreal: true
+  layers:
+    - K8S_SERVICE
 - id: {{ b64enc "ratings.default" }}.1
   name: ratings.default
   type: http
   isreal: true
+  layers:
+    - K8S_SERVICE
 - id: {{ b64enc "reviews.default" }}.1
   name: reviews.default
   type: http
   isreal: true
+  layers:
+    - K8S_SERVICE
 {{- end }}
 calls:
 {{- contains .calls }}
diff --git 
a/test/e2e-v2/cases/python/expected/dependency-services-consumer-py.yml 
b/test/e2e-v2/cases/python/expected/dependency-services-consumer-py.yml
index 5c25d6330b..94f013b393 100644
--- a/test/e2e-v2/cases/python/expected/dependency-services-consumer-py.yml
+++ b/test/e2e-v2/cases/python/expected/dependency-services-consumer-py.yml
@@ -19,18 +19,26 @@ nodes:
   name: User
   type: USER
   isreal: false
+  layers:
+    - UNDEFINED
 - id: {{ b64enc "e2e-service-consumer"}}.1
   name: e2e-service-consumer
   type: Tomcat
   isreal: true
+  layers:
+    - GENERAL
 - id: {{ b64enc "consumer-py" }}.1
   name: consumer-py
   type: Python
   isreal: true
+  layers:
+    - GENERAL
 - id: {{ b64enc "provider-py-kafka" }}.1
   name: provider-py-kafka
   type: Python
   isreal: true
+  layers:
+    - GENERAL
 {{- end }}
 calls:
 {{- contains .calls }}
diff --git 
a/test/e2e-v2/cases/python/expected/dependency-services-provider-py.yml 
b/test/e2e-v2/cases/python/expected/dependency-services-provider-py.yml
index 619670cd4b..6962f086a1 100644
--- a/test/e2e-v2/cases/python/expected/dependency-services-provider-py.yml
+++ b/test/e2e-v2/cases/python/expected/dependency-services-provider-py.yml
@@ -19,10 +19,14 @@ nodes:
   name: e2e-service-consumer
   type: Tomcat
   isreal: true
+  layers:
+    - GENERAL
 - id: {{ b64enc "provider-py" }}.1
   name: provider-py
   type: Python
   isreal: true
+  layers:
+    - GENERAL
 {{- end }}
 calls:
 {{- contains .calls }}
diff --git 
a/test/e2e-v2/cases/satellite/native-protocols/expected/dependency-services.yml 
b/test/e2e-v2/cases/satellite/native-protocols/expected/dependency-services.yml
index f4adf59f95..aeba265507 100644
--- 
a/test/e2e-v2/cases/satellite/native-protocols/expected/dependency-services.yml
+++ 
b/test/e2e-v2/cases/satellite/native-protocols/expected/dependency-services.yml
@@ -19,10 +19,14 @@ nodes:
   name: e2e-service-provider
   type: Tomcat
   isreal: true
+  layers:
+    - GENERAL
 - id: {{ b64enc "e2e-service-consumer"}}.1
   name: e2e-service-consumer
   type: Tomcat
   isreal: true
+  layers:
+    - GENERAL
 {{- end }}
 calls:
 {{- contains .calls }}
diff --git a/test/e2e-v2/cases/simple/expected/dependency-services-consumer.yml 
b/test/e2e-v2/cases/simple/expected/dependency-services-consumer.yml
index 106faf57a0..8beb54fc95 100644
--- a/test/e2e-v2/cases/simple/expected/dependency-services-consumer.yml
+++ b/test/e2e-v2/cases/simple/expected/dependency-services-consumer.yml
@@ -19,14 +19,20 @@ nodes:
   name: User
   type: USER
   isreal: false
+  layers:
+    - UNDEFINED
 - id: {{ b64enc "e2e-service-consumer"}}.1
   name: e2e-service-consumer
   type: Tomcat
   isreal: true
+  layers:
+    - GENERAL
 - id: {{ b64enc "e2e-service-provider"}}.1
   name: e2e-service-provider
   type: Tomcat
   isreal: true
+  layers:
+    - GENERAL
 {{- end }}
 calls:
 {{- contains .calls }}
diff --git a/test/e2e-v2/cases/simple/expected/dependency-services-provider.yml 
b/test/e2e-v2/cases/simple/expected/dependency-services-provider.yml
index 6364697409..366da2bed0 100644
--- a/test/e2e-v2/cases/simple/expected/dependency-services-provider.yml
+++ b/test/e2e-v2/cases/simple/expected/dependency-services-provider.yml
@@ -19,14 +19,20 @@ nodes:
   name: e2e-service-provider
   type: Tomcat
   isreal: true
+  layers:
+    - GENERAL
 - id: {{ b64enc "e2e-service-consumer"}}.1
   name: e2e-service-consumer
   type: Tomcat
   isreal: true
+  layers:
+    - GENERAL
 - id: {{ b64enc "localhost:-1" }}.0
   name: localhost:-1
   type: H2
   isreal: false
+  layers:
+    - VIRTUAL_DATABASE
 {{- end }}
 calls:
 {{- contains .calls }}
diff --git a/test/e2e-v2/cases/simple/simple-cases.yaml 
b/test/e2e-v2/cases/simple/simple-cases.yaml
index 2c13590839..3bf061553d 100644
--- a/test/e2e-v2/cases/simple/simple-cases.yaml
+++ b/test/e2e-v2/cases/simple/simple-cases.yaml
@@ -30,6 +30,9 @@ cases:
     expected: expected/service-endpoint-provider.yml
   - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql endpoint list 
--keyword=users --service-name=e2e-service-consumer
     expected: expected/service-endpoint-consumer.yml
+  # service endpoint with duration check
+  - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql endpoint list 
--keyword=users --service-name=e2e-service-provider --step=MINUTE
+    expected: expected/service-endpoint-provider.yml
   # dependency service
   - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql dependency global 
--layer=GENERAL
     expected: expected/dependency-services-provider.yml
diff --git 
a/test/e2e-v2/cases/storage/expected/dependency-services-consumer.yml 
b/test/e2e-v2/cases/storage/expected/dependency-services-consumer.yml
index 106faf57a0..8beb54fc95 100644
--- a/test/e2e-v2/cases/storage/expected/dependency-services-consumer.yml
+++ b/test/e2e-v2/cases/storage/expected/dependency-services-consumer.yml
@@ -19,14 +19,20 @@ nodes:
   name: User
   type: USER
   isreal: false
+  layers:
+    - UNDEFINED
 - id: {{ b64enc "e2e-service-consumer"}}.1
   name: e2e-service-consumer
   type: Tomcat
   isreal: true
+  layers:
+    - GENERAL
 - id: {{ b64enc "e2e-service-provider"}}.1
   name: e2e-service-provider
   type: Tomcat
   isreal: true
+  layers:
+    - GENERAL
 {{- end }}
 calls:
 {{- contains .calls }}
diff --git 
a/test/e2e-v2/cases/storage/expected/dependency-services-provider.yml 
b/test/e2e-v2/cases/storage/expected/dependency-services-provider.yml
index 6364697409..366da2bed0 100644
--- a/test/e2e-v2/cases/storage/expected/dependency-services-provider.yml
+++ b/test/e2e-v2/cases/storage/expected/dependency-services-provider.yml
@@ -19,14 +19,20 @@ nodes:
   name: e2e-service-provider
   type: Tomcat
   isreal: true
+  layers:
+    - GENERAL
 - id: {{ b64enc "e2e-service-consumer"}}.1
   name: e2e-service-consumer
   type: Tomcat
   isreal: true
+  layers:
+    - GENERAL
 - id: {{ b64enc "localhost:-1" }}.0
   name: localhost:-1
   type: H2
   isreal: false
+  layers:
+    - VIRTUAL_DATABASE
 {{- end }}
 calls:
 {{- contains .calls }}
diff --git a/test/e2e-v2/script/env b/test/e2e-v2/script/env
index 719ae1fe48..156a304da0 100644
--- a/test/e2e-v2/script/env
+++ b/test/e2e-v2/script/env
@@ -26,4 +26,4 @@ SW_ROVER_COMMIT=6bbd39aa701984482330d9dfb4dbaaff0527d55c
 SW_BANYANDB_COMMIT=9770bf48f9b88574683f56e2a137555cd68066d9
 SW_AGENT_PHP_COMMIT=3192c553002707d344bd6774cfab5bc61f67a1d3
 
-SW_CTL_COMMIT=d5f3597733aa5217373986d776a3ee5ee8b3c468
+SW_CTL_COMMIT=a14bf0e03d4d1ac0d8706e0677696a55a6bf57af


Reply via email to