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 c744e02299b040a1dd5ddb435f496ce209be352f Author: Lei Zhang <[email protected]> AuthorDate: Thu Aug 8 23:50:53 2019 +0800 SCB-1411 Refactoring rest API --- .../servicecomb/pack/alpha/core/api/APIv1.java | 39 ++++++++++++++++++++ .../{APIControllerV1.java => APIv1Controller.java} | 30 +++++---------- .../api/{APIControllerV1.java => APIv1Impl.java} | 43 ++++++++-------------- ...ollerV1Tests.java => APIv1ControllerTests.java} | 42 ++++++++++----------- 4 files changed, 85 insertions(+), 69 deletions(-) diff --git a/alpha/alpha-core/src/main/java/org/apache/servicecomb/pack/alpha/core/api/APIv1.java b/alpha/alpha-core/src/main/java/org/apache/servicecomb/pack/alpha/core/api/APIv1.java new file mode 100644 index 0000000..de9cf64 --- /dev/null +++ b/alpha/alpha-core/src/main/java/org/apache/servicecomb/pack/alpha/core/api/APIv1.java @@ -0,0 +1,39 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.servicecomb.pack.alpha.core.api; + +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; +import org.apache.servicecomb.pack.alpha.core.metrics.AlphaMetrics; + +public interface APIv1 { + + AlphaMetrics getMetrics(); + + GlobalTransaction getTransactionByGlobalTxId(String globalTxId) + throws Exception; + + PagingGlobalTransactions getTransactions(int page, int size) + throws Exception; + + Map<String, Long> getTransactionStatistics(); + + List<GlobalTransaction> getSlowTransactions(); +} 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/APIv1Controller.java similarity index 67% copy from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/api/APIControllerV1.java copy to alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/api/APIv1Controller.java index f6eac8d..f071884 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/APIv1Controller.java @@ -20,10 +20,8 @@ package org.apache.servicecomb.pack.alpha.server.api; import java.util.List; import java.util.Map; import org.apache.servicecomb.pack.alpha.core.metrics.AlphaMetrics; -import org.apache.servicecomb.pack.alpha.fsm.repository.TransactionRepository; import org.apache.servicecomb.pack.alpha.core.fsm.repository.model.GlobalTransaction; import org.apache.servicecomb.pack.alpha.core.fsm.repository.model.PagingGlobalTransactions; -import org.apache.servicecomb.pack.alpha.server.metrics.AlphaMetricsEndpoint; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; @@ -34,46 +32,36 @@ import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/alpha/api/v1") -public class APIControllerV1 { +public class APIv1Controller { @Autowired - AlphaMetricsEndpoint alphaMetricsEndpoint; + APIv1Impl APIv1Impl; - @Autowired(required = false) - TransactionRepository transactionRepository; - - @GetMapping(value = "/metrics") + @GetMapping(value = "/getMetrics") ResponseEntity<AlphaMetrics> metrics() { - AlphaMetrics alphaMetrics = new AlphaMetrics(); - alphaMetrics.setMetrics(alphaMetricsEndpoint.getMetrics()); - alphaMetrics.setNodeType(alphaMetricsEndpoint.getNodeType()); - return ResponseEntity.ok(alphaMetrics); + return ResponseEntity.ok(APIv1Impl.getMetrics()); } @GetMapping(value = "/transaction/{globalTxId}") ResponseEntity<GlobalTransaction> getTransactionByGlobalTxId(@PathVariable String globalTxId) throws Exception { - GlobalTransaction globalTransaction = transactionRepository - .getGlobalTransactionByGlobalTxId(globalTxId); - return ResponseEntity.ok(globalTransaction); + return ResponseEntity.ok(APIv1Impl.getTransactionByGlobalTxId(globalTxId)); } @GetMapping(value = "/transaction") ResponseEntity<PagingGlobalTransactions> getTransactions(@RequestParam(value = "page", required = false, defaultValue = "0") int page, @RequestParam(value = "size", required = false, defaultValue = "50") int size) throws Exception { - PagingGlobalTransactions pagingGlobalTransactions = transactionRepository - .getGlobalTransactions(page, size); - return ResponseEntity.ok(pagingGlobalTransactions); + return ResponseEntity.ok(APIv1Impl.getTransactions(page,size)); } @GetMapping(value = "/transaction/statistics") - ResponseEntity<Map<String,Long>> getTransactions() { - return ResponseEntity.ok(transactionRepository.getTransactionStatistics()); + ResponseEntity<Map<String,Long>> getTransactionStatistics() { + return ResponseEntity.ok(APIv1Impl.getTransactionStatistics()); } @GetMapping(value = "/transaction/slow") ResponseEntity<List<GlobalTransaction>> getSlowTransactions() { - return ResponseEntity.ok(transactionRepository.getSlowGlobalTransactionsTopN(10)); + return ResponseEntity.ok(APIv1Impl.getSlowTransactions()); } } 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/APIv1Impl.java similarity index 58% rename from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/api/APIControllerV1.java rename to alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/api/APIv1Impl.java index f6eac8d..371f0ea 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/APIv1Impl.java @@ -19,22 +19,17 @@ package org.apache.servicecomb.pack.alpha.server.api; import java.util.List; import java.util.Map; -import org.apache.servicecomb.pack.alpha.core.metrics.AlphaMetrics; -import org.apache.servicecomb.pack.alpha.fsm.repository.TransactionRepository; +import org.apache.servicecomb.pack.alpha.core.api.APIv1; import org.apache.servicecomb.pack.alpha.core.fsm.repository.model.GlobalTransaction; import org.apache.servicecomb.pack.alpha.core.fsm.repository.model.PagingGlobalTransactions; +import org.apache.servicecomb.pack.alpha.core.metrics.AlphaMetrics; +import org.apache.servicecomb.pack.alpha.fsm.repository.TransactionRepository; import org.apache.servicecomb.pack.alpha.server.metrics.AlphaMetricsEndpoint; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.stereotype.Component; -@RestController -@RequestMapping("/alpha/api/v1") -public class APIControllerV1 { +@Component +public class APIv1Impl implements APIv1 { @Autowired AlphaMetricsEndpoint alphaMetricsEndpoint; @@ -42,38 +37,32 @@ public class APIControllerV1 { @Autowired(required = false) TransactionRepository transactionRepository; - @GetMapping(value = "/metrics") - ResponseEntity<AlphaMetrics> metrics() { + public AlphaMetrics getMetrics() { AlphaMetrics alphaMetrics = new AlphaMetrics(); alphaMetrics.setMetrics(alphaMetricsEndpoint.getMetrics()); alphaMetrics.setNodeType(alphaMetricsEndpoint.getNodeType()); - return ResponseEntity.ok(alphaMetrics); + return alphaMetrics; } - @GetMapping(value = "/transaction/{globalTxId}") - ResponseEntity<GlobalTransaction> getTransactionByGlobalTxId(@PathVariable String globalTxId) + public GlobalTransaction getTransactionByGlobalTxId(String globalTxId) throws Exception { GlobalTransaction globalTransaction = transactionRepository .getGlobalTransactionByGlobalTxId(globalTxId); - return ResponseEntity.ok(globalTransaction); + return globalTransaction; } - @GetMapping(value = "/transaction") - ResponseEntity<PagingGlobalTransactions> getTransactions(@RequestParam(value = "page", required = false, defaultValue = "0") int page, - @RequestParam(value = "size", required = false, defaultValue = "50") int size) + public PagingGlobalTransactions getTransactions(int page, int size) throws Exception { PagingGlobalTransactions pagingGlobalTransactions = transactionRepository .getGlobalTransactions(page, size); - return ResponseEntity.ok(pagingGlobalTransactions); + return pagingGlobalTransactions; } - @GetMapping(value = "/transaction/statistics") - ResponseEntity<Map<String,Long>> getTransactions() { - return ResponseEntity.ok(transactionRepository.getTransactionStatistics()); + public Map<String, Long> getTransactionStatistics() { + return transactionRepository.getTransactionStatistics(); } - @GetMapping(value = "/transaction/slow") - ResponseEntity<List<GlobalTransaction>> getSlowTransactions() { - return ResponseEntity.ok(transactionRepository.getSlowGlobalTransactionsTopN(10)); + public List<GlobalTransaction> getSlowTransactions() { + return transactionRepository.getSlowGlobalTransactionsTopN(10); } } diff --git a/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/api/APIControllerV1Tests.java b/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/api/APIv1ControllerTests.java similarity index 91% rename from alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/api/APIControllerV1Tests.java rename to alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/api/APIv1ControllerTests.java index 76202dd..2b6cfbd 100644 --- a/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/api/APIControllerV1Tests.java +++ b/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/api/APIv1ControllerTests.java @@ -61,8 +61,8 @@ import org.springframework.test.web.servlet.result.MockMvcResultMatchers; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; @RunWith(SpringRunner.class) -@WebMvcTest(value = {APIControllerV1.class, AlphaMetricsEndpoint.class}) -public class APIControllerV1Tests { +@WebMvcTest(value = {APIv1Controller.class, AlphaMetricsEndpoint.class}) +public class APIv1ControllerTests { @Autowired private MockMvc mockMvc; @@ -102,28 +102,28 @@ public class APIControllerV1Tests { metricsBean.doSagaAvgTime(5); when(metricsService.metrics()).thenReturn(metricsBean); when(nodeStatus.getTypeEnum()).thenReturn(TypeEnum.MASTER); - mockMvc.perform(get("/alpha/api/v1/metrics")) + mockMvc.perform(get("/alpha/api/v1/getMetrics")) .andExpect(status().isOk()) .andExpect( MockMvcResultMatchers.content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) - .andExpect(jsonPath("$.metrics.eventReceived").value(1)) - .andExpect(jsonPath("$.metrics.eventAccepted").value(1)) - .andExpect(jsonPath("$.metrics.eventRejected").value(0)) - .andExpect(jsonPath("$.metrics.eventAvgTime").value(5.0)) - .andExpect(jsonPath("$.metrics.actorReceived").value(1)) - .andExpect(jsonPath("$.metrics.actorAccepted").value(1)) - .andExpect(jsonPath("$.metrics.actorRejected").value(0)) - .andExpect(jsonPath("$.metrics.actorAvgTime").value(5.0)) - .andExpect(jsonPath("$.metrics.repositoryReceived").value(1)) - .andExpect(jsonPath("$.metrics.repositoryAccepted").value(1)) - .andExpect(jsonPath("$.metrics.repositoryRejected").value(0)) - .andExpect(jsonPath("$.metrics.repositoryAvgTime").value(5.0)) - .andExpect(jsonPath("$.metrics.sagaBeginCounter").value(1)) - .andExpect(jsonPath("$.metrics.sagaEndCounter").value(1)) - .andExpect(jsonPath("$.metrics.sagaAvgTime").value(5.0)) - .andExpect(jsonPath("$.metrics.committed").value(1)) - .andExpect(jsonPath("$.metrics.compensated").value(1)) - .andExpect(jsonPath("$.metrics.suspended").value(1)) + .andExpect(jsonPath("$.getMetrics.eventReceived").value(1)) + .andExpect(jsonPath("$.getMetrics.eventAccepted").value(1)) + .andExpect(jsonPath("$.getMetrics.eventRejected").value(0)) + .andExpect(jsonPath("$.getMetrics.eventAvgTime").value(5.0)) + .andExpect(jsonPath("$.getMetrics.actorReceived").value(1)) + .andExpect(jsonPath("$.getMetrics.actorAccepted").value(1)) + .andExpect(jsonPath("$.getMetrics.actorRejected").value(0)) + .andExpect(jsonPath("$.getMetrics.actorAvgTime").value(5.0)) + .andExpect(jsonPath("$.getMetrics.repositoryReceived").value(1)) + .andExpect(jsonPath("$.getMetrics.repositoryAccepted").value(1)) + .andExpect(jsonPath("$.getMetrics.repositoryRejected").value(0)) + .andExpect(jsonPath("$.getMetrics.repositoryAvgTime").value(5.0)) + .andExpect(jsonPath("$.getMetrics.sagaBeginCounter").value(1)) + .andExpect(jsonPath("$.getMetrics.sagaEndCounter").value(1)) + .andExpect(jsonPath("$.getMetrics.sagaAvgTime").value(5.0)) + .andExpect(jsonPath("$.getMetrics.committed").value(1)) + .andExpect(jsonPath("$.getMetrics.compensated").value(1)) + .andExpect(jsonPath("$.getMetrics.suspended").value(1)) .andExpect(jsonPath("$.nodeType").value(TypeEnum.MASTER.name())) .andReturn(); }
