You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by ni...@apache.org on 2019/08/10 07:50:13 UTC

[servicecomb-pack] 08/36: SCB-1411 Add the get of slow transactions TOP N for API v1

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

ningjiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-pack.git

commit 67596cdb522c1af66c23f363c1242374782082fe
Author: Lei Zhang <co...@gmail.com>
AuthorDate: Wed Aug 7 23:00:54 2019 +0800

    SCB-1411 Add the get of slow transactions TOP N for API v1
---
 .../fsm/repository/NoneTransactionRepository.java  |  6 ++++++
 .../fsm/repository/TransactionRepository.java      |  3 +++
 .../ElasticsearchTransactionRepository.java        | 25 ++++++++++++++++++++++
 .../pack/alpha/server/api/APIControllerV1.java     |  5 +++++
 4 files changed, 39 insertions(+)

diff --git a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/repository/NoneTransactionRepository.java b/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/repository/NoneTransactionRepository.java
index a376f25..cd6b02f 100644
--- a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/repository/NoneTransactionRepository.java
+++ b/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/repository/NoneTransactionRepository.java
@@ -18,6 +18,7 @@
 package org.apache.servicecomb.pack.alpha.fsm.repository;
 
 import java.lang.invoke.MethodHandles;
+import java.util.List;
 import java.util.Map;
 import org.apache.servicecomb.pack.alpha.core.fsm.repository.model.GlobalTransaction;
 import org.apache.servicecomb.pack.alpha.core.fsm.repository.model.PagingGlobalTransactions;
@@ -47,4 +48,9 @@ public class NoneTransactionRepository implements TransactionRepository {
   public Map<String,Long> getTransactionStatistics() {
     throw new UnsupportedOperationException("NoneTransactionRepository Unsupported!");
   }
+
+  @Override
+  public List<GlobalTransaction> getSlowGlobalTransactionsTopN(int n) {
+    throw new UnsupportedOperationException("NoneTransactionRepository Unsupported!");
+  }
 }
diff --git a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/repository/TransactionRepository.java b/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/repository/TransactionRepository.java
index 0b3bbb1..c2d81b9 100644
--- a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/repository/TransactionRepository.java
+++ b/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/repository/TransactionRepository.java
@@ -17,6 +17,7 @@
 
 package org.apache.servicecomb.pack.alpha.fsm.repository;
 
+import java.util.List;
 import java.util.Map;
 import org.apache.servicecomb.pack.alpha.core.fsm.repository.model.GlobalTransaction;
 import org.apache.servicecomb.pack.alpha.core.fsm.repository.model.PagingGlobalTransactions;
@@ -32,4 +33,6 @@ public interface TransactionRepository {
       throws Exception;
 
   Map<String,Long> getTransactionStatistics();
+
+  List<GlobalTransaction> getSlowGlobalTransactionsTopN(int n);
 }
diff --git a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/repository/elasticsearch/ElasticsearchTransactionRepository.java b/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/repository/elasticsearch/ElasticsearchTransactionRepository.java
index e0aa41a..b7745ee 100644
--- a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/repository/elasticsearch/ElasticsearchTransactionRepository.java
+++ b/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/repository/elasticsearch/ElasticsearchTransactionRepository.java
@@ -31,12 +31,15 @@ import org.apache.servicecomb.pack.alpha.core.fsm.repository.model.PagingGlobalT
 import org.apache.servicecomb.pack.alpha.fsm.metrics.MetricsService;
 import org.apache.servicecomb.pack.alpha.fsm.repository.TransactionRepository;
 import org.elasticsearch.action.search.SearchResponse;
+import org.elasticsearch.action.search.SearchType;
 import org.elasticsearch.index.query.QueryBuilders;
 import org.elasticsearch.search.SearchHit;
 import org.elasticsearch.search.aggregations.AggregationBuilders;
 import org.elasticsearch.search.aggregations.bucket.MultiBucketsAggregation;
 import org.elasticsearch.search.aggregations.bucket.terms.StringTerms;
 import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder;
+import org.elasticsearch.search.sort.SortBuilders;
+import org.elasticsearch.search.sort.SortOrder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.data.domain.PageRequest;
@@ -153,6 +156,28 @@ public class ElasticsearchTransactionRepository implements TransactionRepository
     });
   }
 
+  @Override
+  public List<GlobalTransaction> getSlowGlobalTransactionsTopN(int n) {
+    ObjectMapper jsonMapper = new ObjectMapper();
+    List<GlobalTransaction> globalTransactions = new ArrayList();
+    SearchResponse response = this.template.getClient().prepareSearch(INDEX_NAME)
+        .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
+        .setQuery(QueryBuilders.matchAllQuery())
+        .addSort(SortBuilders.fieldSort("durationTime").order(SortOrder.DESC))
+        .setFrom(0).setSize(10).setExplain(true)
+        .get();
+    response.getHits().forEach(hit -> {
+      try{
+        GlobalTransactionDocument dto = jsonMapper
+            .readValue(hit.getSourceAsString(), GlobalTransactionDocument.class);
+        globalTransactions.add(dto);
+      }catch (Exception e){
+        LOG.error(e.getMessage(),e);
+      }
+    });
+    return globalTransactions;
+  }
+
   private final SearchResultMapper searchResultMapper = new SearchResultMapper() {
     @Override
     public <T> AggregatedPage<T> mapResults(SearchResponse response, Class<T> aClass,
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/api/APIControllerV1.java b/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/api/APIControllerV1.java
index 4609821..c3b5394 100644
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/api/APIControllerV1.java
+++ b/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/api/APIControllerV1.java
@@ -17,6 +17,7 @@
 
 package org.apache.servicecomb.pack.alpha.server.api;
 
+import java.util.List;
 import java.util.Map;
 import org.apache.servicecomb.pack.alpha.fsm.repository.TransactionRepository;
 import org.apache.servicecomb.pack.alpha.core.fsm.repository.model.GlobalTransaction;
@@ -67,4 +68,8 @@ public class APIControllerV1 {
     return ResponseEntity.ok(transactionRepository.getTransactionStatistics());
   }
 
+  @GetMapping(value = "/transaction/slow")
+  ResponseEntity<List<GlobalTransaction>> getSlowTransactions() {
+    return ResponseEntity.ok(transactionRepository.getSlowGlobalTransactionsTopN(10));
+  }
 }