diff options
Diffstat (limited to 'openecomp-be/lib/openecomp-sdc-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/servlet/ContextTracker.java')
-rw-r--r-- | openecomp-be/lib/openecomp-sdc-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/servlet/ContextTracker.java | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/openecomp-be/lib/openecomp-sdc-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/servlet/ContextTracker.java b/openecomp-be/lib/openecomp-sdc-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/servlet/ContextTracker.java new file mode 100644 index 0000000000..2334f373bc --- /dev/null +++ b/openecomp-be/lib/openecomp-sdc-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/servlet/ContextTracker.java @@ -0,0 +1,66 @@ +/* + * Copyright © 2016-2018 European Support Limited + * + * 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. + */ + +package org.openecomp.sdc.logging.servlet; + +import java.util.Objects; +import java.util.UUID; +import javax.servlet.http.HttpServletRequest; +import org.openecomp.sdc.logging.api.ContextData; +import org.openecomp.sdc.logging.api.LoggingContext; + +/** + * Populates the context before a request is processed, and cleans it after the request has been processed. + * + * @author evitaliy + * @since 31 Jul 2018 + */ +public class ContextTracker implements Tracker { + + private final HttpHeader partnerNameHeaders; + private final HttpHeader requestIdHeaders; + + /** + * Constructs tracker to handle required logging context in Servlet-based applications. Refer to ONAP logging + * guidelines for fields required to be put on logging context. + * + * @param partnerNameHeaders HTTP headers to check for a partner name, cannot be null + * @param requestIdHeaders HTTP headers to check for a request ID, cannot be null + */ + public ContextTracker(HttpHeader partnerNameHeaders, HttpHeader requestIdHeaders) { + this.partnerNameHeaders = Objects.requireNonNull(partnerNameHeaders); + this.requestIdHeaders = Objects.requireNonNull(requestIdHeaders); + } + + @Override + public void preRequest(HttpServletRequest request) { + + LoggingContext.clear(); + + String serviceName = ServiceNameFormatter.format(request); + String requestId = requestIdHeaders.getAny(request::getHeader).orElse(UUID.randomUUID().toString()); + ContextData.ContextDataBuilder contextBuilder = + ContextData.builder().serviceName(serviceName).requestId(requestId); + + partnerNameHeaders.getAny(request::getHeader).ifPresent(contextBuilder::partnerName); + LoggingContext.put(contextBuilder.build()); + } + + @Override + public void postRequest(RequestProcessingResult result) { + LoggingContext.clear(); + } +} |