diff options
Diffstat (limited to 'src/main/java/org/onap/pomba/contextbuilder/sdnc/service')
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); + } + + } |