Skip to content

Commit e15b108

Browse files
committed
Merge branch 'grad-release'
# Conflicts: # api/pom.xml
2 parents 257a69c + 30920dd commit e15b108

File tree

8 files changed

+123
-161
lines changed

8 files changed

+123
-161
lines changed

.github/workflows/on.pr.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ jobs:
2525
with:
2626
distribution: 'corretto'
2727
java-version: 18
28-
- uses: actions/cache@v1
28+
- uses: actions/cache@v4
2929
with:
3030
path: ~/.m2/repository
3131
key: ${{ runner.os }}-maven-5Jun-${{ hashFiles('**/pom.xml') }}

api/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>ca.bc.gov.educ</groupId>
88
<artifactId>educ-grad-data-conversion-api</artifactId>
9-
<version>1.8.62</version>
9+
<version>1.8.63</version>
1010
<name>educ-grad-data-conversion-api</name>
1111
<description>Ministry of Education GRAD DATA CONVERSION API</description>
1212

api/src/main/java/ca/bc/gov/educ/api/dataconversion/config/RequestInterceptor.java

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import jakarta.servlet.http.HttpServletRequest;
1818
import jakarta.servlet.http.HttpServletResponse;
1919
import java.time.Instant;
20+
import java.util.UUID;
2021

2122
@Component
2223
public class RequestInterceptor implements AsyncHandlerInterceptor {
@@ -33,21 +34,30 @@ public boolean preHandle(HttpServletRequest request, HttpServletResponse respons
3334
}
3435
// correlationID
3536
val correlationID = request.getHeader(EducGradDataConversionApiConstants.CORRELATION_ID);
36-
if (correlationID != null) {
37-
ThreadLocalStateUtil.setCorrelationID(correlationID);
37+
ThreadLocalStateUtil.setCorrelationID(correlationID != null ? correlationID : UUID.randomUUID().toString());
38+
39+
//Request Source
40+
val requestSource = request.getHeader(EducGradDataConversionApiConstants.REQUEST_SOURCE);
41+
if(requestSource != null) {
42+
ThreadLocalStateUtil.setRequestSource(requestSource);
3843
}
3944

40-
// username
41-
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
42-
if (auth instanceof JwtAuthenticationToken) {
43-
JwtAuthenticationToken authenticationToken = (JwtAuthenticationToken) auth;
44-
Jwt jwt = (Jwt) authenticationToken.getCredentials();
45-
String username = JwtUtil.getName(jwt);
46-
if (username != null) {
47-
ThreadLocalStateUtil.setCurrentUser(username);
45+
// Header userName
46+
val userName = request.getHeader(EducGradDataConversionApiConstants.USER_NAME);
47+
if (userName != null) {
48+
ThreadLocalStateUtil.setCurrentUser(userName);
49+
}
50+
else {
51+
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
52+
if (auth instanceof JwtAuthenticationToken) {
53+
JwtAuthenticationToken authenticationToken = (JwtAuthenticationToken) auth;
54+
Jwt jwt = (Jwt) authenticationToken.getCredentials();
55+
String username = JwtUtil.getName(jwt);
56+
if (username != null) {
57+
ThreadLocalStateUtil.setCurrentUser(username);
58+
}
4859
}
4960
}
50-
5161
return true;
5262
}
5363

@@ -62,10 +72,6 @@ public boolean preHandle(HttpServletRequest request, HttpServletResponse respons
6272
@Override
6373
public void afterCompletion(@NonNull final HttpServletRequest request, final HttpServletResponse response, @NonNull final Object handler, final Exception ex) {
6474
LogHelper.logServerHttpReqResponseDetails(request, response, constants.isSplunkLogHelperEnabled());
65-
val correlationID = request.getHeader(EducGradDataConversionApiConstants.CORRELATION_ID);
66-
if (correlationID != null) {
67-
response.setHeader(EducGradDataConversionApiConstants.CORRELATION_ID, request.getHeader(EducGradDataConversionApiConstants.CORRELATION_ID));
68-
}
6975
// clear
7076
ThreadLocalStateUtil.clear();
7177
}

api/src/main/java/ca/bc/gov/educ/api/dataconversion/config/RestWebClient.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,17 @@
22

33
import ca.bc.gov.educ.api.dataconversion.util.EducGradDataConversionApiConstants;
44
import ca.bc.gov.educ.api.dataconversion.util.LogHelper;
5+
import ca.bc.gov.educ.api.dataconversion.util.ThreadLocalStateUtil;
56
import io.netty.handler.logging.LogLevel;
67
import org.springframework.beans.factory.annotation.Autowired;
78
import org.springframework.context.annotation.Bean;
89
import org.springframework.context.annotation.Configuration;
910
import org.springframework.context.annotation.Profile;
11+
import org.springframework.web.reactive.function.client.ClientRequest;
1012
import org.springframework.web.reactive.function.client.ExchangeFilterFunction;
1113
import org.springframework.web.reactive.function.client.ExchangeStrategies;
1214
import org.springframework.web.reactive.function.client.WebClient;
15+
import reactor.core.publisher.Mono;
1316
import reactor.netty.http.client.HttpClient;
1417

1518
import java.time.Duration;
@@ -31,7 +34,9 @@ public RestWebClient() {
3134

3235
@Bean
3336
public WebClient webClient() {
34-
return WebClient.builder().exchangeStrategies(ExchangeStrategies.builder()
37+
return WebClient.builder()
38+
.filter(setRequestHeaders())
39+
.exchangeStrategies(ExchangeStrategies.builder()
3540
.codecs(configurer -> configurer
3641
.defaultCodecs()
3742
.maxInMemorySize(40 * 1024 * 1024)) // 40 MB
@@ -49,7 +54,18 @@ private ExchangeFilterFunction log() {
4954
//Grad2-1929 replacing rawStatusCode() with statusCOde() as it was deprecated.
5055
clientResponse.statusCode().value(),
5156
clientRequest.headers().get(EducGradDataConversionApiConstants.CORRELATION_ID),
57+
clientRequest.headers().get(EducGradDataConversionApiConstants.REQUEST_SOURCE),
5258
constants.isSplunkLogHelperEnabled())
5359
));
5460
}
61+
private ExchangeFilterFunction setRequestHeaders() {
62+
return (clientRequest, next) -> {
63+
ClientRequest modifiedRequest = ClientRequest.from(clientRequest)
64+
.header(EducGradDataConversionApiConstants.CORRELATION_ID, ThreadLocalStateUtil.getCorrelationID())
65+
.header(EducGradDataConversionApiConstants.USER_NAME, ThreadLocalStateUtil.getCurrentUser())
66+
.header(EducGradDataConversionApiConstants.REQUEST_SOURCE, EducGradDataConversionApiConstants.API_NAME)
67+
.build();
68+
return next.exchange(modifiedRequest);
69+
};
70+
}
5571
}

api/src/main/java/ca/bc/gov/educ/api/dataconversion/util/EducGradDataConversionApiConstants.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ public class EducGradDataConversionApiConstants {
1313
public static final String API_NAME = "GRAD-DATA-CONVERSION-API";
1414
public static final String TRAX_STREAM_NAME="TRAX_STATUS_EVENT_STREAM";
1515
public static final String CORRELATION_ID = "correlationID";
16+
public static final String USER_NAME = "User-Name";
17+
public static final String REQUEST_SOURCE = "Request-Source";
1618
public static final String API_ROOT_MAPPING = "";
1719
public static final String API_VERSION = "v1";
1820
public static final String GRAD_DATA_CONVERSION_API_ROOT_MAPPING = "/api/" + API_VERSION + "/data-conversion";

api/src/main/java/ca/bc/gov/educ/api/dataconversion/util/LogHelper.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@ public static void logServerHttpReqResponseDetails(@NonNull final HttpServletReq
3636
if (correlationID != null) {
3737
httpMap.put("correlation_id", correlationID);
3838
}
39+
val requestSource = request.getHeader(EducGradDataConversionApiConstants.REQUEST_SOURCE);
40+
if (requestSource != null) {
41+
httpMap.put("request_source", requestSource);
42+
}
3943
httpMap.put("server_http_request_url", String.valueOf(request.getRequestURL()));
4044
httpMap.put("server_http_request_processing_time_ms", totalTime);
4145
httpMap.put("server_http_request_payload", String.valueOf(request.getAttribute("payload")));
@@ -48,7 +52,7 @@ public static void logServerHttpReqResponseDetails(@NonNull final HttpServletReq
4852
}
4953
}
5054

51-
public static void logClientHttpReqResponseDetails(@NonNull final HttpMethod method, final String url, final int responseCode, final List<String> correlationID, final boolean logging) {
55+
public static void logClientHttpReqResponseDetails(@NonNull final HttpMethod method, final String url, final int responseCode, final List<String> correlationID, final List<String> requestSource, final boolean logging) {
5256
if (!logging) return;
5357
try {
5458
final Map<String, Object> httpMap = new HashMap<>();
@@ -58,6 +62,9 @@ public static void logClientHttpReqResponseDetails(@NonNull final HttpMethod met
5862
if (correlationID != null) {
5963
httpMap.put("correlation_id", String.join(",", correlationID));
6064
}
65+
if (requestSource != null) {
66+
httpMap.put("request_source", String.join(",", requestSource));
67+
}
6168
MDC.putCloseable("httpEvent", mapper.writeValueAsString(httpMap));
6269
log.info("");
6370
MDC.clear();

0 commit comments

Comments
 (0)