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));
+ }
}