From 0365f4e08a7e717e7183aa523db1ecb66e55f3a7 Mon Sep 17 00:00:00 2001 From: Jerry Flood Date: Wed, 13 Mar 2019 16:23:16 -0400 Subject: Commit 1: Define Create OPtimized API Mulitple commits due to commit size constraint. Remove some SNIRO references Issue-ID: OPTFRA-457 Change-Id: Ia9a897d47a0f5e18deb309502d4a3ae629bea59f Signed-off-by: Jerry Flood --- cmso-service/pom.xml | 24 +- .../org/onap/optf/cmso/JerseyConfiguration.java | 4 +- .../optf/cmso/dispatcher/rs/DispacherService.java | 5 +- .../cmso/dispatcher/rs/DispatcherServiceImpl.java | 4 +- .../optf/cmso/optimizer/CMSOptimizerClient.java | 76 +++--- .../cmso/optimizer/bean/CMOptimizerResponse.java | 4 +- .../org/onap/optf/cmso/service/rs/AdminTool.java | 13 +- .../onap/optf/cmso/service/rs/AdminToolImpl.java | 16 +- .../onap/optf/cmso/service/rs/CMSCallbackImpl.java | 260 -------------------- .../cmso/service/rs/CMSOOptimizerCallbackImpl.java | 269 +++++++++++++++++++++ .../org/onap/optf/cmso/service/rs/CMSOService.java | 6 +- .../onap/optf/cmso/service/rs/CMSOServiceImpl.java | 8 +- .../optf/cmso/service/rs/CMSOptimizerCallback.java | 14 +- .../org/onap/optf/cmso/service/rs/HealthCheck.java | 15 +- .../onap/optf/cmso/service/rs/HealthCheckImpl.java | 13 +- .../loopback/SchedulerTestLoopbackServiceImpl.java | 10 +- 16 files changed, 383 insertions(+), 358 deletions(-) delete mode 100644 cmso-service/src/main/java/org/onap/optf/cmso/service/rs/CMSCallbackImpl.java create mode 100644 cmso-service/src/main/java/org/onap/optf/cmso/service/rs/CMSOOptimizerCallbackImpl.java (limited to 'cmso-service') diff --git a/cmso-service/pom.xml b/cmso-service/pom.xml index a68744b..d64709e 100644 --- a/cmso-service/pom.xml +++ b/cmso-service/pom.xml @@ -56,7 +56,7 @@ 3.3.9 5.0.10.RELEASE 2.1.3.RELEASE - 2.9.2 + 2.0.0 1.8 1.8 @@ -65,7 +65,7 @@ UTF-8 yyyyMMdd'T'HHmmss'Z' 2.2.1 - ${basedir}/src/main/resources/swagger-ui/dist + ${basedir}/src/main/resources/META-INF/resources/swagger/ 2.1.4 @@ -230,15 +230,23 @@ - io.springfox - springfox-swagger2 - ${springfox.swagger2.version} + io.swagger.core.v3 + swagger-jaxrs2 + ${swagger.core.version} - io.springfox - springfox-swagger-ui - ${springfox.swagger2.version} + io.swagger.core.v3 + swagger-jaxrs2-servlet-initializer + ${swagger.core.version} + + + io.swagger + swagger-jersey2-jaxrs + 1.5.0 + + + org.quartz-scheduler quartz diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/JerseyConfiguration.java b/cmso-service/src/main/java/org/onap/optf/cmso/JerseyConfiguration.java index 9b10d51..9189326 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/JerseyConfiguration.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/JerseyConfiguration.java @@ -42,7 +42,7 @@ import org.glassfish.jersey.servlet.ServletProperties; import org.onap.optf.cmso.dispatcher.rs.DispatcherServiceImpl; import org.onap.optf.cmso.filters.CMSOContainerFilters; import org.onap.optf.cmso.service.rs.AdminToolImpl; -import org.onap.optf.cmso.service.rs.CMSCallbackImpl; +import org.onap.optf.cmso.service.rs.CMSOOptimizerCallbackImpl; import org.onap.optf.cmso.service.rs.CMSOServiceImpl; import org.onap.optf.cmso.service.rs.HealthCheckImpl; import org.onap.optf.cmso.test.loopback.SchedulerTestLoopbackServiceImpl; @@ -76,7 +76,7 @@ public class JerseyConfiguration extends ResourceConfig { @Autowired public JerseyConfiguration( /* LogRequestFilter lrf */ ) { register(CMSOServiceImpl.class); - register(CMSCallbackImpl.class); + register(CMSOOptimizerCallbackImpl.class); register(SchedulerTestLoopbackServiceImpl.class); register(TicketMgtLoopbackServiceImpl.class); register(HealthCheckImpl.class); diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/dispatcher/rs/DispacherService.java b/cmso-service/src/main/java/org/onap/optf/cmso/dispatcher/rs/DispacherService.java index d0ff299..adc3260 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/dispatcher/rs/DispacherService.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/dispatcher/rs/DispacherService.java @@ -1,6 +1,6 @@ /* - * Copyright © 2017-2018 AT&T Intellectual Property. - * Modifications Copyright © 2018 IBM. + * Copyright © 2017-2018 AT&T Intellectual Property. + * Modifications Copyright © 2018 IBM. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -40,6 +40,7 @@ import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriInfo; + import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/dispatcher/rs/DispatcherServiceImpl.java b/cmso-service/src/main/java/org/onap/optf/cmso/dispatcher/rs/DispatcherServiceImpl.java index 3aab301..67a69cb 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/dispatcher/rs/DispatcherServiceImpl.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/dispatcher/rs/DispatcherServiceImpl.java @@ -58,7 +58,7 @@ public class DispatcherServiceImpl implements DispacherService { DispatchJob dispatchJob; @Autowired - CMSOptimizerClient sniroClient; + CMSOptimizerClient optimizerClient; @Autowired TmStatusClient tmStatusClient; @@ -85,7 +85,7 @@ public class DispatcherServiceImpl implements DispacherService { public Response dispatchOptimizer(Integer id, UriInfo uri, HttpServletRequest request) { debug.debug("dispatchOptimizer entered {}", id); try { - sniroClient.scheduleSniroOptimization(id); + optimizerClient.scheduleOptimization(id); } catch (Exception e) { errors.error(LogMessages.UNEXPECTED_EXCEPTION, e.getMessage()); debug.error(e.getMessage(), e); diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/optimizer/CMSOptimizerClient.java b/cmso-service/src/main/java/org/onap/optf/cmso/optimizer/CMSOptimizerClient.java index 5d500d2..9feea2d 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/optimizer/CMSOptimizerClient.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/optimizer/CMSOptimizerClient.java @@ -85,15 +85,15 @@ public class CMSOptimizerClient { @Autowired PropertiesManagement pm; - public boolean scheduleSniroOptimization(Integer id) { + public boolean scheduleOptimization(Integer id) { Map mdcSave = Mdc.save(); try { - String snirourl = env.getProperty("cmso.optimizer.url"); - String snirocallbackurl = env.getProperty("cmso.optimizer.callbackurl"); + String optimizerurl = env.getProperty("cmso.optimizer.url"); + String optimizercallbackurl = env.getProperty("cmso.optimizer.callbackurl"); String username = env.getProperty("mechid.user"); - Integer maxAttempts = env.getProperty("cmso.sniro.maxAttempts", Integer.class, 20); + Integer maxAttempts = env.getProperty("cmso.optimizer.maxAttempts", Integer.class, 20); - // Ensure that only one cmso is requsting this call to SNIRO + // Ensure that only one cmso is requsting this call to optimizer Schedule schedule = scheduleDAO.lockOne(id); if (!schedule.getStatus().equals(CMSStatusEnum.PendingSchedule.toString())) return false; @@ -116,7 +116,7 @@ public class CMSOptimizerClient { if (info == null) { return true; } - buildRequest(cmReq, info, schedule, snirocallbackurl); + buildRequest(cmReq, info, schedule, optimizercallbackurl); } catch (Exception e) { Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage()); schedule.setStatus(CMSStatusEnum.OptimizationFailed.toString()); @@ -126,34 +126,34 @@ public class CMSOptimizerClient { } // This service will call SNIO for each PendingOptimiztion - // If the request is successfully scheduled in SNIRO, status will be + // If the request is successfully scheduled in optimizer, status will be // updated to OptimizationInProgress. Client client = ClientBuilder.newClient(); client.register(new BasicAuthenticatorFilter(username, password)); client.register(new CMSOClientFilters()); - WebTarget sniroTarget = client.target(snirourl); - Invocation.Builder invocationBuilder = sniroTarget.request(MediaType.APPLICATION_JSON); + WebTarget optimizerTarget = client.target(optimizerurl); + Invocation.Builder invocationBuilder = optimizerTarget.request(MediaType.APPLICATION_JSON); try { // // First, push OptimizationInProgress to the DB (flush()) assuming a 202 status, - // in case the SNIRO callback is received prior to the + // in case the optimizer callback is received prior to the // commit of this transaction. - // SNIRO Callback will throw an error if it receives a response in the incorrect + // optimizer Callback will throw an error if it receives a response in the incorrect // state. // schedule.setOptimizerTransactionId(cmReq.getRequestInfo().getTransactionId()); schedule.setOptimizerDateTimeMillis(System.currentTimeMillis()); schedule.setStatus(CMSStatusEnum.OptimizationInProgress.toString()); updateScheduleStatus(schedule); - debug.debug("SNIRO url / user: " + snirourl + " / " + username); - debug.debug("SNIRO Request: " + new ObjectMapper().writeValueAsString(cmReq)); - Observation.report(LogMessages.OPTIMIZER_REQUEST, "Begin", schedule.getScheduleId(), snirourl); + debug.debug("optimizer url / user: " + optimizerurl + " / " + username); + debug.debug("optimizer Request: " + new ObjectMapper().writeValueAsString(cmReq)); + Observation.report(LogMessages.OPTIMIZER_REQUEST, "Begin", schedule.getScheduleId(), optimizerurl); Response response = invocationBuilder.post(Entity.json(cmReq)); - Observation.report(LogMessages.OPTIMIZER_REQUEST, "End", schedule.getScheduleId(), snirourl); + Observation.report(LogMessages.OPTIMIZER_REQUEST, "End", schedule.getScheduleId(), optimizerurl); switch (response.getStatus()) { case 202: debug.debug("Successfully scheduled optimization: " + schedule.getScheduleId()); - // Scheduled with SNIRO + // Scheduled with optimizer break; case 400: // Bad request { @@ -162,7 +162,7 @@ public class CMSOptimizerClient { String message = response.readEntity(String.class); schedule.setOptimizerMessage(message); schedule.setStatus(CMSStatusEnum.ScheduleFailed.toString()); - // Need to understand the cause of this error. May be teh same as SNIRO + // Need to understand the cause of this error. May be teh same as optimizer // down. int tries = schedule.getOptimizerAttemptsToSchedule(); tries++; @@ -195,24 +195,24 @@ public class CMSOptimizerClient { return true; } catch (ResponseProcessingException e) { schedule.setOptimizerDateTimeMillis(System.currentTimeMillis()); - schedule.setOptimizerStatus("Failed to parse SNIRO response"); + schedule.setOptimizerStatus("Failed to parse optimizer response"); schedule.setStatus(CMSStatusEnum.ScheduleFailed.toString()); - // Need to understand the cause of this error. May be teh same as SNIRO down. + // Need to understand the cause of this error. May be teh same as optimizer down. int tries = schedule.getOptimizerAttemptsToSchedule(); tries++; schedule.setOptimizerAttemptsToSchedule(tries); updateScheduleStatus(schedule); - // Getting invalid response from SNIRO. + // Getting invalid response from optimizer. // May be data related. Observation.report(LogMessages.OPTIMIZER_EXCEPTION, e, e.getMessage()); return false; } catch (ProcessingException e) { - // Don't track number of retries on IO error (SNIRO is down) + // Don't track number of retries on IO error (optimizer is down) schedule.setOptimizerDateTimeMillis(System.currentTimeMillis()); schedule.setStatus(CMSStatusEnum.PendingSchedule.toString()); updateScheduleStatus(schedule); - /// Cannot connect to SNIRO + /// Cannot connect to optimizer Observation.report(LogMessages.OPTIMIZER_EXCEPTION, e, e.getMessage()); // Wait until next cycle return false; @@ -226,15 +226,15 @@ public class CMSOptimizerClient { return false; } - private void buildRequest(CMOptimizerRequest cmReq, CMSInfo info, Schedule schedule, String snirocallbackurl) { + private void buildRequest(CMOptimizerRequest cmReq, CMSInfo info, Schedule schedule, String optimizercallbackurl) { - // TODO: Need to get SNIRO to accept ChangeManagementSchedulingInfo - // This is to support 1707 SNIRO interface + // TODO: Need to get optimizer to accept ChangeManagementSchedulingInfo + // This is to support 1707 optimizer interface CMRequestInfo reqInfo = cmReq.getRequestInfo(); CMSchedulingInfo schInfo = cmReq.getSchedulingInfo(); UUID uuid = UUID.randomUUID(); - reqInfo.setCallbackUrl(snirocallbackurl); + reqInfo.setCallbackUrl(optimizercallbackurl); reqInfo.setOptimizer(new String[] {"scheduling"}); reqInfo.setTransactionId(schedule.getOptimizerTransactionId()); reqInfo.setRequestId("CM-" + uuid.toString()); @@ -283,7 +283,7 @@ public class CMSOptimizerClient { // Perhaps We create ChangeManagementSchedulingInfoV1, ...V2, etc. // ANd try them one after another.... Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, "Unable to parse message. Format changed?"); - schedule.setOptimizerStatus("Failed to parse SNIRO request"); + schedule.setOptimizerStatus("Failed to parse optimizer request"); schedule.setOptimizerDateTimeMillis(System.currentTimeMillis()); schedule.setStatus(CMSStatusEnum.OptimizationFailed.toString()); scheduleDAO.save(schedule); @@ -300,12 +300,12 @@ public class CMSOptimizerClient { public HealthCheckComponent healthCheck() { Map mdcSave = Mdc.save(); HealthCheckComponent hcc = new HealthCheckComponent(); - hcc.setName("SNIRO Interface"); - String snirourl = env.getProperty("cmso.optimizer.url"); - String snirocallbackurl = env.getProperty("cmso.optimizer.callbackurl"); + hcc.setName("OPtimizer Interface"); + String optimizerurl = env.getProperty("cmso.optimizer.url"); + String optimizercallbackurl = env.getProperty("cmso.optimizer.callbackurl"); String username = env.getProperty("mechid.user"); String password = pm.getProperty("mechid.pass", ""); - hcc.setUrl(snirourl); + hcc.setUrl(optimizerurl); try { UUID uuid = UUID.randomUUID(); // Build a bogus request should fail policy validation @@ -335,22 +335,22 @@ public class CMSOptimizerClient { client.register(new BasicAuthenticatorFilter(username, password)); client.register(new CMSOClientFilters()); - WebTarget sniroTarget = client.target(snirourl); - Invocation.Builder invocationBuilder = sniroTarget.request(MediaType.APPLICATION_JSON); - debug.debug("SNIRO url / user: " + snirourl + " / " + username); - Observation.report(LogMessages.OPTIMIZER_REQUEST, "Begin", "healthcheck", snirourl); + WebTarget optimizerTarget = client.target(optimizerurl); + Invocation.Builder invocationBuilder = optimizerTarget.request(MediaType.APPLICATION_JSON); + debug.debug("Optimizer url / user: " + optimizerurl + " / " + username); + Observation.report(LogMessages.OPTIMIZER_REQUEST, "Begin", "healthcheck", optimizerurl); Response response = invocationBuilder.post(Entity.json(cmReq)); - Observation.report(LogMessages.OPTIMIZER_REQUEST, "End", "healthcheck", snirourl); + Observation.report(LogMessages.OPTIMIZER_REQUEST, "End", "healthcheck", optimizerurl); String message = response.getStatus() + ":" + response.readEntity(String.class); switch (response.getStatus()) { case 202: - debug.debug("Successful SNIRO healthcheck"); + debug.debug("Successful optimizer healthcheck"); hcc.setHealthy(true); break; case 400: // Expecting policy not found. if (message.contains("Cannot fetch policy")) { - debug.debug("Successful SNIRO healthcheck"); + debug.debug("Successful optimizer healthcheck"); hcc.setHealthy(true); hcc.setStatus("OK"); } else { diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/optimizer/bean/CMOptimizerResponse.java b/cmso-service/src/main/java/org/onap/optf/cmso/optimizer/bean/CMOptimizerResponse.java index a50025b..6dd7bdf 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/optimizer/bean/CMOptimizerResponse.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/optimizer/bean/CMOptimizerResponse.java @@ -1,6 +1,6 @@ /* - * Copyright © 2017-2018 AT&T Intellectual Property. - * Modifications Copyright © 2018 IBM. + * Copyright © 2017-2018 AT&T Intellectual Property. + * Modifications Copyright © 2018 IBM. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/AdminTool.java b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/AdminTool.java index 801986c..10eedf8 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/AdminTool.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/AdminTool.java @@ -1,6 +1,6 @@ /* - * Copyright © 2017-2018 AT&T Intellectual Property. - * Modifications Copyright © 2018 IBM. + * Copyright © 2017-2018 AT&T Intellectual Property. + * Modifications Copyright © 2018 IBM. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -31,23 +31,21 @@ package org.onap.optf.cmso.service.rs; -import javax.servlet.http.HttpServletRequest; import javax.ws.rs.DefaultValue; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; -import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; -import javax.ws.rs.core.UriInfo; + import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponses; -@Api +@Api("CMSO Administration") @Path("/{apiVersion}") @Produces({MediaType.APPLICATION_JSON}) public interface AdminTool { @@ -60,7 +58,6 @@ public interface AdminTool { @ApiResponses( value = {@ApiResponse(code = 200, message = "OK"), @ApiResponse(code = 400, message = "Request failed")}) public Response exec(@ApiParam(value = "v1|v2") @PathParam("apiVersion") @DefaultValue("v1") String apiVersion, - @ApiParam(value = "Identifier", allowMultiple = true) @PathParam("id") String id, @Context UriInfo uri, - @Context HttpServletRequest request); + @ApiParam(value = "Identifier", allowMultiple = true) @PathParam("id") String id); } diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/AdminToolImpl.java b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/AdminToolImpl.java index b878d31..8ec4f4f 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/AdminToolImpl.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/AdminToolImpl.java @@ -31,32 +31,38 @@ package org.onap.optf.cmso.service.rs; -import java.util.UUID; import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.core.Context; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriInfo; -import org.onap.observations.Mdc; import org.onap.optf.cmso.common.PropertiesManagement; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; + import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; @Controller public class AdminToolImpl implements AdminTool { private static EELFLogger log = EELFManager.getInstance().getLogger(AdminToolImpl.class); - private static EELFLogger audit = EELFManager.getInstance().getAuditLogger(); + + @Context + UriInfo uri; + + @Context + HttpServletRequest request; + @Autowired PropertiesManagement pm; @Override - public Response exec(String apiVersion, String id, UriInfo uri, HttpServletRequest request) { + public Response exec(String apiVersion, String id) { log.info("AdminTool.exec entered"); if (id.length() < 4) return Response.ok("").build(); - String encrypted = pm.getEncryptedValue(id); + String encrypted = PropertiesManagement.getEncryptedValue(id); Response response = Response.ok(encrypted).build(); return response; } diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/CMSCallbackImpl.java b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/CMSCallbackImpl.java deleted file mode 100644 index 5d11225..0000000 --- a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/CMSCallbackImpl.java +++ /dev/null @@ -1,260 +0,0 @@ -/* - * Copyright © 2017-2019 AT&T Intellectual Property. - * Modifications Copyright © 2018 IBM. - * - * 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. - * - * - * Unless otherwise specified, all documentation contained herein is licensed - * under the Creative Commons License, Attribution 4.0 Intl. (the "License"); - * you may not use this documentation except in compliance with the License. - * You may obtain a copy of the License at - * - * https://creativecommons.org/licenses/by/4.0/ - * - * Unless required by applicable law or agreed to in writing, documentation - * 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.onap.optf.cmso.service.rs; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import javax.servlet.http.HttpServletRequest; -import javax.transaction.Transactional; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.Response.Status; -import javax.ws.rs.core.UriInfo; -import org.joda.time.DateTime; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.ISODateTimeFormat; -import org.onap.observations.Mdc; -import org.onap.optf.cmso.common.CMSStatusEnum; -import org.onap.optf.cmso.common.DomainsEnum; -import org.onap.optf.cmso.common.LogMessages; -import org.onap.optf.cmso.common.exceptions.CMSException; -import org.onap.optf.cmso.common.exceptions.CMSNotFoundException; -import org.onap.optf.cmso.model.ChangeManagementGroup; -import org.onap.optf.cmso.model.ChangeManagementSchedule; -import org.onap.optf.cmso.model.Schedule; -import org.onap.optf.cmso.model.dao.ChangeManagementChangeWindowDAO; -import org.onap.optf.cmso.model.dao.ChangeManagementDetailDAO; -import org.onap.optf.cmso.model.dao.ChangeManagementGroupDAO; -import org.onap.optf.cmso.model.dao.ChangeManagementScheduleDAO; -import org.onap.optf.cmso.optimizer.bean.CMOptimizerResponse; -import org.onap.optf.cmso.optimizer.bean.CMSchedule; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Controller; -import com.att.eelf.configuration.EELFLogger; -import com.att.eelf.configuration.EELFManager; -import com.fasterxml.jackson.databind.ObjectMapper; - -@Controller -public class CMSCallbackImpl extends BaseSchedulerServiceImpl implements CMSOptimizerCallback { - private static EELFLogger log = EELFManager.getInstance().getLogger(CMSCallbackImpl.class); - private static EELFLogger metrics = EELFManager.getInstance().getMetricsLogger(); - private static EELFLogger audit = EELFManager.getInstance().getAuditLogger(); - private static EELFLogger debug = EELFManager.getInstance().getDebugLogger(); - private static EELFLogger errors = EELFManager.getInstance().getErrorLogger(); - - @Autowired - ChangeManagementScheduleDAO cmScheduleDAO; - - @Autowired - ChangeManagementGroupDAO cmGroupDAO; - - @Autowired - ChangeManagementChangeWindowDAO cmChangeWindowDAO; - - @Autowired - ChangeManagementDetailDAO cmDetailsDAO; - - @Override - @Transactional - public Response sniroCallback(String apiVersion, CMOptimizerResponse sniroResponse, UriInfo uri, - HttpServletRequest request) { - Response response = null; - log.info(LogMessages.PROCESS_OPTIMIZER_CALLBACK, "Received", request.getRemoteAddr(), ""); - log.info(LogMessages.OPTIMIZER_REQUEST, "Callback received", sniroResponse.getTransactionId(), - uri.getAbsolutePath().toString()); - try { - // Note that transaction ID and schedule ID are currently the same value. - - String transactionId = sniroResponse.getTransactionId(); - - // Synchronize this with transaction that scheduled the SNIRO optimization - // to ensure status updates are properly ordered. - // This is necessary only in the race condition where SNIRO callback comes - // before the SNIRO response is processed and the scheduling transaction is - // still in flight. - // Note that this may happen in loopback mode, but is not likely to happen with - // real SNIRO unless SNIRO changes to be synchronous and the callback comes before - // the response. - // If this lock times out, the schedule will remain in 'Optimization In - // Progress' and never complete. - Schedule schedule = scheduleDAO.lockOneByTransactionId(transactionId); - - if (schedule == null) { - throw new CMSNotFoundException(DomainsEnum.ChangeManagement.toString(), - "(OptimizerTransactionID=" + transactionId + ")"); - - } - CMSStatusEnum status = CMSStatusEnum.PendingApproval.fromString(schedule.getStatus()); - debug.debug("Status at time of SNIRO callback is " + status.toString()); - switch (status) { - // PendingSchedule may be a valid status in the cases where SNIRO async call - // returns before - // We have committed the OptimizationInProgress status - // The dispatch logic ensures that we only every dispatch once. - case OptimizationInProgress: - processSniroResponse(sniroResponse, schedule); - scheduleDAO.save(schedule); - response = Response.ok().build(); - break; - default: - throw new CMSException(Status.PRECONDITION_FAILED, LogMessages.OPTIMIZER_CALLBACK_STATE_ERROR, - CMSStatusEnum.OptimizationInProgress.toString(), schedule.getStatus().toString()); - } - } catch (CMSException e) { - errors.error(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage()); - response = Response.status(e.getStatus()).entity(e.getRequestError()).build(); - } catch (Exception e) { - errors.error(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage()); - response = Response.serverError().entity(e.getMessage()).build(); - } finally { - } - return response; - } - - private void processSniroResponse(CMOptimizerResponse sniroResponse, Schedule schedule) { - try { - schedule.setOptimizerReturnDateTimeMillis(System.currentTimeMillis()); - schedule.setOptimizerStatus(sniroResponse.getRequestState()); - schedule.setOptimizerMessage(sniroResponse.getDescription()); - String scheduleId = sniroResponse.getScheduleId(); - ObjectMapper om = new ObjectMapper(); - CMSchedule[] scheduleArray = sniroResponse.getSchedule(); - if (scheduleArray != null && scheduleArray.length > 0) { - String scheduleString = om.writeValueAsString(scheduleArray); - schedule.setSchedule(scheduleString); - log.debug("scheduleId={0} schedule={1}", scheduleId, scheduleString); - for (CMSchedule sniroSchedule : sniroResponse.getSchedule()) { - String groupId = sniroSchedule.getGroupId(); - DateTime finishTime = convertDate(sniroSchedule.getFinishTime(), "finishTime"); - DateTime latestInstanceStartTime = - convertDate(sniroSchedule.getLatestInstanceStartTime(), "latestInstanceStartTime"); - DateTime startTime = convertDate(sniroSchedule.getStartTime(), "startTime"); - ChangeManagementGroup group = cmGroupDAO.findOneBySchedulesIDGroupID(schedule.getId(), groupId); - if (group == null) { - throw new CMSException(Status.PRECONDITION_FAILED, - LogMessages.CHANGE_MANAGEMENT_GROUP_NOT_FOUND, schedule.getScheduleId(), groupId); - } - group.setStartTimeMillis(startTime.getMillis()); - group.setFinishTimeMillis(finishTime.getMillis()); - group.setLastInstanceStartTimeMillis(latestInstanceStartTime.getMillis()); - cmGroupDAO.save(group); - long totalDuration = - (group.getAdditionalDurationInSecs() + group.getNormalDurationInSecs()) * 1000l; - Map> startAndFinishTimeMap = new HashMap>(); - makeMap(startTime.getMillis(), latestInstanceStartTime.getMillis(), group.getConcurrencyLimit(), - totalDuration, sniroSchedule.getNode(), startAndFinishTimeMap); - for (String node : sniroSchedule.getNode()) { - processNode(schedule, group, node, startAndFinishTimeMap); - } - } - schedule.setStatus(CMSStatusEnum.PendingApproval.toString()); - } else { - debug.debug("scheduleId={0} schedule=null status={1} ", scheduleId, schedule.getOptimizerStatus()); - schedule.setStatus(CMSStatusEnum.OptimizationFailed.toString()); - } - } catch (CMSException e) { - errors.error(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage()); - schedule.setStatus(CMSStatusEnum.OptimizationFailed.toString()); - schedule.setOptimizerStatus(e.getStatus().toString()); - schedule.setOptimizerMessage(e.getLocalizedMessage()); - } catch (Exception e) { - errors.error(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage()); - schedule.setStatus(CMSStatusEnum.OptimizationFailed.toString()); - schedule.setOptimizerStatus("Exception"); - schedule.setOptimizerMessage(e.getLocalizedMessage()); - } - } - - public static void makeMap(Long startTime, Long latestInstanceStartTime, int concurrencyLimit, long totalDuration, - List nodes, Map> startAndFinishTimeMap) throws CMSException { - Long nextStartTime = null; - Long nextFinishTime = null; - for (int nodeNumber = 0; nodeNumber < nodes.size(); nodeNumber++) { - String node = nodes.get(nodeNumber); - if (nodeNumber % concurrencyLimit == 0) { - if (nodeNumber == 0) - nextStartTime = startTime; - else - nextStartTime = nextStartTime + totalDuration; - if (nextStartTime > latestInstanceStartTime) { - throw new CMSException(Status.BAD_REQUEST, LogMessages.UNABLE_TO_ALLOCATE_VNF_TIMESLOTS, - startTime.toString(), latestInstanceStartTime.toString(), String.valueOf(totalDuration), - String.valueOf(concurrencyLimit), String.valueOf(nodes.size())); - } - nextFinishTime = nextStartTime + totalDuration; - } - Map map = new HashMap(); - map.put("startTime", nextStartTime); - map.put("finishTime", nextFinishTime); - startAndFinishTimeMap.put(node, map); - } - - } - - private void processNode(Schedule schedule, ChangeManagementGroup group, String node, - Map> startAndFinishTimeMap) throws CMSException { - Map map = startAndFinishTimeMap.get(node); - ChangeManagementSchedule detail = cmScheduleDAO.findOneByGroupIDAndVnfName(group.getId(), node); - if (detail == null) { - throw new CMSException(Status.NOT_FOUND, LogMessages.UNABLE_TO_LOCATE_SCHEDULE_DETAIL, - schedule.getScheduleId(), group.getGroupId(), node); - } - detail.setStartTimeMillis(map.get("startTime")); - detail.setFinishTimeMillis(map.get("finishTime")); - detail.setVnfId(""); - detail.setStatus(CMSStatusEnum.PendingApproval.toString()); - cmScheduleDAO.save(detail); - } - - public static DateTime convertDate(String utcDate, String attrName) throws CMSException { - try { - DateTime dateTime = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss").withZoneUTC().parseDateTime(utcDate); - if (dateTime != null) - return dateTime; - } catch (Exception e) { - debug.debug(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage()); - } - throw new CMSException(Status.BAD_REQUEST, LogMessages.INVALID_ATTRIBUTE, attrName, utcDate); - } - - public static DateTime convertISODate(String utcDate, String attrName) throws CMSException { - try { - DateTime dateTime = ISODateTimeFormat.dateTimeParser().parseDateTime(utcDate); - if (dateTime != null) - return dateTime; - } catch (Exception e) { - debug.debug(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage()); - } - throw new CMSException(Status.BAD_REQUEST, LogMessages.INVALID_ATTRIBUTE, attrName, utcDate); - } - -} diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/CMSOOptimizerCallbackImpl.java b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/CMSOOptimizerCallbackImpl.java new file mode 100644 index 0000000..679dd02 --- /dev/null +++ b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/CMSOOptimizerCallbackImpl.java @@ -0,0 +1,269 @@ +/* + * Copyright © 2017-2019 AT&T Intellectual Property. + * Modifications Copyright © 2018 IBM. + * + * 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. + * + * + * Unless otherwise specified, all documentation contained herein is licensed + * under the Creative Commons License, Attribution 4.0 Intl. (the "License"); + * you may not use this documentation except in compliance with the License. + * You may obtain a copy of the License at + * + * https://creativecommons.org/licenses/by/4.0/ + * + * Unless required by applicable law or agreed to in writing, documentation + * 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.onap.optf.cmso.service.rs; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; +import javax.transaction.Transactional; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.Response.Status; +import javax.ws.rs.core.UriInfo; + +import org.joda.time.DateTime; +import org.joda.time.format.DateTimeFormat; +import org.joda.time.format.ISODateTimeFormat; +import org.onap.optf.cmso.common.CMSStatusEnum; +import org.onap.optf.cmso.common.DomainsEnum; +import org.onap.optf.cmso.common.LogMessages; +import org.onap.optf.cmso.common.exceptions.CMSException; +import org.onap.optf.cmso.common.exceptions.CMSNotFoundException; +import org.onap.optf.cmso.model.ChangeManagementGroup; +import org.onap.optf.cmso.model.ChangeManagementSchedule; +import org.onap.optf.cmso.model.Schedule; +import org.onap.optf.cmso.model.dao.ChangeManagementChangeWindowDAO; +import org.onap.optf.cmso.model.dao.ChangeManagementDetailDAO; +import org.onap.optf.cmso.model.dao.ChangeManagementGroupDAO; +import org.onap.optf.cmso.model.dao.ChangeManagementScheduleDAO; +import org.onap.optf.cmso.optimizer.bean.CMOptimizerResponse; +import org.onap.optf.cmso.optimizer.bean.CMSchedule; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; + +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; +import com.fasterxml.jackson.databind.ObjectMapper; + +@Controller +public class CMSOOptimizerCallbackImpl extends BaseSchedulerServiceImpl implements CMSOptimizerCallback { + private static EELFLogger log = EELFManager.getInstance().getLogger(CMSOOptimizerCallbackImpl.class); + private static EELFLogger metrics = EELFManager.getInstance().getMetricsLogger(); + private static EELFLogger audit = EELFManager.getInstance().getAuditLogger(); + private static EELFLogger debug = EELFManager.getInstance().getDebugLogger(); + private static EELFLogger errors = EELFManager.getInstance().getErrorLogger(); + + @Context + UriInfo uri; + + @Context + HttpServletRequest request; + + + @Autowired + ChangeManagementScheduleDAO cmScheduleDAO; + + @Autowired + ChangeManagementGroupDAO cmGroupDAO; + + @Autowired + ChangeManagementChangeWindowDAO cmChangeWindowDAO; + + @Autowired + ChangeManagementDetailDAO cmDetailsDAO; + + @Override + @Transactional + public Response sniroCallback(String apiVersion, CMOptimizerResponse sniroResponse) { + Response response = null; + log.info(LogMessages.PROCESS_OPTIMIZER_CALLBACK, "Received", request.getRemoteAddr(), ""); + log.info(LogMessages.OPTIMIZER_REQUEST, "Callback received", sniroResponse.getTransactionId(), + uri.getAbsolutePath().toString()); + try { + // Note that transaction ID and schedule ID are currently the same value. + + String transactionId = sniroResponse.getTransactionId(); + + // Synchronize this with transaction that scheduled the SNIRO optimization + // to ensure status updates are properly ordered. + // This is necessary only in the race condition where SNIRO callback comes + // before the SNIRO response is processed and the scheduling transaction is + // still in flight. + // Note that this may happen in loopback mode, but is not likely to happen with + // real SNIRO unless SNIRO changes to be synchronous and the callback comes before + // the response. + // If this lock times out, the schedule will remain in 'Optimization In + // Progress' and never complete. + Schedule schedule = scheduleDAO.lockOneByTransactionId(transactionId); + + if (schedule == null) { + throw new CMSNotFoundException(DomainsEnum.ChangeManagement.toString(), + "(OptimizerTransactionID=" + transactionId + ")"); + + } + CMSStatusEnum status = CMSStatusEnum.PendingApproval.fromString(schedule.getStatus()); + debug.debug("Status at time of SNIRO callback is " + status.toString()); + switch (status) { + // PendingSchedule may be a valid status in the cases where SNIRO async call + // returns before + // We have committed the OptimizationInProgress status + // The dispatch logic ensures that we only every dispatch once. + case OptimizationInProgress: + processSniroResponse(sniroResponse, schedule); + scheduleDAO.save(schedule); + response = Response.ok().build(); + break; + default: + throw new CMSException(Status.PRECONDITION_FAILED, LogMessages.OPTIMIZER_CALLBACK_STATE_ERROR, + CMSStatusEnum.OptimizationInProgress.toString(), schedule.getStatus().toString()); + } + } catch (CMSException e) { + errors.error(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage()); + response = Response.status(e.getStatus()).entity(e.getRequestError()).build(); + } catch (Exception e) { + errors.error(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage()); + response = Response.serverError().entity(e.getMessage()).build(); + } finally { + } + return response; + } + + private void processSniroResponse(CMOptimizerResponse sniroResponse, Schedule schedule) { + try { + schedule.setOptimizerReturnDateTimeMillis(System.currentTimeMillis()); + schedule.setOptimizerStatus(sniroResponse.getRequestState()); + schedule.setOptimizerMessage(sniroResponse.getDescription()); + String scheduleId = sniroResponse.getScheduleId(); + ObjectMapper om = new ObjectMapper(); + CMSchedule[] scheduleArray = sniroResponse.getSchedule(); + if (scheduleArray != null && scheduleArray.length > 0) { + String scheduleString = om.writeValueAsString(scheduleArray); + schedule.setSchedule(scheduleString); + log.debug("scheduleId={0} schedule={1}", scheduleId, scheduleString); + for (CMSchedule sniroSchedule : sniroResponse.getSchedule()) { + String groupId = sniroSchedule.getGroupId(); + DateTime finishTime = convertDate(sniroSchedule.getFinishTime(), "finishTime"); + DateTime latestInstanceStartTime = + convertDate(sniroSchedule.getLatestInstanceStartTime(), "latestInstanceStartTime"); + DateTime startTime = convertDate(sniroSchedule.getStartTime(), "startTime"); + ChangeManagementGroup group = cmGroupDAO.findOneBySchedulesIDGroupID(schedule.getId(), groupId); + if (group == null) { + throw new CMSException(Status.PRECONDITION_FAILED, + LogMessages.CHANGE_MANAGEMENT_GROUP_NOT_FOUND, schedule.getScheduleId(), groupId); + } + group.setStartTimeMillis(startTime.getMillis()); + group.setFinishTimeMillis(finishTime.getMillis()); + group.setLastInstanceStartTimeMillis(latestInstanceStartTime.getMillis()); + cmGroupDAO.save(group); + long totalDuration = + (group.getAdditionalDurationInSecs() + group.getNormalDurationInSecs()) * 1000l; + Map> startAndFinishTimeMap = new HashMap>(); + makeMap(startTime.getMillis(), latestInstanceStartTime.getMillis(), group.getConcurrencyLimit(), + totalDuration, sniroSchedule.getNode(), startAndFinishTimeMap); + for (String node : sniroSchedule.getNode()) { + processNode(schedule, group, node, startAndFinishTimeMap); + } + } + schedule.setStatus(CMSStatusEnum.PendingApproval.toString()); + } else { + debug.debug("scheduleId={0} schedule=null status={1} ", scheduleId, schedule.getOptimizerStatus()); + schedule.setStatus(CMSStatusEnum.OptimizationFailed.toString()); + } + } catch (CMSException e) { + errors.error(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage()); + schedule.setStatus(CMSStatusEnum.OptimizationFailed.toString()); + schedule.setOptimizerStatus(e.getStatus().toString()); + schedule.setOptimizerMessage(e.getLocalizedMessage()); + } catch (Exception e) { + errors.error(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage()); + schedule.setStatus(CMSStatusEnum.OptimizationFailed.toString()); + schedule.setOptimizerStatus("Exception"); + schedule.setOptimizerMessage(e.getLocalizedMessage()); + } + } + + public static void makeMap(Long startTime, Long latestInstanceStartTime, int concurrencyLimit, long totalDuration, + List nodes, Map> startAndFinishTimeMap) throws CMSException { + Long nextStartTime = null; + Long nextFinishTime = null; + for (int nodeNumber = 0; nodeNumber < nodes.size(); nodeNumber++) { + String node = nodes.get(nodeNumber); + if (nodeNumber % concurrencyLimit == 0) { + if (nodeNumber == 0) + nextStartTime = startTime; + else + nextStartTime = nextStartTime + totalDuration; + if (nextStartTime > latestInstanceStartTime) { + throw new CMSException(Status.BAD_REQUEST, LogMessages.UNABLE_TO_ALLOCATE_VNF_TIMESLOTS, + startTime.toString(), latestInstanceStartTime.toString(), String.valueOf(totalDuration), + String.valueOf(concurrencyLimit), String.valueOf(nodes.size())); + } + nextFinishTime = nextStartTime + totalDuration; + } + Map map = new HashMap(); + map.put("startTime", nextStartTime); + map.put("finishTime", nextFinishTime); + startAndFinishTimeMap.put(node, map); + } + + } + + private void processNode(Schedule schedule, ChangeManagementGroup group, String node, + Map> startAndFinishTimeMap) throws CMSException { + Map map = startAndFinishTimeMap.get(node); + ChangeManagementSchedule detail = cmScheduleDAO.findOneByGroupIDAndVnfName(group.getId(), node); + if (detail == null) { + throw new CMSException(Status.NOT_FOUND, LogMessages.UNABLE_TO_LOCATE_SCHEDULE_DETAIL, + schedule.getScheduleId(), group.getGroupId(), node); + } + detail.setStartTimeMillis(map.get("startTime")); + detail.setFinishTimeMillis(map.get("finishTime")); + detail.setVnfId(""); + detail.setStatus(CMSStatusEnum.PendingApproval.toString()); + cmScheduleDAO.save(detail); + } + + public static DateTime convertDate(String utcDate, String attrName) throws CMSException { + try { + DateTime dateTime = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss").withZoneUTC().parseDateTime(utcDate); + if (dateTime != null) + return dateTime; + } catch (Exception e) { + debug.debug(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage()); + } + throw new CMSException(Status.BAD_REQUEST, LogMessages.INVALID_ATTRIBUTE, attrName, utcDate); + } + + public static DateTime convertISODate(String utcDate, String attrName) throws CMSException { + try { + DateTime dateTime = ISODateTimeFormat.dateTimeParser().parseDateTime(utcDate); + if (dateTime != null) + return dateTime; + } catch (Exception e) { + debug.debug(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage()); + } + throw new CMSException(Status.BAD_REQUEST, LogMessages.INVALID_ATTRIBUTE, attrName, utcDate); + } + +} diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/CMSOService.java b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/CMSOService.java index 97bb78e..6e99b0d 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/CMSOService.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/CMSOService.java @@ -1,6 +1,6 @@ /* - * Copyright © 2017-2018 AT&T Intellectual Property. - * Modifications Copyright © 2018 IBM. + * Copyright © 2017-2018 AT&T Intellectual Property. + * Modifications Copyright © 2018 IBM. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -55,7 +55,7 @@ import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponses; -@Api +@Api("CMSO Schedule API") @Path("/{apiVersion}") @Produces({MediaType.APPLICATION_JSON}) public interface CMSOService { diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/CMSOServiceImpl.java b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/CMSOServiceImpl.java index c3d61da..d65dd25 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/CMSOServiceImpl.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/CMSOServiceImpl.java @@ -261,8 +261,8 @@ public class CMSOServiceImpl extends BaseSchedulerServiceImpl implements CMSOSer if (cw.getEndTime() == null || cw.getEndTime().equals("")) throw new CMSException(Status.BAD_REQUEST, LogMessages.MISSING_REQUIRED_ATTRIBUTE, "endTime"); - DateTime start = CMSCallbackImpl.convertISODate(cw.getStartTime(), "startTime"); - DateTime end = CMSCallbackImpl.convertISODate(cw.getEndTime(), "endTime"); + DateTime start = CMSOOptimizerCallbackImpl.convertISODate(cw.getStartTime(), "startTime"); + DateTime end = CMSOOptimizerCallbackImpl.convertISODate(cw.getEndTime(), "endTime"); if (!end.isAfter(start)) throw new CMSException(Status.BAD_REQUEST, LogMessages.INVALID_CHANGE_WINDOW, cw.getStartTime(), cw.getEndTime()); @@ -312,8 +312,8 @@ public class CMSOServiceImpl extends BaseSchedulerServiceImpl implements CMSOSer for (ChangeWindowMessage cw : vnfDetail.getChangeWindow()) { ChangeManagementChangeWindow cmcw = new ChangeManagementChangeWindow(); cmcw.setChangeManagementGroupsId(cmg.getId()); - DateTime start = CMSCallbackImpl.convertISODate(cw.getStartTime(), "startTime"); - DateTime end = CMSCallbackImpl.convertISODate(cw.getEndTime(), "startTime"); + DateTime start = CMSOOptimizerCallbackImpl.convertISODate(cw.getStartTime(), "startTime"); + DateTime end = CMSOOptimizerCallbackImpl.convertISODate(cw.getEndTime(), "startTime"); cmcw.setStartTimeMillis(start.getMillis()); cmcw.setFinishTimeMillis(end.getMillis()); cmChangeWindowDAO.save(cmcw); diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/CMSOptimizerCallback.java b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/CMSOptimizerCallback.java index 99b4970..cc2785e 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/CMSOptimizerCallback.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/CMSOptimizerCallback.java @@ -1,6 +1,6 @@ /* - * Copyright © 2017-2018 AT&T Intellectual Property. - * Modifications Copyright © 2018 IBM. + * Copyright © 2017-2018 AT&T Intellectual Property. + * Modifications Copyright © 2018 IBM. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -31,24 +31,23 @@ package org.onap.optf.cmso.service.rs; -import javax.servlet.http.HttpServletRequest; import javax.ws.rs.DefaultValue; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; -import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; -import javax.ws.rs.core.UriInfo; + import org.onap.optf.cmso.optimizer.bean.CMOptimizerResponse; + import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponses; -@Api +@Api("CMSO Optimized Schedule API") @Path("/{apiVersion}") @Produces({MediaType.APPLICATION_JSON}) public interface CMSOptimizerCallback { @@ -62,7 +61,6 @@ public interface CMSOptimizerCallback { @ApiResponse(code = 500, message = "Unexpected Runtime error", response = Exception.class)}) public Response sniroCallback( @ApiParam(value = "v1") @PathParam("apiVersion") @DefaultValue("v1") String apiVersion, - @ApiParam(value = "Return schedules > lastScheduleId") CMOptimizerResponse reponse, @Context UriInfo uri, - @Context HttpServletRequest request); + @ApiParam(value = "Return schedules > lastScheduleId") CMOptimizerResponse reponse); } diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/HealthCheck.java b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/HealthCheck.java index edc2c96..fb69e31 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/HealthCheck.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/HealthCheck.java @@ -1,6 +1,6 @@ /* - * Copyright © 2017-2018 AT&T Intellectual Property. - * Modifications Copyright © 2018 IBM. + * Copyright © 2017-2018 AT&T Intellectual Property. + * Modifications Copyright © 2018 IBM. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -31,25 +31,24 @@ package org.onap.optf.cmso.service.rs; -import javax.servlet.http.HttpServletRequest; import javax.ws.rs.DefaultValue; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; -import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; -import javax.ws.rs.core.UriInfo; + import org.onap.optf.cmso.service.rs.models.HealthCheckMessage; + import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponses; -@Api +@Api("CMSO Administration") @Path("/{apiVersion}") @Produces({MediaType.APPLICATION_JSON}) public interface HealthCheck { @@ -63,7 +62,7 @@ public interface HealthCheck { @ApiResponse(code = 400, message = "Not healthy", response = HealthCheckMessage.class)}) public Response healthCheck(@ApiParam(value = "v1") @PathParam("apiVersion") @DefaultValue("v1") String apiVersion, @DefaultValue(value = "true") @ApiParam(value = "Check Interfaces", - allowMultiple = true) @QueryParam("checkInterfaces") Boolean checkInterfaces, - @Context UriInfo uri, @Context HttpServletRequest request); + allowMultiple = true) @QueryParam("checkInterfaces") Boolean checkInterfaces + ); } diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/HealthCheckImpl.java b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/HealthCheckImpl.java index 0877a6b..8e6b09e 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/HealthCheckImpl.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/HealthCheckImpl.java @@ -34,6 +34,7 @@ package org.onap.optf.cmso.service.rs; import java.util.List; import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.core.Context; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriInfo; @@ -55,11 +56,17 @@ import com.att.eelf.configuration.EELFManager; public class HealthCheckImpl implements HealthCheck { private static EELFLogger debug = EELFManager.getInstance().getDebugLogger(); + @Context + UriInfo uri; + + @Context + HttpServletRequest request; + @Autowired TmClient tmClient; @Autowired - CMSOptimizerClient sniroClient; + CMSOptimizerClient optimizerClient; @Autowired ApprovalTypeDAO approvalTypeDAO; @@ -71,7 +78,7 @@ public class HealthCheckImpl implements HealthCheck { MsoStatusClient msoStatusClient; @Override - public Response healthCheck(String apiVersion, Boolean checkInterfaces, UriInfo uri, HttpServletRequest request) { + public Response healthCheck(String apiVersion, Boolean checkInterfaces) { debug.debug("Entered healthcheck"); Response response = null; HealthCheckMessage hc = new HealthCheckMessage(); @@ -80,7 +87,7 @@ public class HealthCheckImpl implements HealthCheck { if (checkInterfaces) { addToHealthCheckMessage(hc, tmClient.healthCheck()); addToHealthCheckMessage(hc, msoStatusClient.healthCheck()); - addToHealthCheckMessage(hc, sniroClient.healthCheck()); + addToHealthCheckMessage(hc, optimizerClient.healthCheck()); } addToHealthCheckMessage(hc, this.healthCheck()); diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/test/loopback/SchedulerTestLoopbackServiceImpl.java b/cmso-service/src/main/java/org/onap/optf/cmso/test/loopback/SchedulerTestLoopbackServiceImpl.java index b240b61..b2ff6d4 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/test/loopback/SchedulerTestLoopbackServiceImpl.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/test/loopback/SchedulerTestLoopbackServiceImpl.java @@ -1,6 +1,6 @@ /* - * Copyright © 2017-2018 AT&T Intellectual Property. - * Modifications Copyright © 2018 IBM. + * Copyright © 2017-2018 AT&T Intellectual Property. + * Modifications Copyright © 2018 IBM. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -59,7 +59,7 @@ import org.onap.optf.cmso.optimizer.bean.CMRequestInfo; import org.onap.optf.cmso.optimizer.bean.CMSchedule; import org.onap.optf.cmso.optimizer.bean.CMSchedulingInfo; import org.onap.optf.cmso.optimizer.bean.CMVnfDetails; -import org.onap.optf.cmso.service.rs.CMSCallbackImpl; +import org.onap.optf.cmso.service.rs.CMSOOptimizerCallbackImpl; import org.onap.optf.cmso.wf.bean.WfCmResponse200; import org.onap.optf.cmso.wf.bean.WfMsoRequestReferences; import org.onap.optf.cmso.wf.bean.WfMsoResponse; @@ -101,11 +101,11 @@ public class SchedulerTestLoopbackServiceImpl implements SchedulerTestLoopbackSe nodes.add(sr.getNode()); } - DateTime startTime = CMSCallbackImpl.convertISODate(si.getStartTime(), "startTime"); + DateTime startTime = CMSOOptimizerCallbackImpl.convertISODate(si.getStartTime(), "startTime"); // Ignore the finish time for now in the calc. Just accept what they // gave - DateTime finishTime = CMSCallbackImpl.convertISODate(si.getEndTime(), "endTime"); + DateTime finishTime = CMSOOptimizerCallbackImpl.convertISODate(si.getEndTime(), "endTime"); DateTimeFormatter sniroFmt = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss").withZoneUTC(); int add = si.getAdditionalDurationInSecs(); -- cgit 1.2.3-korg