summaryrefslogtreecommitdiffstats
path: root/appc-provider/appc-provider-bundle/src/main/java/org/onap/appc/provider/topology/TopologyService.java
diff options
context:
space:
mode:
Diffstat (limited to 'appc-provider/appc-provider-bundle/src/main/java/org/onap/appc/provider/topology/TopologyService.java')
-rw-r--r--appc-provider/appc-provider-bundle/src/main/java/org/onap/appc/provider/topology/TopologyService.java800
1 files changed, 800 insertions, 0 deletions
diff --git a/appc-provider/appc-provider-bundle/src/main/java/org/onap/appc/provider/topology/TopologyService.java b/appc-provider/appc-provider-bundle/src/main/java/org/onap/appc/provider/topology/TopologyService.java
new file mode 100644
index 000000000..ea1d3f1ee
--- /dev/null
+++ b/appc-provider/appc-provider-bundle/src/main/java/org/onap/appc/provider/topology/TopologyService.java
@@ -0,0 +1,800 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APPC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Copyright (C) 2017 Amdocs
+ * =============================================================================
+ * 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.
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.appc.provider.topology;
+
+import static com.att.eelf.configuration.Configuration.MDC_ALERT_SEVERITY;
+import static com.att.eelf.configuration.Configuration.MDC_INSTANCE_UUID;
+import static com.att.eelf.configuration.Configuration.MDC_KEY_REQUEST_ID;
+import static com.att.eelf.configuration.Configuration.MDC_REMOTE_HOST;
+import static com.att.eelf.configuration.Configuration.MDC_SERVER_FQDN;
+import static com.att.eelf.configuration.Configuration.MDC_SERVER_IP_ADDRESS;
+import static com.att.eelf.configuration.Configuration.MDC_SERVICE_INSTANCE_ID;
+import static com.att.eelf.configuration.Configuration.MDC_SERVICE_NAME;
+
+import java.net.InetAddress;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Properties;
+import java.util.TimeZone;
+
+import org.opendaylight.yang.gen.v1.org.onap.appc.rev160104.MigrateOutput;
+import org.opendaylight.yang.gen.v1.org.onap.appc.rev160104.ModifyConfigOutput;
+import org.opendaylight.yang.gen.v1.org.onap.appc.rev160104.ModifyConfigOutputBuilder;
+import org.opendaylight.yang.gen.v1.org.onap.appc.rev160104.MigrateOutputBuilder;
+import org.opendaylight.yang.gen.v1.org.onap.appc.rev160104.RebuildOutput;
+import org.opendaylight.yang.gen.v1.org.onap.appc.rev160104.RebuildOutputBuilder;
+import org.opendaylight.yang.gen.v1.org.onap.appc.rev160104.RestartOutput;
+import org.opendaylight.yang.gen.v1.org.onap.appc.rev160104.RestartOutputBuilder;
+import org.opendaylight.yang.gen.v1.org.onap.appc.rev160104.SnapshotOutput;
+import org.opendaylight.yang.gen.v1.org.onap.appc.rev160104.SnapshotOutputBuilder;
+import org.opendaylight.yang.gen.v1.org.onap.appc.rev160104.UUID;
+import org.opendaylight.yang.gen.v1.org.onap.appc.rev160104.common.request.header.CommonRequestHeader;
+import org.opendaylight.yang.gen.v1.org.onap.appc.rev160104.vnf.resource.VnfResource;
+import org.opendaylight.yang.gen.v1.org.onap.appc.rev160104.config.payload.ConfigPayload;
+import org.opendaylight.yang.gen.v1.org.onap.appc.rev160104.VmstatuscheckOutput;
+import org.opendaylight.yang.gen.v1.org.onap.appc.rev160104.VmstatuscheckOutputBuilder;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.onap.appc.Constants;
+import org.onap.appc.configuration.Configuration;
+import org.onap.appc.configuration.ConfigurationFactory;
+import org.onap.appc.i18n.Msg;
+import org.onap.appc.provider.AppcProvider;
+import org.onap.appc.provider.AppcProviderClient;
+import org.onap.appc.provider.ResponseHeaderBuilder;
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+import com.att.eelf.i18n.EELFResourceManager;
+import org.slf4j.MDC;
+
+/**
+ * This class is used to implement the topology services API and invoke the appropriate directed graphs based on the
+ * service being requested.
+ *
+ */
+public class TopologyService {
+
+ /**
+ * The loggers we are using
+ */
+ // private static EELFLogger logger = LoggerFactory.getLogger(TopologyService.class);
+ private static EELFLogger logger = EELFManager.getInstance().getApplicationLogger();
+ private static EELFLogger securityLogger = EELFManager.getInstance().getSecurityLogger();
+ private static EELFLogger auditLogger = EELFManager.getInstance().getAuditLogger();
+ private static EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger();
+ private static EELFLogger performanceLogger = EELFManager.getInstance().getPerformanceLogger();
+
+ /**
+ * The provider we are servicing
+ */
+ private AppcProvider provider;
+
+ /**
+ * The reason associated with the last DG call
+ */
+ private String reason;
+
+ /**
+ * The APPC configuration properties
+ */
+ private Configuration configuration = ConfigurationFactory.getConfiguration();
+
+ /**
+ * Create the topology services implementation for the specific appc provider (api) implementation
+ *
+ * @param provider
+ * The provider we are servicing
+ */
+ public TopologyService(AppcProvider provider) {
+ this.provider = provider;
+ }
+
+ // /**
+ // * Processes the topology request
+ // *
+ // * @param input
+ // * The request to be processed
+ // * @return The result of processing
+ // */
+ // public RpcResult<TopologyOperationOutput> process(TopologyOperationInput input) {
+ // RpcResult<TopologyOperationOutput> response;
+ //
+ // String appName = configuration.getProperty(Constants.PROPERTY_APPLICATION_NAME);
+ // logger.info(String.format("%s:topology operations called...", appName));
+ //
+ // /*
+ // * Properties used to pass information to the DG
+ // */
+ // Properties properties = new Properties();
+ //
+ // if (input == null || input.getTopologyRequest().getVmId() == null) {
+ // String msg =
+ // String.format("%s: topology operation failed, invalid input. Null or empty argument '%s'", appName,
+ // "vm_id");
+ // logger.debug(msg);
+ // response = generateTopologyOperationResponse(Boolean.FALSE, "UNKNOWN", msg, "UNDEFINED");
+ // } else {
+ // // CommonRequestHeader crh = input.getCommonRequestHeader();
+ // TopologyHeader hdr = input.getTopologyHeader();
+ // TopologyRequest req = input.getTopologyRequest();
+ //
+ // // String requestId = crh.getServiceRequestId();
+ // String requestId = hdr.getSvcRequestId();
+ // properties.put(Constants.CONTEXT_REQID, requestId);
+ //
+ // String infomsg = String.format("Topology request '%s' (%s) received.", requestId, hdr.getSvcAction());
+ //
+ // // switch (req.getSvcAction()) {
+ // switch (hdr.getSvcAction()) {
+ // case Restart:
+ // properties.put(Constants.CONTEXT_SERVICE, Constants.SERVICE_RESTART);
+ // response = restart(input, properties);
+ // logger.info(infomsg);
+ // break;
+ //
+ // case Rebuild:
+ // properties.put(Constants.CONTEXT_SERVICE, Constants.SERVICE_REBUILD);
+ // response = rebuild(input, properties);
+ // logger.info(infomsg);
+ // break;
+ //
+ // default:
+ // String msg = String.format("Invalid request type [%s] for request id [%s]", req, requestId);
+ // response = generateTopologyOperationResponse(Boolean.FALSE, requestId, msg, "N/A");
+ // }
+ // }
+ //
+ // return response;
+ // }
+
+ /**
+ * Restart a VM
+ *
+ * @param hdr
+ * The common request header
+ * @param vnf
+ * The identification of the VNF resource to be operated upon
+ * @return The rpc result of the restart operation
+ */
+ public RpcResult<ModifyConfigOutput> modifyConfig(CommonRequestHeader hdr, ConfigPayload data) {
+ long startTime = System.currentTimeMillis();
+ TimeZone tz = TimeZone.getTimeZone("UTC");
+ DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX");
+ df.setTimeZone(tz);
+ // String startTimeStr = String.valueOf(startTime);
+ String startTimeStr = df.format(new Date());
+ String requestId = hdr.getServiceRequestId();
+
+ //MDC.clear();
+ MDC.put(MDC_REMOTE_HOST, "");
+ MDC.put(MDC_KEY_REQUEST_ID, requestId);
+ MDC.put(MDC_SERVICE_NAME, "App-C Provider:Restart");
+ MDC.put(MDC_SERVICE_INSTANCE_ID, "");
+ try {
+ MDC.put(MDC_SERVER_FQDN, InetAddress.getLocalHost().getHostName());
+ MDC.put(MDC_SERVER_IP_ADDRESS, InetAddress.getLocalHost().getHostAddress());
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ MDC.put(MDC_INSTANCE_UUID, java.util.UUID.randomUUID().toString());
+ MDC.put(MDC_ALERT_SEVERITY, "0");
+ MDC.put("startTime", Long.toString(startTime));
+ MDC.put("target", "appc");
+ logger.info(String.format("Starting RESTART for request with id [%s]", requestId));
+ metricsLogger.info(String.format("Metrics Logger: App-C Restart initiated. Start Time: [%s]. Request ID: [%s]",
+ startTime, requestId));
+
+ /*
+ * Copy any needed inputs or other values into the properties to be passed to the DG model
+ */
+ //UUID vmId = vnf.getVmId();
+ Properties properties = new Properties();
+ properties.put(Constants.CONTEXT_ACTION, "modifyConfig");
+ properties.put(Constants.CONTEXT_REQID, requestId);
+ //properties.put(Constants.CONTEXT_VMID, vmId.getValue());
+ String url = configuration.getProperty("appc.provider.vfodl.url");
+ try{
+ if(url.contains("NODE_NAME")){
+ url = url.replace("NODE_NAME", data.getConfigUrl());
+ }
+ }catch(Exception e){
+ url = configuration.getProperty("appc.provider.vfodl.url");
+ }
+ logger.trace("Final URL to VF ODL: "+url);
+ properties.put("org.onap.appc.configURL", url);
+ properties.put("org.onap.appc.configJson", data.getConfigJson());
+
+ //UUID identityUrl = vnf.getIdentityUrl();
+ //if (identityUrl != null) {
+ // properties.put(Constants.CONTEXT_IDENTITY_URL, identityUrl.getValue());
+ //}
+ /*
+ * Attempt to call the DG with the appropriate properties
+ */
+ boolean success = callGraph(properties);
+
+
+ MDC.put("target", "appc");
+ String statusStr = success ? "SUCCESS" : "FAILURE";
+ String infomsg =
+ String.format("APPC0119I ModifyConfig '%s' finished with status %s. Reason: %s", requestId, statusStr, reason);
+ logger.info(infomsg);
+
+ ModifyConfigOutputBuilder rob = new ModifyConfigOutputBuilder();
+ long endTime = System.currentTimeMillis();
+ long duration = endTime - startTime;
+ String endTimeStr = String.valueOf(endTime);
+ String durationStr = String.valueOf(duration);
+ MDC.put("endTime", endTimeStr);
+ MDC.put("duration", durationStr);
+ rob.setCommonResponseHeader(ResponseHeaderBuilder.buildHeader(success, requestId, reason, duration));
+ //rob.setVmId(new UUID(vmId));
+
+ auditLogger.info(String.format(
+ "Audit Logger: APPC0119I Restart '%s' finished with status %s. Start Time: [%s]. End Time: [%s]. Duration: [%s]. Request ID: [%s]. Reason:%s",
+ requestId, statusStr, startTime, endTime, duration, requestId, reason));
+ metricsLogger.info(String.format(
+ "Metrics Logger: APPC0119I Restart '%s' finished with status %s. Start Time: [%s]. End Time: [%s]. Duration: [%s]. Request ID: [%s]. Reason:%s",
+ requestId, statusStr, startTime, endTime, duration, requestId, reason));
+
+ // Status must be set to true to indicate that our return is expected
+ RpcResult<ModifyConfigOutput> rpcResult =
+ RpcResultBuilder.<ModifyConfigOutput> status(true).withResult(rob.build()).build();
+ return rpcResult;
+
+ }
+
+
+
+
+ /**
+ * Restart a VM
+ *
+ * @param hdr
+ * The common request header
+ * @param vnf
+ * The identification of the VNF resource to be operated upon
+ * @return The rpc result of the restart operation
+ */
+ public RpcResult<MigrateOutput> migrate(CommonRequestHeader hdr, VnfResource vnf) {
+ long startTime = System.currentTimeMillis();
+ TimeZone tz = TimeZone.getTimeZone("UTC");
+ DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX");
+ df.setTimeZone(tz);
+ // String startTimeStr = String.valueOf(startTime);
+ String startTimeStr = df.format(new Date());
+ String requestId = hdr.getServiceRequestId();
+
+ //MDC.clear();
+ MDC.put(MDC_REMOTE_HOST, "");
+ MDC.put(MDC_KEY_REQUEST_ID, requestId);
+ MDC.put(MDC_SERVICE_NAME, "App-C Provider:Migrate");
+ MDC.put(MDC_SERVICE_INSTANCE_ID, "");
+ try {
+ MDC.put(MDC_SERVER_FQDN, InetAddress.getLocalHost().getHostName());
+ MDC.put(MDC_SERVER_IP_ADDRESS, InetAddress.getLocalHost().getHostAddress());
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ MDC.put(MDC_INSTANCE_UUID, java.util.UUID.randomUUID().toString());
+ MDC.put(MDC_ALERT_SEVERITY, "0");
+ MDC.put("startTime", startTimeStr);
+ MDC.put("target", "appc");
+ logger.info(String.format("Starting ANY for request with id [%s]", requestId));
+ metricsLogger.info(String.format("Metrics Logger: App-C Restart initiated. Start Time: [%s]. Request ID: [%s]",
+ startTime, requestId));
+
+ /*
+ * Copy any needed inputs or other values into the properties to be passed to the DG model
+ */
+ UUID vmId = vnf.getVmId();
+ Properties properties = new Properties();
+ properties.put(Constants.CONTEXT_ACTION, "migrate");
+ properties.put(Constants.CONTEXT_REQID, requestId);
+ properties.put(Constants.CONTEXT_VMID, vmId.getValue());
+
+ UUID identityUrl = vnf.getIdentityUrl();
+ if (identityUrl != null) {
+ properties.put(Constants.CONTEXT_IDENTITY_URL, identityUrl.getValue());
+ }
+
+ /*
+ * Attempt to call the DG with the appropriate properties
+ */
+ boolean success = callGraph(properties);
+
+ /*
+ * Generate the appropriate response
+ */
+ MDC.put("target", "appc");
+ String statusStr = success ? "SUCCESS" : "FAILURE";
+ String infomsg =
+ String.format("APPC0118I Migrate '%s' finished with status %s. Reason: %s", requestId, statusStr, reason);
+ logger.info(infomsg);
+
+ MigrateOutputBuilder mob = new MigrateOutputBuilder();
+
+ long endTime = System.currentTimeMillis();
+ long duration = endTime - startTime;
+ String endTimeStr = String.valueOf(endTime);
+ String durationStr = String.valueOf(duration);
+ MDC.put("endTime", endTimeStr);
+ MDC.put("duration", durationStr);
+ mob.setCommonResponseHeader(ResponseHeaderBuilder.buildHeader(success, requestId, reason, duration));
+ mob.setVmId(new UUID(vmId));
+
+ auditLogger.info(String.format(
+ "Audit Logger: APPC0118I Migrate '%s' finished with status %s. Start Time: [%s]. End Time: [%s]. Duration: [%s]. Request ID: [%s]. Reason:%s",
+ requestId, statusStr, startTime, endTime, duration, requestId, reason));
+ metricsLogger.info(String.format(
+ "Metrics Logger: APPC0118I Migrate '%s' finished with status %s. Start Time: [%s]. End Time: [%s]. Duration: [%s]. Request ID: [%s]. Reason:%s",
+ requestId, statusStr, startTime, endTime, duration, requestId, reason));
+
+ // Status must be set to true to indicate that our return is expected
+ RpcResult<MigrateOutput> rpcResult =
+ RpcResultBuilder.<MigrateOutput> status(true).withResult(mob.build()).build();
+ return rpcResult;
+ }
+
+ /**
+ * Restart a VM
+ *
+ * @param hdr
+ * The common request header
+ * @param vnf
+ * The identification of the VNF resource to be operated upon
+ * @return The rpc result of the restart operation
+ */
+ public RpcResult<RestartOutput> restart(CommonRequestHeader hdr, VnfResource vnf) {
+ long startTime = System.currentTimeMillis();
+ TimeZone tz = TimeZone.getTimeZone("UTC");
+ DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX");
+ df.setTimeZone(tz);
+ // String startTimeStr = String.valueOf(startTime);
+ String startTimeStr = df.format(new Date());
+ String requestId = hdr.getServiceRequestId();
+
+ //MDC.clear();
+ MDC.put(MDC_REMOTE_HOST, "");
+ MDC.put(MDC_KEY_REQUEST_ID, requestId);
+ MDC.put(MDC_SERVICE_NAME, "App-C Provider:Restart");
+ MDC.put(MDC_SERVICE_INSTANCE_ID, "");
+ try {
+ MDC.put(MDC_SERVER_FQDN, InetAddress.getLocalHost().getHostName());
+ MDC.put(MDC_SERVER_IP_ADDRESS, InetAddress.getLocalHost().getHostAddress());
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ MDC.put(MDC_INSTANCE_UUID, java.util.UUID.randomUUID().toString());
+ MDC.put(MDC_ALERT_SEVERITY, "0");
+ MDC.put("startTime", Long.toString(startTime));
+ MDC.put("target", "appc");
+ logger.info(String.format("Starting RESTART for request with id [%s]", requestId));
+ metricsLogger.info(String.format("Metrics Logger: App-C Restart initiated. Start Time: [%s]. Request ID: [%s]",
+ startTime, requestId));
+
+ /*
+ * Copy any needed inputs or other values into the properties to be passed to the DG model
+ */
+ UUID vmId = vnf.getVmId();
+ Properties properties = new Properties();
+ properties.put(Constants.CONTEXT_ACTION, "restart");
+ properties.put(Constants.CONTEXT_REQID, requestId);
+ properties.put(Constants.CONTEXT_VMID, vmId.getValue());
+
+ UUID identityUrl = vnf.getIdentityUrl();
+ if (identityUrl != null) {
+ properties.put(Constants.CONTEXT_IDENTITY_URL, identityUrl.getValue());
+ }
+ /*
+ * Attempt to call the DG with the appropriate properties
+ */
+ boolean success = callGraph(properties);
+
+ /*
+ * Generate the appropriate response
+ */
+ MDC.put("target", "appc");
+ String statusStr = success ? "SUCCESS" : "FAILURE";
+ String infomsg =
+ String.format("APPC0119I Restart '%s' finished with status %s. Reason: %s", requestId, statusStr, reason);
+ logger.info(infomsg);
+
+ RestartOutputBuilder rob = new RestartOutputBuilder();
+ long endTime = System.currentTimeMillis();
+ long duration = endTime - startTime;
+ String endTimeStr = String.valueOf(endTime);
+ String durationStr = String.valueOf(duration);
+ MDC.put("endTime", endTimeStr);
+ MDC.put("duration", durationStr);
+ rob.setCommonResponseHeader(ResponseHeaderBuilder.buildHeader(success, requestId, reason, duration));
+ rob.setVmId(new UUID(vmId));
+
+ auditLogger.info(String.format(
+ "Audit Logger: APPC0119I Restart '%s' finished with status %s. Start Time: [%s]. End Time: [%s]. Duration: [%s]. Request ID: [%s]. Reason:%s",
+ requestId, statusStr, startTime, endTime, duration, requestId, reason));
+ metricsLogger.info(String.format(
+ "Metrics Logger: APPC0119I Restart '%s' finished with status %s. Start Time: [%s]. End Time: [%s]. Duration: [%s]. Request ID: [%s]. Reason:%s",
+ requestId, statusStr, startTime, endTime, duration, requestId, reason));
+
+ // Status must be set to true to indicate that our return is expected
+ RpcResult<RestartOutput> rpcResult =
+ RpcResultBuilder.<RestartOutput> status(true).withResult(rob.build()).build();
+ return rpcResult;
+ }
+
+ /**
+ * Rebuild a VM
+ *
+ * @param hdr
+ * The common request header
+ * @param vnf
+ * The identification of the VNF resource to be operated upon
+ * @return The rpc result of the rebuild operation
+ */
+ public RpcResult<RebuildOutput> rebuild(CommonRequestHeader hdr, VnfResource vnf) {
+ long startTime = System.currentTimeMillis();
+ TimeZone tz = TimeZone.getTimeZone("UTC");
+ DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX");
+ df.setTimeZone(tz);
+ // String startTimeStr = String.valueOf(startTime);
+ String startTimeStr = df.format(new Date());
+ String requestId = hdr.getServiceRequestId();
+
+ //MDC.clear();
+ MDC.put(MDC_REMOTE_HOST, "");
+ MDC.put(MDC_KEY_REQUEST_ID, requestId);
+ MDC.put(MDC_SERVICE_NAME, "App-C Provider:Rebuild");
+ MDC.put(MDC_SERVICE_INSTANCE_ID, "");
+ try {
+ MDC.put(MDC_SERVER_FQDN, InetAddress.getLocalHost().getHostName());
+ MDC.put(MDC_SERVER_IP_ADDRESS, InetAddress.getLocalHost().getHostAddress());
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ MDC.put(MDC_INSTANCE_UUID, java.util.UUID.randomUUID().toString());
+ MDC.put(MDC_ALERT_SEVERITY, "0");
+ MDC.put("startTime", startTimeStr);
+ MDC.put("target", "appc");
+ logger.info(String.format("Starting REBUILD for request with id [%s]", requestId));
+ metricsLogger.info(String.format("Metrics Logger: App-C Restart initiated. Start Time: [%s]. Request ID: [%s]",
+ startTime, requestId));
+
+ /*
+ * Copy any needed inputs or other values into the properties to be passed to the DG model
+ */
+ UUID vmId = vnf.getVmId();
+ Properties properties = new Properties();
+ properties.put(Constants.CONTEXT_ACTION, "rebuild");
+ properties.put(Constants.CONTEXT_REQID, requestId);
+ properties.put(Constants.CONTEXT_VMID, vmId.getValue());
+
+ UUID identityUrl = vnf.getIdentityUrl();
+ if (identityUrl != null) {
+ properties.put(Constants.CONTEXT_IDENTITY_URL, identityUrl.getValue());
+ }
+
+ /*
+ * Attempt to call the DG with the appropriate properties
+ */
+ boolean success = callGraph(properties);
+
+ /*
+ * Generate the appropriate response
+ */
+ MDC.put("target", "appc");
+ String statusStr = success ? "SUCCESS" : "FAILURE";
+ String infomsg =
+ String.format("APPC0120I Rebuild '%s' finished with status %s. Reason: %s", requestId, statusStr, reason);
+ logger.info(infomsg);
+
+ RebuildOutputBuilder rob = new RebuildOutputBuilder();
+ long endTime = System.currentTimeMillis();
+ long duration = endTime - startTime;
+ String endTimeStr = String.valueOf(endTime);
+ String durationStr = String.valueOf(duration);
+ MDC.put("endTime", endTimeStr);
+ MDC.put("duration", durationStr);
+ rob.setCommonResponseHeader(ResponseHeaderBuilder.buildHeader(success, requestId, reason, duration));
+ rob.setOriginalVmId(new UUID(vmId));
+ rob.setNewVmId(new UUID(vmId));
+
+ auditLogger.info(String.format(
+ "Audit Logger: APPC0120I Rebuild '%s' finished with status %s. Start Time: [%s]. End Time: [%s]. Duration: [%s]. Request ID: [%s]. Reason:%s",
+ requestId, statusStr, startTime, endTime, duration, requestId, reason));
+ metricsLogger.info(String.format(
+ "Metrics Logger: APPC0120I Rebuild '%s' finished with status %s. Start Time: [%s]. End Time: [%s]. Duration: [%s]. Request ID: [%s]. Reason:%s",
+ requestId, statusStr, startTime, endTime, duration, requestId, reason));
+
+ // Status must be set to true to indicate that our return is expected
+ RpcResult<RebuildOutput> rpcResult =
+ RpcResultBuilder.<RebuildOutput> status(true).withResult(rob.build()).build();
+ return rpcResult;
+ }
+
+ /**
+ * Snapshot a VM
+ *
+ * @param hdr
+ * The common request header
+ * @param vnf
+ * The identification of the VNF resource to be operated upon
+ * @return The rpc result of the restart operation
+ */
+ public RpcResult<SnapshotOutput> snapshot(CommonRequestHeader hdr, VnfResource vnf) {
+ long startTime = System.currentTimeMillis();
+ TimeZone tz = TimeZone.getTimeZone("UTC");
+ DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX");
+ df.setTimeZone(tz);
+ // String startTimeStr = String.valueOf(startTime);
+ String startTimeStr = df.format(new Date());
+ String requestId = hdr.getServiceRequestId();
+
+ //MDC.clear();
+ MDC.put(MDC_REMOTE_HOST, "");
+ MDC.put(MDC_KEY_REQUEST_ID, requestId);
+ MDC.put(MDC_SERVICE_NAME, "App-C Provider:Snapshot");
+ MDC.put(MDC_SERVICE_INSTANCE_ID, "");
+ try {
+ MDC.put(MDC_SERVER_FQDN, InetAddress.getLocalHost().getHostName());
+ MDC.put(MDC_SERVER_IP_ADDRESS, InetAddress.getLocalHost().getHostAddress());
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ MDC.put(MDC_INSTANCE_UUID, java.util.UUID.randomUUID().toString());
+ MDC.put(MDC_ALERT_SEVERITY, "0");
+ MDC.put("startTime", Long.toString(startTime));
+ MDC.put("target", "appc");
+ logger.info(String.format("Starting SNAPSHOT for request with id [%s]", requestId));
+ metricsLogger.info(String.format("Metrics Logger: App-C Snapshot initiated. Start Time: [%s]. Request ID: [%s]",
+ startTime, requestId));
+
+ /*
+ * Copy any needed inputs or other values into the properties to be passed to the DG model
+ */
+ UUID vmId = vnf.getVmId();
+ Properties properties = new Properties();
+ properties.put(Constants.CONTEXT_ACTION, "snapshot");
+ properties.put(Constants.CONTEXT_REQID, requestId);
+ properties.put(Constants.CONTEXT_VMID, vmId.getValue());
+
+ UUID identityUrl = vnf.getIdentityUrl();
+ if (identityUrl != null) {
+ properties.put(Constants.CONTEXT_IDENTITY_URL, identityUrl.getValue());
+ }
+ /*
+ * Attempt to call the DG with the appropriate properties
+ */
+ boolean success = callGraph(properties);
+
+ /*
+ * Generate the appropriate response
+ */
+ MDC.put("target", "appc");
+ String statusStr = success ? "SUCCESS" : "FAILURE";
+ String infomsg =
+ String.format("APPC0119I Snapshot '%s' finished with status %s. Reason: %s", requestId, statusStr, reason);
+ logger.info(infomsg);
+
+ SnapshotOutputBuilder sob = new SnapshotOutputBuilder();
+ long endTime = System.currentTimeMillis();
+ long duration = endTime - startTime;
+ String endTimeStr = String.valueOf(endTime);
+ String durationStr = String.valueOf(duration);
+ MDC.put("endTime", endTimeStr);
+ MDC.put("duration", durationStr);
+ sob.setCommonResponseHeader(ResponseHeaderBuilder.buildHeader(success, requestId, reason, duration));
+ sob.setVmId(new UUID(vmId));
+
+ auditLogger.info(String.format(
+ "Audit Logger: APPC0119I Snapshot '%s' finished with status %s. Start Time: [%s]. End Time: [%s]. Duration: [%s]. Request ID: [%s]. Reason:%s",
+ requestId, statusStr, startTime, endTime, duration, requestId, reason));
+ metricsLogger.info(String.format(
+ "Metrics Logger: APPC0119I Snapshot '%s' finished with status %s. Start Time: [%s]. End Time: [%s]. Duration: [%s]. Request ID: [%s]. Reason:%s",
+ requestId, statusStr, startTime, endTime, duration, requestId, reason));
+
+ // Status must be set to true to indicate that our return is expected
+ RpcResult<SnapshotOutput> rpcResult =
+ RpcResultBuilder.<SnapshotOutput> status(true).withResult(sob.build()).build();
+ return rpcResult;
+ }
+
+/**************************************************/
+
+ public RpcResult<VmstatuscheckOutput> vmstatuscheck(CommonRequestHeader hdr, VnfResource vnf) {
+ long startTime = System.currentTimeMillis();
+ String requestId = hdr.getServiceRequestId();
+
+ MDC.clear();
+ MDC.put(MDC_REMOTE_HOST, "");
+ MDC.put(MDC_KEY_REQUEST_ID, requestId);
+ MDC.put(MDC_SERVICE_NAME, "App-C Provider:vmstatuscheck");
+ MDC.put(MDC_SERVICE_INSTANCE_ID, "");
+ try {
+ MDC.put(MDC_SERVER_FQDN, InetAddress.getLocalHost().getHostName());
+ MDC.put(MDC_SERVER_IP_ADDRESS, InetAddress.getLocalHost().getHostAddress());
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ MDC.put(MDC_INSTANCE_UUID, java.util.UUID.randomUUID().toString());
+ MDC.put(MDC_ALERT_SEVERITY, "0");
+ logger.info(String.format("Starting VMSTATUSCHECK for request with id [%s]", requestId));
+
+ performanceLogger.info(String.format("Performance Logger: App-C vmstatuscheck initiated. Start Time: [%s]. Request ID: [%s]", startTime, requestId));
+ auditLogger.info(String.format("Audit Logger: App-C vmstatuscheck initiated. Start Time: [%s]. Request ID: [%s]", startTime, requestId));
+ metricsLogger.info(String.format("Metrics Logger: App-C vmstatuscheck initiated. Start Time: [%s]. Request ID: [%s]", startTime, requestId));
+
+ /*
+ * Copy any needed inputs or other values into the properties to be passed to the DG model
+ */
+ UUID vmId = vnf.getVmId();
+ Properties properties = new Properties();
+ properties.put(Constants.CONTEXT_ACTION, "vmstatuschecking");
+ properties.put(Constants.CONTEXT_REQID, requestId);
+ properties.put(Constants.CONTEXT_VMID, vmId.getValue());
+ properties.put(Constants.STATUS_GETTER, "checking");
+
+
+
+
+ UUID identityUrl = vnf.getIdentityUrl();
+ if (identityUrl != null) {
+ properties.put(Constants.CONTEXT_IDENTITY_URL, identityUrl.getValue());
+ }
+ /*
+ * Attempt to call the DG with the appropriate properties
+ */
+ boolean success = callGraph(properties);
+
+ /*
+ * Generate the appropriate response
+ */
+ String statusStr = success ? "SUCCESS" : "FAILURE";
+ String infomsg =
+ String.format("VMSTATUSCHECK '%s' finished with status %s. Reason: %s", requestId, statusStr, reason);
+ logger.info(infomsg);
+ long endTime = System.currentTimeMillis();
+ auditLogger.info(String.format("Audit Logger: VMSTATUSCHECK '%s' finished with status %s. Start Time: [%s]. End Time: [%s]. Request ID: [%s]. Reason:%s", requestId, statusStr, startTime, endTime, requestId, reason));
+ metricsLogger.info(String.format("Metrics Logger: VMSTATUSCHECK '%s' finished with status %s. Start Time: [%s]. End Time: [%s]. Request ID: [%s]. Reason:%s", requestId, statusStr, startTime, endTime, requestId, reason));
+ //logger.info(String.format("Step1 [%s]", Constants.STATUS_GETTER));
+ String tempstring2 = properties.getProperty(Constants.STATUS_GETTER).trim();
+ //logger.info(String.format("Step2 [%s]", tempstring2));
+
+
+ VmstatuscheckOutputBuilder vob = new VmstatuscheckOutputBuilder();
+ long duration = System.currentTimeMillis() - startTime;
+ vob.setCommonResponseHeader(ResponseHeaderBuilder.buildHeader(success, requestId, reason, duration));
+ vob.setStatMsg(tempstring2);
+
+ // Status must be set to true to indicate that our return is expected
+ RpcResult<VmstatuscheckOutput> rpcResult =
+ RpcResultBuilder.<VmstatuscheckOutput> status(true).withResult(vob.build()).build();
+ return rpcResult;
+ }
+
+ /*************************************************/
+
+
+
+ private boolean callGraph(Properties props) {
+ String moduleName = configuration.getProperty(Constants.PROPERTY_MODULE_NAME);
+ String methodName = configuration.getProperty(Constants.PROPERTY_TOPOLOGY_METHOD);
+ String version = configuration.getProperty(Constants.PROPERTY_TOPOLOGY_VERSION);
+ String mode = Constants.SYNC_MODE;
+ return callGraph(moduleName, methodName, version, mode, props);
+ }
+
+ /**
+ * Calls a specified directed graph with the specified properties and returns the response
+ *
+ * @param module
+ * The module name to be used to locate the graph
+ * @param method
+ * The method name to be executed (rpc)
+ * @param version
+ * The version of the graph to be used, or null for the latest
+ * @param mode
+ * the execution mode of the graph, sync or async
+ * @param props
+ * A set of name-value properties to be passed to the graph for context variables.
+ */
+ private boolean callGraph(String module, String method, String version, String mode, Properties props) {
+ String graphName = String.format(("%s:%s:%s"), module, method, version);
+ logger.debug(String.format("Calling Graph %s", graphName));
+ metricsLogger.info(String.format("Calling Graph %s", graphName));
+
+ boolean success = false;
+ String appName = configuration.getProperty(Constants.PROPERTY_APPLICATION_NAME);
+ AppcProviderClient svcLogicClient = new AppcProviderClient();
+ try {
+ if (svcLogicClient.hasGraph(module, method, version, mode)) {
+ try {
+ Properties respProps = svcLogicClient.execute(module, method, version, mode, props);
+ success = false; // Assume it failed unless proven otherwise
+ reason = "Failed"; // Assume it failed unless proven otherwise
+
+ logger.debug(EELFResourceManager.format(Msg.DEBUG_GRAPH_RESPONSE_HEADER, appName, graphName,
+ Integer.toString(respProps.size())));
+ for (String key : respProps.stringPropertyNames()) {
+ logger.debug(EELFResourceManager.format(Msg.DEBUG_GRAPH_RESPONSE_DETAIL, appName, graphName,
+ key, (String) respProps.get(key)));
+ }
+
+ // TODO - Find docs and see if there is a better way to handle this
+ // Bad requests have errors
+ if (respProps.containsKey(Constants.ATTRIBUTE_ERROR_CODE)) {
+ // || respProps.containsKey(Constants.ATTRIBUTE_ERROR_MESSAGE)) {
+ String errorCodeProperty = respProps.getProperty(Constants.ATTRIBUTE_ERROR_CODE).trim();
+ int errorCode = 200;
+ try {
+ errorCode = Integer.parseInt(errorCodeProperty);
+ if (errorCode >= 300) {
+ reason = EELFResourceManager.format(Msg.DG_FAILED_RESPONSE, appName, graphName,
+ errorCodeProperty, respProps.getProperty(Constants.ATTRIBUTE_ERROR_MESSAGE));
+ logger.error(reason);
+ success = false;
+ } else {
+ success = true;
+ reason = "Success";
+ }
+ } catch (NumberFormatException e) {
+ reason = EELFResourceManager.format(Msg.PARAMETER_NOT_NUMERIC, appName, graphName,
+ Constants.ATTRIBUTE_ERROR_CODE, errorCodeProperty);
+ logger.error(reason);
+ success = false;
+ }
+ } else {
+ /*
+ * Added code that requires error code to now be defined in ALL cases. If not, it is an error
+ * and the response will be set to failed regardless if the DG worked or not.
+ */
+ reason = EELFResourceManager.format(Msg.PARAMETER_IS_MISSING, appName, graphName,
+ Constants.ATTRIBUTE_ERROR_CODE);
+ logger.error(reason);
+ success = false;
+ }
+ } catch (Exception e) {
+ success = false;
+ reason = EELFResourceManager.format(Msg.EXCEPTION_CALLING_DG, e, appName,
+ e.getClass().getSimpleName(), graphName, e.getMessage());
+ logger.error(reason);
+ }
+ } else {
+ success = false;
+ reason = EELFResourceManager.format(Msg.GRAPH_NOT_FOUND, appName, graphName);
+ logger.error(reason);
+ }
+ } catch (Exception e) {
+ success = false;
+ reason = EELFResourceManager.format(Msg.EXCEPTION_CALLING_DG, e, appName, e.getClass().getSimpleName(),
+ graphName, e.getMessage());
+ logger.error(reason);
+ }
+
+ return success;
+ }
+
+}