request metadata handler for litmus-proxy

Signed-off-by: chandresh pancholi <chandresh.pancholi@navi.com>
This commit is contained in:
chandresh pancholi
2021-11-26 17:15:43 +05:30
parent 3e865a9e5a
commit 1590f2ce19
5 changed files with 173 additions and 8 deletions

View File

@@ -0,0 +1,19 @@
package com.navi.medici.filter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class RequestHandlerConfig implements WebMvcConfigurer {
@Autowired
private RequestMetadataHandler requestMetadataHandler;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(requestMetadataHandler);
}
}

View File

@@ -0,0 +1,60 @@
package com.navi.medici.filter;
import com.navi.medici.model.RequestMetadata;
import java.util.Optional;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import lombok.extern.log4j.Log4j2;
import org.apache.logging.log4j.util.Strings;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
@Component
@Log4j2
public class RequestMetadataHandler extends HandlerInterceptorAdapter {
public static final String X_CORRELATION_ID = "X-Correlation-Id";
public static final String APP_VERSION_CODE = "appVersionCode";
public static final String OS_VERSION = "osVersion";
public static final String X_CLICK_STREAM_DATA = "X-Click-Stream-Data";
private final RequestMetadata requestMetadata;
@Autowired
public RequestMetadataHandler(RequestMetadata requestMetadata) {
this.requestMetadata = requestMetadata;
}
@Override
public boolean preHandle(final HttpServletRequest request, final HttpServletResponse response,
final Object handler) {
requestMetadata.resetCorrelationId();
requestMetadata.resetCustomerId();
requestMetadata.resetAppVersionCode();
requestMetadata.resetOsVersion();
requestMetadata.resetClickStreamData();
String correlationId = request.getHeader(X_CORRELATION_ID);
String appVersionCode = request.getHeader(APP_VERSION_CODE);
String osVersion = request.getHeader(OS_VERSION);
requestMetadata.updateCorrelationId(Optional.ofNullable(correlationId)
.filter(Strings::isNotBlank).orElseGet(requestMetadata::generateCorrelationId));
Optional.ofNullable(appVersionCode).ifPresent(requestMetadata::updateAppVersionCode);
Optional.ofNullable(osVersion).ifPresent(requestMetadata::updateOSVersionCode);
String clickStreamData = request.getHeader(X_CLICK_STREAM_DATA);
Optional.ofNullable(clickStreamData).ifPresent(requestMetadata::updateClickStreamData);
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) {
requestMetadata.resetCorrelationId();
requestMetadata.resetCustomerId();
requestMetadata.resetAppVersionCode();
requestMetadata.resetOsVersion();
}
}

View File

@@ -0,0 +1,83 @@
package com.navi.medici.model;
import java.util.Optional;
import java.util.UUID;
import org.apache.logging.log4j.ThreadContext;
import org.springframework.stereotype.Component;
@Component
public class RequestMetadata {
public static final String MESSAGE = "X-Reply-Message";
private static final String CORRELATION_ID = "correlationId";
public static final String CUSTOMER_ID_HEADER = "X-Medici-Customer-Id";
public static final String CUSTOMER_ID = "customerId";
public static final String REQUEST_TYPE_HEADER = "X-Request-Type";
public static final String STATUS = "X-Reply-Status";
public static final String APP_VERSION_CODE = "appVersionCode";
public static final String OS_VERSION = "osVersion";
public static final String X_CLICK_STREAM_DATA = "X-Click-Stream-Data";
public String correlationId() {
return ThreadContext.get(CORRELATION_ID);
}
public String getClickStreamData() {
return ThreadContext.get(X_CLICK_STREAM_DATA);
}
public void updateClickStreamData(String clickStreamData) {
ThreadContext.put(X_CLICK_STREAM_DATA, clickStreamData);
}
public Optional<String> customerId() {
return Optional.ofNullable(ThreadContext.get(CUSTOMER_ID));
}
public String generateCorrelationId() {
return UUID.randomUUID().toString();
}
public void updateAppVersionCode(String appVersionCode) {
ThreadContext.put(APP_VERSION_CODE, appVersionCode);
}
public Optional<String> getAppVersionCode() {
return Optional.ofNullable(ThreadContext.get(APP_VERSION_CODE));
}
public void resetAppVersionCode() {
ThreadContext.remove(APP_VERSION_CODE);
}
public void updateOSVersionCode(String osVersionCode) {
ThreadContext.put(OS_VERSION, osVersionCode);
}
public Optional<String> getOsVersion() {
return Optional.ofNullable(ThreadContext.get(OS_VERSION));
}
public void resetOsVersion() {
ThreadContext.remove(OS_VERSION);
}
public void updateCorrelationId(String requestId) {
ThreadContext.put(CORRELATION_ID, requestId);
}
public void resetCorrelationId() {
ThreadContext.remove(CORRELATION_ID);
}
public void updateCustomerId(String customerId) {
ThreadContext.put(CUSTOMER_ID, customerId);
}
public void resetCustomerId() {
ThreadContext.remove(CUSTOMER_ID);
}
public void resetClickStreamData() {ThreadContext.remove(X_CLICK_STREAM_DATA);}
}

View File

@@ -1,23 +1,26 @@
package com.navi.medici.provider;
import com.navi.medici.context.LitmusContext;
import com.navi.medici.model.RequestMetadata;
import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2;
import org.springframework.stereotype.Component;
import org.springframework.web.context.annotation.RequestScope;
@RequestScope
@Log4j2
@RequiredArgsConstructor
@Component
public class CustomLitmusProxyContextProvider implements LitmusContextProvider {
private final RequestMetadata requestMetadata;
@Override
public LitmusContext getContext() {
return LitmusContext.builder().build();
// return LitmusContext.builder()
// .userId(requestMetadata.customerId().orElseGet(() -> ""))
// .clickStreamPayload(requestMetadata.getClickStreamData())
// .appVersionCode(requestMetadata.getAppVersionCode().orElse(""))
// .osType(requestMetadata.getOsVersion().orElse(""))
// .build();
return LitmusContext.builder()
.userId(requestMetadata.customerId().orElseGet(() -> ""))
.clickStreamPayload(requestMetadata.getClickStreamData())
.appVersionCode(requestMetadata.getAppVersionCode().orElse(""))
.osType(requestMetadata.getOsVersion().orElse(""))
.build();
}
}

View File

@@ -8,6 +8,6 @@ spring.jmx.enabled=true
management.metrics.kafka.consumer.enabled=true
management.metrics.kafka.producer.enabled=true
litmus.api.endpoint=${LITMUS_API_ENDPOINT:http://localhost:12000/litmus-core/v1}
litmus.api.endpoint=${LITMUS_API_ENDPOINT:https://dev-litmus-core.np.navi-tech.in/litmus-core/v1}
clickstream.api.endpoint=${CLICK_STREAM_API_ENDPOINT:https://dev-janus.np.navi-tech.in/events/json}