Skip to content

Commit

Permalink
log more in dynamo
Browse files Browse the repository at this point in the history
  • Loading branch information
prenagha committed Aug 22, 2024
1 parent dd36799 commit a2173c2
Show file tree
Hide file tree
Showing 6 changed files with 37 additions and 17 deletions.
3 changes: 3 additions & 0 deletions .run/Todo App.run.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Todo App" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot">
<option name="ACTIVE_PROFILES" value="dev" />
<envs>
<env name="ENVIRONMENT_NAME" value="dev" />
</envs>
<option name="FRAME_DEACTIVATION_UPDATE_POLICY" value="UpdateClassesAndResources" />
<module name="TODO.app.main" />
<option name="SPRING_BOOT_MAIN_CLASS" value="com.renaghan.todo.TodoApplication" />
Expand Down
4 changes: 4 additions & 0 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,9 @@ dependencies {
implementation("org.apache.activemq:activemq-kahadb-store")
implementation("org.apache.activemq:activemq-stomp")

// Fixing Console Warning on M1 Processors
implementation("io.netty:netty-resolver-dns-native-macos:4.1.112.Final:osx-aarch_64")

developmentOnly("org.springframework.boot:spring-boot-devtools")

testImplementation("org.springframework.boot:spring-boot-starter-test")
Expand All @@ -87,6 +90,7 @@ dependencies {
}

tasks.bootRun.configure {
environment = mapOf("ENVIRONMENT_NAME" to "dev")
jvmArgs = listOf(
"-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005",
"-Dspring.profiles.active=dev",
Expand Down
16 changes: 1 addition & 15 deletions app/src/main/java/com/renaghan/todo/IndexController.java
Original file line number Diff line number Diff line change
@@ -1,30 +1,16 @@
package com.renaghan.todo;

import com.renaghan.todo.tracing.TracingEvent;

import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import java.security.Principal;

@Controller
@RequestMapping("/")
public class IndexController {

private final ApplicationEventPublisher eventPublisher;

public IndexController(ApplicationEventPublisher eventPublisher) {
this.eventPublisher = eventPublisher;
}

@GetMapping
@RequestMapping("/")
public String getIndex(Principal principal) {
this.eventPublisher.publishEvent(
new TracingEvent(this, "index", principal != null ? principal.getName() : "anonymous"));

public String getIndex() {
return "index";
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package com.renaghan.todo.collaboration;

import com.renaghan.todo.tracing.TracingEvent;
import io.awspring.cloud.sqs.annotation.SqsListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.mail.MailSender;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.stereotype.Component;
Expand All @@ -16,6 +18,7 @@ public class TodoSharingListener {
private final boolean autoConfirmCollaborations;
private final String confirmEmailFromAddress;
private final String externalUrl;
private final ApplicationEventPublisher eventPublisher;

private static final Logger LOG = LoggerFactory.getLogger(TodoSharingListener.class.getName());

Expand All @@ -24,19 +27,26 @@ public TodoSharingListener(
TodoCollaborationService todoCollaborationService,
@Value("${custom.auto-confirm-collaborations}") boolean autoConfirmCollaborations,
@Value("${custom.confirm-email-from-address}") String confirmEmailFromAddress,
@Value("${custom.external-url}") String externalUrl) {
@Value("${custom.external-url}") String externalUrl,
ApplicationEventPublisher eventPublisher) {
this.mailSender = mailSender;
this.todoCollaborationService = todoCollaborationService;
this.autoConfirmCollaborations = autoConfirmCollaborations;
this.confirmEmailFromAddress = confirmEmailFromAddress;
this.externalUrl = externalUrl;
this.eventPublisher = eventPublisher;
}

@SqsListener(value = "${custom.sharing-queue}")
public void listenToSharingMessages(TodoCollaborationNotification payload)
throws InterruptedException {
LOG.info("Incoming todo sharing payload: {}", payload);

// event which is then async written to dynamodb breadcrumb table
this.eventPublisher.publishEvent(
new TracingEvent(
this, "collab:request:" + payload.getTodoId(), payload.getCollaboratorEmail()));

SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(confirmEmailFromAddress);
message.setTo(payload.getCollaboratorEmail());
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,21 @@
package com.renaghan.todo.config;

import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Component
class LoggingContextConfiguration implements WebMvcConfigurer {

private final ApplicationEventPublisher eventPublisher;

public LoggingContextConfiguration(ApplicationEventPublisher eventPublisher) {
this.eventPublisher = eventPublisher;
}

@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoggingContextInterceptor());
registry.addInterceptor(new LoggingContextInterceptor(eventPublisher));
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package com.renaghan.todo.config;

import com.renaghan.todo.tracing.TracingEvent;
import jakarta.annotation.Nonnull;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.MDC;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.oauth2.core.oidc.user.OidcUser;
Expand All @@ -14,6 +16,11 @@
class LoggingContextInterceptor implements HandlerInterceptor {

private final Logger logger = LoggerFactory.getLogger(LoggingContextInterceptor.class);
private final ApplicationEventPublisher eventPublisher;

public LoggingContextInterceptor(ApplicationEventPublisher eventPublisher) {
this.eventPublisher = eventPublisher;
}

@Override
public boolean preHandle(
Expand All @@ -23,7 +30,10 @@ public boolean preHandle(

Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
String userId = getUserIdFromPrincipal(authentication.getPrincipal());
// logback context so gets in cloudwatch json logging
MDC.put("userId", userId);
// event which is then async written to dynamodb breadcrumb table
this.eventPublisher.publishEvent(new TracingEvent(this, request.getRequestURI(), userId));
return true;
}

Expand Down

0 comments on commit a2173c2

Please sign in to comment.