package com.griddynamics.jagger.jaas.rest; import com.griddynamics.jagger.dbapi.dto.DecisionPerSessionDto; import com.griddynamics.jagger.engine.e1.services.data.service.MetricEntity; import com.griddynamics.jagger.engine.e1.services.data.service.MetricPlotPointEntity; import com.griddynamics.jagger.engine.e1.services.data.service.MetricSummaryValueEntity; import com.griddynamics.jagger.engine.e1.services.data.service.SessionEntity; import com.griddynamics.jagger.engine.e1.services.data.service.TestEntity; import com.griddynamics.jagger.jaas.service.DynamicDataService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.http.MediaType; 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 java.util.List; import java.util.Map; import java.util.Set; import static com.griddynamics.jagger.jaas.service.DynamicDataService.DEFAULT_DB_CONFIG_ID; /** * JaaS REST API controller based on Spring MVC which exposes DB backed resources * of DB which is configured at deployment time * in contrast to {@link DynamicDataServiceRestController} * which is capable to register DB to connect to dynamically at runtime. */ @RequestMapping(value = "/db") @RestController @ConditionalOnProperty(name = "jaas.hide.db.access.via.api", havingValue = "true") public class DataServiceRestController extends AbstractController { private final DynamicDataServiceRestController dynamicDataServiceRestController; public DataServiceRestController(@Autowired DynamicDataService dynamicDataService) { this.dynamicDataServiceRestController = new DynamicDataServiceRestController(dynamicDataService); } @GetMapping(value = "/sessions", produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity<Set<SessionEntity>> getSessions( @RequestParam(name = "id", required = false) String[] sessionIds ) { return dynamicDataServiceRestController.getSessions(DEFAULT_DB_CONFIG_ID, sessionIds); } @GetMapping(value = "/sessions/{sessionId}", produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity<SessionEntity> getSession(@PathVariable String sessionId) { return dynamicDataServiceRestController.getSession(DEFAULT_DB_CONFIG_ID, sessionId); } @GetMapping(value = "/sessions/{sessionId}/decision", produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity<DecisionPerSessionDto> getSessionDecision(@PathVariable String sessionId) { return dynamicDataServiceRestController.getSessionDecision(DEFAULT_DB_CONFIG_ID, sessionId); } @GetMapping(value = "/sessions/{sessionId}/tests/{testName:.+}", produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity<TestEntity> getTest(@PathVariable String sessionId, @PathVariable String testName) { return dynamicDataServiceRestController.getTest(DEFAULT_DB_CONFIG_ID, sessionId, testName); } @GetMapping(value = "/sessions/{sessionId}/tests", produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity<Set<TestEntity>> getTests(@PathVariable String sessionId) { return dynamicDataServiceRestController.getTests(DEFAULT_DB_CONFIG_ID, sessionId); } @GetMapping(value = "/tests/{testId}/metrics", produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity<Set<MetricEntity>> getMetrics(@PathVariable Long testId) { return dynamicDataServiceRestController.getMetrics(DEFAULT_DB_CONFIG_ID, testId); } @GetMapping(value = "/sessions/{sessionId}/tests/{testName:.+}/metrics", produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity<Set<MetricEntity>> getMetrics(@PathVariable String sessionId, @PathVariable String testName) { return dynamicDataServiceRestController.getMetrics(DEFAULT_DB_CONFIG_ID, sessionId, testName); } @GetMapping(value = "/sessions/{sessionId}/tests/{testName:.+}/metrics/summary", produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity<Map<MetricEntity, MetricSummaryValueEntity>> getMetricsSummary(@PathVariable String sessionId, @PathVariable String testName ) { return dynamicDataServiceRestController.getMetricsSummary(DEFAULT_DB_CONFIG_ID, sessionId, testName); } @GetMapping(value = "/sessions/{sessionId}/tests/{testName:.+}/metrics/plot-data", produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity<Map<MetricEntity, List<MetricPlotPointEntity>>> getMetricPlotData( @PathVariable String sessionId, @PathVariable String testName ) { return dynamicDataServiceRestController.getMetricPlotData(DEFAULT_DB_CONFIG_ID, sessionId, testName); } }