summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/onap/pomba/contextbuilder/sdnc/service
diff options
context:
space:
mode:
authorTait,Trevor(rt0435) <rtait@amdocs.com>2018-10-26 13:27:54 -0400
committerLeigh, Phillip (pl876u) <phillip.leigh@amdocs.com>2018-10-26 15:28:46 -0400
commitf6a725a0b5b6864c09443e7f328927772a78ea05 (patch)
tree9a7aec7d4a93059e28ea1b15eee2576f1ad87c5a /src/main/java/org/onap/pomba/contextbuilder/sdnc/service
parentb5f75d3996fbfd270e301abbe38766a9f6cf3a40 (diff)
SDNC context builder API Mapping Configuration
Issue-ID: LOG-421 Add code to use the VNF-API on SDNC where required. This involves using the api-mapping logic to select the VNF-API over the GNERIC-RESOURCES-API as well as adding the code to extract the information required by the VNF-API from AAI and adding the code to parse the VNF-API resonse into ModelContext. Change-Id: I4447a14d7fa39b2c5d9b655c2b20e651e56d3d77 Signed-off-by: Tait,Trevor(rt0435) <rtait@amdocs.com>
Diffstat (limited to 'src/main/java/org/onap/pomba/contextbuilder/sdnc/service')
-rw-r--r--src/main/java/org/onap/pomba/contextbuilder/sdnc/service/SpringService.java3
-rw-r--r--src/main/java/org/onap/pomba/contextbuilder/sdnc/service/SpringServiceImpl.java69
-rw-r--r--src/main/java/org/onap/pomba/contextbuilder/sdnc/service/rs/RestService.java33
-rw-r--r--src/main/java/org/onap/pomba/contextbuilder/sdnc/service/rs/RestServiceImpl.java19
4 files changed, 102 insertions, 22 deletions
diff --git a/src/main/java/org/onap/pomba/contextbuilder/sdnc/service/SpringService.java b/src/main/java/org/onap/pomba/contextbuilder/sdnc/service/SpringService.java
index 6ead761..ebb3277 100644
--- a/src/main/java/org/onap/pomba/contextbuilder/sdnc/service/SpringService.java
+++ b/src/main/java/org/onap/pomba/contextbuilder/sdnc/service/SpringService.java
@@ -19,10 +19,11 @@
package org.onap.pomba.contextbuilder.sdnc.service;
+import javax.servlet.http.HttpServletRequest;
import org.onap.pomba.common.datatypes.ModelContext;
import org.onap.pomba.contextbuilder.sdnc.exception.AuditException;
public interface SpringService {
- public ModelContext getContext(String serviceInstanceId, String transactionId) throws AuditException;
+ public ModelContext getContext(HttpServletRequest request, String serviceInstanceId, String transactionId, String partnerName) throws AuditException;
public String getSdncAuthoriztion();
}
diff --git a/src/main/java/org/onap/pomba/contextbuilder/sdnc/service/SpringServiceImpl.java b/src/main/java/org/onap/pomba/contextbuilder/sdnc/service/SpringServiceImpl.java
index b19c24c..b21a76b 100644
--- a/src/main/java/org/onap/pomba/contextbuilder/sdnc/service/SpringServiceImpl.java
+++ b/src/main/java/org/onap/pomba/contextbuilder/sdnc/service/SpringServiceImpl.java
@@ -18,22 +18,29 @@
package org.onap.pomba.contextbuilder.sdnc.service;
+import java.net.InetAddress;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.UUID;
+import javax.servlet.http.HttpServletRequest;
import org.apache.camel.ProducerTemplate;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;
+import org.onap.aai.restclient.client.RestClient;
import org.onap.pomba.common.datatypes.ModelContext;
import org.onap.pomba.contextbuilder.sdnc.exception.AuditException;
-import org.onap.pomba.contextbuilder.sdnc.service.rs.RestService;
import org.onap.pomba.contextbuilder.sdnc.model.ServiceEntity;
+import org.onap.pomba.contextbuilder.sdnc.service.rs.RestService;
+import org.onap.pomba.contextbuilder.sdnc.util.RestUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.slf4j.MDC;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
-import org.onap.pomba.contextbuilder.sdnc.util.RestUtil;
-import org.onap.aai.restclient.client.RestClient;
@Service
public class SpringServiceImpl implements SpringService {
+
private static Logger log = LoggerFactory.getLogger(RestService.class);
@Autowired
@@ -41,8 +48,6 @@ public class SpringServiceImpl implements SpringService {
private KieContainer kieContainer;
@Autowired
private ProducerTemplate producerTemplate;
-
- //AAI related
@Autowired
private String aaiBasicAuthorization;
@Autowired
@@ -53,24 +58,45 @@ public class SpringServiceImpl implements SpringService {
private String aaiPathToSearchNodeQuery;
@Autowired
private String aaiPathToCustomerQuery;
-
- public SpringServiceImpl() {
- // needed for instantiation
- }
-
@Autowired
public SpringServiceImpl(KieContainer kieContainer) {
this.kieContainer = kieContainer;
+ }
+ public SpringServiceImpl() {
+ // needed for instantiation
}
+ public static final String APP_NAME = "SdncContextBuilder";
+ public static final String MDC_REQUEST_ID = "RequestId";
+ public static final String MDC_SERVER_FQDN = "ServerFQDN";
+ public static final String MDC_SERVICE_NAME = "ServiceName";
+ public static final String MDC_PARTNER_NAME = "PartnerName";
+ public static final String MDC_START_TIME = "StartTime";
+ public static final String MDC_SERVICE_INSTANCE_ID = "ServiceInstanceId";
+ public static final String MDC_INVOCATION_ID = "InvocationID";
+ public static final String MDC_CLIENT_ADDRESS = "ClientAddress";
+ public static final String MDC_STATUS_CODE = "StatusCode";
+ public static final String MDC_RESPONSE_CODE = "ResponseCode";
+ public static final String MDC_INSTANCE_UUID = "InstanceUUID";
+
+ private static UUID instanceUUID = UUID.randomUUID();
+
@Override
- public ModelContext getContext(String serviceInstanceId, String transactionId) throws AuditException {
+ public ModelContext getContext(HttpServletRequest request, String serviceInstanceId, String transactionId, String partnerName) throws AuditException {
+
+ String remoteAddress = request.getRemoteAddr() != null ? request.getRemoteAddr() : null;
+ initMDC(transactionId, partnerName, serviceInstanceId, remoteAddress);
+
ModelContext context = null;
// Call AAI system to populate ServiceData
ServiceEntity serviceEntity = RestUtil.getServiceEntity(aaiClient, aaiBaseUrl, aaiBasicAuthorization, aaiPathToSearchNodeQuery, aaiPathToCustomerQuery, serviceInstanceId, transactionId);
+ if (null == serviceEntity) {
+ return context;
+ }
+
processApiMappingRules(serviceEntity);
log.info("SDN-C determined API: " + serviceEntity.getApiName());
@@ -79,6 +105,27 @@ public class SpringServiceImpl implements SpringService {
return context;
}
+ private void initMDC(String requestId, String partnerName, String serviceInstanceId, String remoteAddress) {
+ MDC.clear();
+ MDC.put(MDC_REQUEST_ID, requestId);
+ MDC.put(MDC_SERVICE_NAME, APP_NAME);
+ MDC.put(MDC_SERVICE_INSTANCE_ID, serviceInstanceId);
+ MDC.put(MDC_PARTNER_NAME, partnerName);
+ MDC.put(MDC_CLIENT_ADDRESS, remoteAddress);
+ MDC.put(MDC_START_TIME, new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX").format(new Date()));
+ MDC.put(MDC_INVOCATION_ID, UUID.randomUUID().toString());
+ MDC.put(MDC_INSTANCE_UUID, instanceUUID.toString());
+
+ try {
+ MDC.put(MDC_SERVER_FQDN, InetAddress.getLocalHost().getCanonicalHostName());
+ } catch (Exception e) {
+ // If, for some reason we are unable to get the canonical host name,
+ // we
+ // just want to leave the field null.
+ log.info("Could not get canonical host name for " + MDC_SERVER_FQDN + ", leaving field null");
+ }
+ }
+
private void processApiMappingRules(ServiceEntity serviceData){
KieSession kieSession = kieContainer.newKieSession();
diff --git a/src/main/java/org/onap/pomba/contextbuilder/sdnc/service/rs/RestService.java b/src/main/java/org/onap/pomba/contextbuilder/sdnc/service/rs/RestService.java
index ec1581a..efab905 100644
--- a/src/main/java/org/onap/pomba/contextbuilder/sdnc/service/rs/RestService.java
+++ b/src/main/java/org/onap/pomba/contextbuilder/sdnc/service/rs/RestService.java
@@ -22,6 +22,7 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
+import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
@@ -33,12 +34,12 @@ import javax.ws.rs.core.Response;
@Api
-@Path("/service")
+@Path("/")
@Produces({MediaType.APPLICATION_JSON})
public interface RestService {
@GET
- @Path("/context")
+ @Path("service/context")
@Produces({MediaType.APPLICATION_JSON})
@ApiOperation(
value = "Respond SDNCContext Model Data",
@@ -52,7 +53,29 @@ public interface RestService {
@ApiResponse(code = 404, message = "Service not available"),
@ApiResponse(code = 500, message = "Unexpected Runtime error")
})
- public Response getContext(@Context HttpHeaders headers,
- @QueryParam("serviceInstanceId") String serviceInstanceId
+ public Response getContext(@Context HttpServletRequest request,
+ @Context HttpHeaders headers,
+ @QueryParam("serviceInstanceId") String serviceInstanceId
);
-} \ No newline at end of file
+
+ @GET
+ @Path("{version:[vV][1-5]}/service/context")
+ @Produces({MediaType.APPLICATION_JSON})
+ @ApiOperation(
+ value = "Respond SDNCContext v1 - v5 Model Data",
+ notes = "Returns a JSON object which represents the SDNCConetxt V1 model data",
+ response = Response.class
+ )
+ @ApiResponses(
+ value = {
+ @ApiResponse(code = 200, message = "OK"),
+ @ApiResponse(code = 400, message = "Bad Request"),
+ @ApiResponse(code = 404, message = "Service not available"),
+ @ApiResponse(code = 500, message = "Unexpected Runtime error")
+ })
+ public Response getV1Context(@Context HttpServletRequest request,
+ @Context HttpHeaders headers,
+ @QueryParam("serviceInstanceId") String serviceInstanceId
+ );
+
+}
diff --git a/src/main/java/org/onap/pomba/contextbuilder/sdnc/service/rs/RestServiceImpl.java b/src/main/java/org/onap/pomba/contextbuilder/sdnc/service/rs/RestServiceImpl.java
index d3b6378..a70012f 100644
--- a/src/main/java/org/onap/pomba/contextbuilder/sdnc/service/rs/RestServiceImpl.java
+++ b/src/main/java/org/onap/pomba/contextbuilder/sdnc/service/rs/RestServiceImpl.java
@@ -20,6 +20,7 @@ package org.onap.pomba.contextbuilder.sdnc.service.rs;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
+import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
@@ -43,20 +44,22 @@ public class RestServiceImpl implements RestService {
}
@Override
- public Response getContext(HttpHeaders headers, String serviceInstanceId) {
+ public Response getContext(HttpServletRequest request, HttpHeaders headers, String serviceInstanceId) {
Response response = null;
ModelContext sdncContext= null;
Gson gson = new GsonBuilder().create();
try {
- // Do some validation on Http headers and URL parameters
- RestUtil.validateHeader(headers, service.getSdncAuthoriztion());
+ // Validate URL parameters
RestUtil.validateURL(serviceInstanceId);
+ // Validate Headers and extract Partner Name
+ String partnerName = RestUtil.validateHeader(headers, service.getSdncAuthoriztion());
+
// Keep the same transaction id for logging purposeString transactionId
- String transactionId = RestUtil.extractTranIdHeader(headers);
+ String transactionId = RestUtil.extractTranactionIdHeader(headers);
- sdncContext = service.getContext(serviceInstanceId, transactionId);
+ sdncContext = service.getContext(request, serviceInstanceId, transactionId, partnerName);
if (sdncContext==null) {
// Return empty JSON
@@ -78,4 +81,10 @@ public class RestServiceImpl implements RestService {
return response;
}
+ @Override
+ public Response getV1Context(HttpServletRequest request, HttpHeaders headers, String serviceInstanceId) {
+ return getContext(request, headers, serviceInstanceId);
+ }
+
+
}