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 <[email protected]> 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)); + } }
