2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2018 Ericsson. All rights reserved.
4 * ================================================================================
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
17 * SPDX-License-Identifier: Apache-2.0
18 * ============LICENSE_END=========================================================
20 package org.onap.so.monitoring.rest.api;
22 import java.util.List;
25 import javax.ws.rs.GET;
26 import javax.ws.rs.POST;
27 import javax.ws.rs.Path;
28 import javax.ws.rs.PathParam;
29 import javax.ws.rs.Produces;
30 import javax.ws.rs.QueryParam;
31 import javax.ws.rs.core.MediaType;
32 import javax.ws.rs.core.Response;
33 import javax.ws.rs.core.Response.Status;
35 import org.onap.so.monitoring.db.service.DatabaseServiceProvider;
36 import org.onap.so.monitoring.model.ActivityInstanceDetail;
37 import org.onap.so.monitoring.model.ProcessDefinitionDetail;
38 import org.onap.so.monitoring.model.ProcessInstanceDetail;
39 import org.onap.so.monitoring.model.ProcessInstanceIdDetail;
40 import org.onap.so.monitoring.model.ProcessInstanceVariableDetail;
41 import org.onap.so.monitoring.model.SoInfraRequest;
42 import org.onap.so.monitoring.rest.service.CamundaProcessDataServiceProvider;
43 import org.onap.so.rest.exceptions.InvalidRestRequestException;
44 import org.onap.so.rest.exceptions.RestProcessingException;
45 import org.slf4j.Logger;
46 import org.slf4j.LoggerFactory;
47 import org.springframework.beans.factory.annotation.Autowired;
48 import org.springframework.stereotype.Component;
50 import com.google.common.base.Optional;
53 * @author waqas.ikram@ericsson.com
57 public class SoMonitoringController {
59 private static final String INVALID_PROCESS_INSTANCE_ERROR_MESSAGE = "Invalid process instance id: ";
61 private static final Logger LOGGER = LoggerFactory.getLogger(SoMonitoringController.class);
63 private final DatabaseServiceProvider databaseServiceProvider;
65 private final CamundaProcessDataServiceProvider camundaProcessDataServiceProvider;
68 public SoMonitoringController(final DatabaseServiceProvider databaseServiceProvider,
69 final CamundaProcessDataServiceProvider camundaProcessDataServiceProvider) {
70 this.databaseServiceProvider = databaseServiceProvider;
71 this.camundaProcessDataServiceProvider = camundaProcessDataServiceProvider;
75 @Path("/process-instance-id/{requestId}")
76 @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
77 public Response getProcessInstanceId(final @PathParam("requestId") String requestId) {
78 if (requestId == null || requestId.isEmpty()) {
79 return Response.status(Status.BAD_REQUEST).entity("Invalid Request id: " + requestId).build();
82 final Optional<ProcessInstanceIdDetail> processInstanceId =
83 camundaProcessDataServiceProvider.getProcessInstanceIdDetail(requestId);
84 if (processInstanceId.isPresent()) {
85 return Response.status(Status.OK).entity(processInstanceId.get()).build();
88 LOGGER.error("Unable to find process instance id for : " + requestId);
89 return Response.status(Status.NO_CONTENT).build();
91 } catch (final InvalidRestRequestException extensions) {
92 final String message = "Unable to find process instance id for : " + requestId;
93 LOGGER.error(message);
94 return Response.status(Status.BAD_REQUEST).entity(message).build();
95 } catch (final RestProcessingException restProcessingException) {
96 final String message = "Unable to process request for id: " + requestId;
97 LOGGER.error(message);
98 return Response.status(Status.INTERNAL_SERVER_ERROR).entity(message).build();
103 @Path("/process-instance/{processInstanceId}")
104 @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
105 public Response getSingleProcessInstance(final @PathParam("processInstanceId") String processInstanceId) {
106 if (processInstanceId == null || processInstanceId.isEmpty()) {
107 return Response.status(Status.BAD_REQUEST)
108 .entity(INVALID_PROCESS_INSTANCE_ERROR_MESSAGE + processInstanceId).build();
111 final Optional<ProcessInstanceDetail> processInstanceDetail =
112 camundaProcessDataServiceProvider.getSingleProcessInstanceDetail(processInstanceId);
113 if (processInstanceDetail.isPresent()) {
114 return Response.status(Status.OK).entity(processInstanceDetail.get()).build();
117 LOGGER.error("Unable to find process instance id for : " + processInstanceId);
118 return Response.status(Status.NO_CONTENT).build();
120 } catch (final InvalidRestRequestException extensions) {
121 final String message = "Unable to find process instance id for : " + processInstanceId;
122 LOGGER.error(message);
123 return Response.status(Status.BAD_REQUEST).entity(message).build();
124 } catch (final RestProcessingException restProcessingException) {
125 final String message = "Unable to process request for id: " + processInstanceId;
126 LOGGER.error(message);
127 return Response.status(Status.INTERNAL_SERVER_ERROR).entity(message).build();
132 @Path("/process-definition/{processDefinitionId}")
133 @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
134 public Response getProcessDefinitionXml(final @PathParam("processDefinitionId") String processDefinitionId) {
135 if (processDefinitionId == null || processDefinitionId.isEmpty()) {
136 return Response.status(Status.BAD_REQUEST).entity("Invalid process definition id: " + processDefinitionId)
140 final Optional<ProcessDefinitionDetail> response =
141 camundaProcessDataServiceProvider.getProcessDefinition(processDefinitionId);
142 if (response.isPresent()) {
143 final ProcessDefinitionDetail definitionDetail = response.get();
144 return Response.status(Status.OK).entity(definitionDetail).build();
146 LOGGER.error("Unable to find process definition xml for processDefinitionId: " + processDefinitionId);
147 return Response.status(Status.NO_CONTENT).build();
149 } catch (final InvalidRestRequestException extensions) {
150 final String message =
151 "Unable to find process definition xml for processDefinitionId: {}" + processDefinitionId;
152 return Response.status(Status.BAD_REQUEST).entity(message).build();
153 } catch (final RestProcessingException restProcessingException) {
154 final String message = "Unable to get process definition xml for id: " + processDefinitionId;
155 LOGGER.error(message);
156 return Response.status(Status.INTERNAL_SERVER_ERROR).entity(message).build();
161 @Path("/activity-instance/{processInstanceId}")
162 @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
163 public Response getActivityInstanceDetail(final @PathParam("processInstanceId") String processInstanceId) {
164 if (processInstanceId == null || processInstanceId.isEmpty()) {
165 return Response.status(Status.BAD_REQUEST)
166 .entity(INVALID_PROCESS_INSTANCE_ERROR_MESSAGE + processInstanceId).build();
169 final List<ActivityInstanceDetail> activityInstanceDetails =
170 camundaProcessDataServiceProvider.getActivityInstance(processInstanceId);
171 return Response.status(Status.OK).entity(activityInstanceDetails).build();
172 } catch (final InvalidRestRequestException extensions) {
173 final String message = "Unable to find activity instance for processInstanceId: " + processInstanceId;
174 LOGGER.error(message);
175 return Response.status(Status.BAD_REQUEST).entity(message).build();
176 } catch (final RestProcessingException restProcessingException) {
177 final String message = "Unable to get activity instance detail for id: " + processInstanceId;
178 LOGGER.error(message);
179 return Response.status(Status.INTERNAL_SERVER_ERROR).entity(message).build();
184 @Path("/variable-instance/{processInstanceId}")
185 @Produces(MediaType.APPLICATION_JSON)
186 public Response getProcessInstanceVariables(final @PathParam("processInstanceId") String processInstanceId) {
187 if (processInstanceId == null || processInstanceId.isEmpty()) {
188 return Response.status(Status.BAD_REQUEST)
189 .entity(INVALID_PROCESS_INSTANCE_ERROR_MESSAGE + processInstanceId).build();
192 final List<ProcessInstanceVariableDetail> processInstanceVariable =
193 camundaProcessDataServiceProvider.getProcessInstanceVariable(processInstanceId);
194 return Response.status(Status.OK).entity(processInstanceVariable).build();
195 } catch (final InvalidRestRequestException extensions) {
196 final String message =
197 "Unable to find process instance variables for processInstanceId: " + processInstanceId;
198 LOGGER.error(message);
199 return Response.status(Status.BAD_REQUEST).entity(message).build();
200 } catch (final RestProcessingException restProcessingException) {
201 final String message = "Unable to get process instance variables for id: " + processInstanceId;
202 LOGGER.error(message);
203 return Response.status(Status.INTERNAL_SERVER_ERROR).entity(message).build();
209 @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
210 public Response getInfraActiveRequests(final Map<String, String[]> filters,
211 @QueryParam("from") final long startTime, @QueryParam("to") final long endTime,
212 @QueryParam("maxResult") final Integer maxResult) {
214 if (filters == null) {
215 return Response.status(Status.BAD_REQUEST).entity("Invalid filters: " + filters).build();
218 final List<SoInfraRequest> requests =
219 databaseServiceProvider.getSoInfraRequest(filters, startTime, endTime, maxResult);
220 LOGGER.info("result size: " + requests.size());
221 return Response.status(Status.OK).entity(requests).build();
223 } catch (final InvalidRestRequestException extensions) {
224 final String message = "Unable to search request for filters: " + filters + ", from: " + startTime
225 + ", to: " + endTime + ", maxResult: " + maxResult;
226 LOGGER.error(message);
227 return Response.status(Status.BAD_REQUEST).entity(message).build();
228 } catch (final RestProcessingException restProcessingException) {
229 final String message = "Unable to search request for filters: " + filters + ", from: " + startTime
230 + ", to: " + endTime + ", maxResult: " + maxResult;
231 LOGGER.error(message);
232 return Response.status(Status.INTERNAL_SERVER_ERROR).entity(message).build();