2 * ============LICENSE_START==============================================
3 * Copyright (c) 2019 AT&T Intellectual Property.
4 * =======================================================================
5 * Licensed under the Apache License, Version 2.0 (the "License"); you may
6 * not use this file except in compliance with the License. You may obtain a
7 * 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
14 * or implied. See the License for the specific language governing
15 * permissions and limitations under the License.
16 * ============LICENSE_END=================================================
20 package org.onap.optf.cmso.optimizer.clients.optimizer;
22 import com.fasterxml.jackson.databind.ObjectMapper;
23 import java.util.List;
24 import java.util.Optional;
25 import java.util.UUID;
26 import org.onap.observations.Observation;
27 import org.onap.optf.cmso.optimizer.clients.optimizer.models.OptimizerEngineResponse;
28 import org.onap.optf.cmso.optimizer.clients.optimizer.models.OptimizerEngineResponse.OptimizerEngineResponseStatus;
29 import org.onap.optf.cmso.optimizer.clients.optimizer.models.OptimizerResults;
30 import org.onap.optf.cmso.optimizer.clients.optimizer.models.OptimizerSchedule;
31 import org.onap.optf.cmso.optimizer.clients.topology.TopologyRequestManager;
32 import org.onap.optf.cmso.optimizer.clients.topology.models.TopologyResponse;
33 import org.onap.optf.cmso.optimizer.common.LogMessages;
34 import org.onap.optf.cmso.optimizer.model.Optimizer;
35 import org.onap.optf.cmso.optimizer.model.Request;
36 import org.onap.optf.cmso.optimizer.model.Response;
37 import org.onap.optf.cmso.optimizer.model.dao.OptimizerDao;
38 import org.onap.optf.cmso.optimizer.model.dao.RequestDao;
39 import org.onap.optf.cmso.optimizer.model.dao.ResponseDao;
40 import org.onap.optf.cmso.optimizer.service.rs.models.OptimizerRequest;
41 import org.onap.optf.cmso.optimizer.service.rs.models.OptimizerResponse;
42 import org.onap.optf.cmso.optimizer.service.rs.models.OptimizerResponse.OptimizeScheduleStatus;
43 import org.onap.optf.cmso.optimizer.service.rs.models.OptimizerScheduleInfo;
44 import org.springframework.beans.factory.annotation.Autowired;
45 import org.springframework.core.env.Environment;
46 import org.springframework.stereotype.Component;
49 * The Class OPtimizerRequestManager.
52 public class OptimizerRequestManager {
58 RequestDao requestDao;
61 OptimizerDao optimizerDao;
64 ResponseDao responseDao;
67 OptimizerClient optimizerClient;
70 TopologyRequestManager topologyRequestManager;
73 * Creates the Optimizer request.
75 * @param requestRow the request row
76 * @return the Optimizer response
78 public OptimizerEngineResponse createOptimizerRequest(Request requestRow) {
81 Optimizer optimizer = getExistingOptmizer(requestRow.getUuid());
82 if (optimizer == null) {
83 optimizer = new Optimizer();
84 optimizer.setUuid(requestRow.getUuid());
85 optimizer.setOptimizeRetries(0);
87 optimizer.setOptimizeStart(System.currentTimeMillis());
88 OptimizerEngineResponse apiResponse = optimizerClient.makeRequest(requestRow, optimizer);
89 if (apiResponse.getStatus() == OptimizerEngineResponseStatus.COMPLETED) {
90 optimizer.setOptimizeEnd(System.currentTimeMillis());
91 optimizer.setOptimizeResponse(""); // Perhaps we do not need to persist...
92 buildFinalResponse(requestRow, apiResponse);
94 optimizerDao.save(optimizer);
97 OptimizerEngineResponse apiResponse = new OptimizerEngineResponse();
98 apiResponse.setRequestId(requestRow.getUuid().toString());
99 apiResponse.setStatus(OptimizerEngineResponseStatus.IN_QUEUE);
100 apiResponse.setPollingSeconds(60);
106 private void buildFinalResponse(Request requestRow, OptimizerEngineResponse apiResponse) {
107 Optional<Response> opt = responseDao.findById(requestRow.getUuid());
108 Response responseRow = null;
111 responseRow = opt.get();
113 if (responseRow == null)
115 responseRow = new Response();
116 responseRow.setUuid(requestRow.getUuid());
121 OptimizerResults results = apiResponse.getOptimizerResults();
122 OptimizerResponse response = new OptimizerResponse();
123 response.setRequestId(requestRow.getUuid().toString());
125 String optString = requestRow.getRequest();
127 OptimizerRequest optimizerResquest = new ObjectMapper().readValue(optString, OptimizerRequest.class);
128 TopologyResponse topologyResponse = topologyRequestManager.getTopologyResponse(requestRow.getUuid());
129 ElementWindowMapping ewm = new ElementWindowMapping(optimizerResquest, topologyResponse);
130 ewm.initializeForProcessResult();
131 for (OptimizerSchedule result : results.getSchedules()) {
132 OptimizerScheduleInfo info = ewm.processResult(result);
134 response.getSchedules().add(info);
137 responseRow.setRepsonse(new ObjectMapper().writeValueAsString(response));
138 requestRow.setStatus(OptimizeScheduleStatus.COMPLETED.toString());
139 responseDao.save(responseRow);
140 requestDao.save(requestRow);
144 Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage());
145 requestRow.setStatus(OptimizeScheduleStatus.FAILED.toString());
146 requestRow.setMessage(e.getMessage());
147 responseRow.setRepsonse("");
148 responseDao.save(responseRow);
149 requestDao.save(requestRow);
155 private boolean okToDispatch() {
156 // TODO Auto-generated method stub
158 // Will probably change to @Async on makeRequest to queue requests in a different thread.
164 * Gets the existing optimizer row.
166 * @param uuid the uuid
167 * @return the existing optmizer row
169 public Optimizer getExistingOptmizer(UUID uuid) {
170 Optional<Optimizer> oppt = optimizerDao.findById(uuid);
171 if (oppt.isPresent()) {
178 public List<OptimizerScheduleInfo> getScheduleInfo(Response responseRow) {
179 // TODO Auto-generated method stub