request metadata handler for litmus-proxy
Signed-off-by: chandresh pancholi <chandresh.pancholi@navi.com>
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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);}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user