summaryrefslogtreecommitdiffstats
path: root/dcae-analytics/dcae-analytics-tca-web/src/main/java/org/onap/dcae/analytics/tca/web/controller/TcaRestController.java
diff options
context:
space:
mode:
Diffstat (limited to 'dcae-analytics/dcae-analytics-tca-web/src/main/java/org/onap/dcae/analytics/tca/web/controller/TcaRestController.java')
-rw-r--r--dcae-analytics/dcae-analytics-tca-web/src/main/java/org/onap/dcae/analytics/tca/web/controller/TcaRestController.java114
1 files changed, 114 insertions, 0 deletions
diff --git a/dcae-analytics/dcae-analytics-tca-web/src/main/java/org/onap/dcae/analytics/tca/web/controller/TcaRestController.java b/dcae-analytics/dcae-analytics-tca-web/src/main/java/org/onap/dcae/analytics/tca/web/controller/TcaRestController.java
new file mode 100644
index 0000000..eb9eb13
--- /dev/null
+++ b/dcae-analytics/dcae-analytics-tca-web/src/main/java/org/onap/dcae/analytics/tca/web/controller/TcaRestController.java
@@ -0,0 +1,114 @@
+/*
+ * ================================================================================
+ * Copyright (c) 2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed 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.
+ * ============LICENSE_END=========================================================
+ *
+ */
+
+package org.onap.dcae.analytics.tca.web.controller;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+import java.time.format.DateTimeFormatter;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.onap.dcae.analytics.model.TcaModelConstants;
+import org.onap.dcae.analytics.model.common.ConfigSource;
+import org.onap.dcae.analytics.tca.core.service.TcaExecutionContext;
+import org.onap.dcae.analytics.tca.core.service.TcaResultContext;
+import org.onap.dcae.analytics.tca.model.policy.TcaPolicy;
+import org.onap.dcae.analytics.tca.model.restapi.TcaExecutionRequest;
+import org.onap.dcae.analytics.tca.model.restapi.TcaExecutionResponse;
+import org.onap.dcae.analytics.tca.web.domain.TcaPolicyWrapper;
+import org.onap.dcae.analytics.tca.web.service.TcaProcessingService;
+import org.onap.dcae.analytics.tca.web.util.TcaUtils;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author Rajiv Singla
+ */
+@RestController
+@RequestMapping(TcaModelConstants.TCA_REST_API_PREFIX)
+@Api(value = "Provides endpoints for TCA micro service")
+public class TcaRestController {
+
+ private final TcaProcessingService tcaProcessingService;
+ private final TcaPolicyWrapper tcaPolicyWrapper;
+
+
+ public TcaRestController(final TcaProcessingService tcaProcessingService,
+ final TcaPolicyWrapper tcaPolicyWrapper) {
+ this.tcaProcessingService = tcaProcessingService;
+ this.tcaPolicyWrapper = tcaPolicyWrapper;
+ }
+
+ @GetMapping(value = TcaModelConstants.TCA_POLICY_ENDPOINT, produces = MediaType.APPLICATION_JSON_VALUE)
+ @ApiOperation(value = "Provides current TCA Policy")
+ public ResponseEntity<TcaPolicy> getTcaPolicy() {
+ return getTcaPolicyResponse(tcaPolicyWrapper);
+ }
+
+ @PostMapping(value = TcaModelConstants.TCA_POLICY_ENDPOINT, produces = MediaType.APPLICATION_JSON_VALUE,
+ consumes = MediaType.APPLICATION_JSON_VALUE)
+ @ApiOperation(value = "Sets new value for TCA Policy and returns current Policy")
+ public ResponseEntity<TcaPolicy> setTcaPolicy(@RequestBody final TcaPolicy tcaPolicy) {
+ tcaPolicyWrapper.setTcaPolicy(tcaPolicy, ConfigSource.REST_API);
+ return getTcaPolicyResponse(tcaPolicyWrapper);
+ }
+
+
+ @PostMapping(value = TcaModelConstants.TCA_EXECUTION_ENDPOINT, produces = MediaType.APPLICATION_JSON_VALUE,
+ consumes = MediaType.APPLICATION_JSON_VALUE)
+ @ApiOperation(value = "Applies TCA to provided execution request and generated TCA execution response")
+ public ResponseEntity<List<TcaExecutionResponse>> execute(@RequestBody final TcaExecutionRequest
+ tcaExecutionRequest) {
+ // process tca execution request
+ final List<TcaExecutionContext> executionContexts = tcaProcessingService.getTcaExecutionResults(
+ tcaExecutionRequest.getRequestId(), tcaExecutionRequest.getTransactionId(),
+ tcaExecutionRequest.getTcaPolicy(), TcaUtils.getCefMessagesFromEventListeners
+ (tcaExecutionRequest.getEventListeners()));
+ // create execution response
+ final List<TcaExecutionResponse> tcaExecutionResponses = executionContexts.stream().map(tcaExecutionContext -> {
+ final TcaExecutionResponse tcaExecutionResponse = new TcaExecutionResponse();
+ tcaExecutionResponse.setRequestId(tcaExecutionContext.getRequestId());
+ tcaExecutionResponse.setTransactionId(tcaExecutionContext.getTransactionId());
+ final TcaResultContext tcaResultContext = tcaExecutionContext.getTcaResultContext();
+ tcaExecutionResponse.setViolatedMetricsPerEventName(tcaResultContext.getViolatedMetricsPerEventName());
+ tcaExecutionResponse.setTcaAlert(tcaResultContext.getTcaAlert());
+ return tcaExecutionResponse;
+ }).collect(Collectors.toList());
+
+ return ResponseEntity.ok().body(tcaExecutionResponses);
+ }
+
+
+ private static ResponseEntity<TcaPolicy> getTcaPolicyResponse(final TcaPolicyWrapper tcaPolicyWrapper) {
+ return ResponseEntity.ok()
+ .header(TcaModelConstants.TCA_POLICY_SOURCE_HEADER_KEY, tcaPolicyWrapper.getConfigSource().name())
+ .header(TcaModelConstants.TCA_POLICY_CREATION_HEADER_KEY,
+ tcaPolicyWrapper.getCreationTime().format(DateTimeFormatter.ISO_OFFSET_DATE_TIME))
+ .header(TcaModelConstants.TCA_POLICY_VERSION_HEADER_KEY, tcaPolicyWrapper.getPolicyVersion())
+ .body(tcaPolicyWrapper.getTcaPolicy());
+ }
+
+}