Skip to content

Commit

Permalink
dynamo db
Browse files Browse the repository at this point in the history
  • Loading branch information
prenagha committed Aug 22, 2024
1 parent 4062297 commit 7932bc4
Show file tree
Hide file tree
Showing 5 changed files with 57 additions and 23 deletions.
16 changes: 14 additions & 2 deletions app/src/main/java/com/renaghan/todo/IndexController.java
Original file line number Diff line number Diff line change
@@ -1,18 +1,30 @@
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 {

public IndexController() {}
private final ApplicationEventPublisher eventPublisher;

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

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

return "index";
}
}
7 changes: 5 additions & 2 deletions app/src/main/java/com/renaghan/todo/tracing/TraceDao.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package com.renaghan.todo.tracing;

import io.awspring.cloud.dynamodb.DynamoDbTemplate;
import java.time.Instant;
import java.time.ZonedDateTime;
import java.time.temporal.ChronoUnit;
import java.util.List;
import java.util.UUID;
import org.slf4j.Logger;
Expand Down Expand Up @@ -33,7 +35,7 @@ public void storeTracingEvent(TracingEvent tracingEvent) {
breadcrumb.setId(UUID.randomUUID().toString());
breadcrumb.setUri(tracingEvent.getUri());
breadcrumb.setUsername(tracingEvent.getUsername());
breadcrumb.setTimestamp(ZonedDateTime.now().toString());
breadcrumb.setTimestamp(Instant.now().truncatedTo(ChronoUnit.SECONDS).toString());

dynamoDbTemplate.save(breadcrumb);

Expand All @@ -58,7 +60,8 @@ public List<Breadcrumb> findAllEventsForUser(String username) {
}

public List<Breadcrumb> findUserTraceForLastTwoWeeks(String username) {
ZonedDateTime twoWeeksAgo = ZonedDateTime.now().minusWeeks(2);
Instant twoWeeksAgo =
ZonedDateTime.now().minusWeeks(2).toInstant().truncatedTo(ChronoUnit.SECONDS);

Breadcrumb breadcrumb = new Breadcrumb();
breadcrumb.setUsername(username);
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/resources/application-dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,9 @@ management:

# noinspection SpringBootApplicationYaml
custom:
environment: local
use-cognito-as-identity-provider: false
auto-confirm-collaborations: true
web-socket-relay-use-ssl: false
provide-test-todo-controller: true
environment: dev

Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ awslocal ses verify-email-identity --email-address bjoern@stratospheric.dev
awslocal ses verify-email-identity --email-address philip@stratospheric.dev

awslocal dynamodb create-table \
--table-name local-todo-app-breadcrumb \
--table-name dev-todo-app-breadcrumb \
--attribute-definitions AttributeName=id,AttributeType=S \
--key-schema AttributeName=id,KeyType=HASH \
--provisioned-throughput ReadCapacityUnits=10,WriteCapacityUnits=10 \
53 changes: 36 additions & 17 deletions cdk/src/main/java/com/renaghan/todo/cdk/Infrastructure.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,16 @@
import dev.stratospheric.cdk.DockerRepository;
import dev.stratospheric.cdk.Network;
import software.amazon.awscdk.Duration;
import software.amazon.awscdk.RemovalPolicy;
import software.amazon.awscdk.Stack;
import software.amazon.awscdk.StackProps;
import software.amazon.awscdk.services.certificatemanager.DnsValidatedCertificate;
import software.amazon.awscdk.services.dynamodb.Attribute;
import software.amazon.awscdk.services.dynamodb.AttributeType;
import software.amazon.awscdk.services.dynamodb.BillingMode;
import software.amazon.awscdk.services.dynamodb.Table;
import software.amazon.awscdk.services.dynamodb.TableEncryption;
import software.amazon.awscdk.services.dynamodb.TableProps;
import software.amazon.awscdk.services.route53.ARecord;
import software.amazon.awscdk.services.route53.HostedZone;
import software.amazon.awscdk.services.route53.HostedZoneProviderProps;
Expand All @@ -23,7 +30,6 @@ public class Infrastructure {
private IHostedZone hostedZone;
private String certARN;
private Network network;
private Database database;

Infrastructure() {
this.app = new CDKApp();
Expand Down Expand Up @@ -88,14 +94,13 @@ private void cognito() {
}

private void database() {
this.database =
new Database(
app,
stack,
network,
new Database.DatabaseInputParameters()
.withPostgresVersion("16.4")
.withInstanceClass("db.t4g.micro"));
new Database(
app,
stack,
network,
new Database.DatabaseInputParameters()
.withPostgresVersion("16.4")
.withInstanceClass("db.t4g.micro"));
}

private void messaging() {
Expand All @@ -105,20 +110,33 @@ private void messaging() {
.retentionPeriod(Duration.days(14))
.build();

Queue todoSharingQueue =
Queue.Builder.create(stack, "todoSharingQueue")
.queueName(app.appEnv().prefix("todo-sharing-queue"))
.visibilityTimeout(Duration.seconds(30))
.retentionPeriod(Duration.days(14))
.deadLetterQueue(
DeadLetterQueue.builder().queue(todoSharingDlq).maxReceiveCount(3).build())
.build();
Queue.Builder.create(stack, "todoSharingQueue")
.queueName(app.appEnv().prefix("todo-sharing-queue"))
.visibilityTimeout(Duration.seconds(30))
.retentionPeriod(Duration.days(14))
.deadLetterQueue(DeadLetterQueue.builder().queue(todoSharingDlq).maxReceiveCount(3).build())
.build();
}

private void activeMQ() {
new ActiveMQ(app, stack, network);
}

private void dynamoDB() {
new Table(
stack,
"BreadcrumbsDynamoDbTable",
TableProps.builder()
.partitionKey(Attribute.builder().type(AttributeType.STRING).name("id").build())
.tableName(app.appEnv().prefix("breadcrumb"))
.encryption(TableEncryption.AWS_MANAGED)
.billingMode(BillingMode.PROVISIONED)
.readCapacity(10)
.writeCapacity(10)
.removalPolicy(RemovalPolicy.DESTROY)
.build());
}

private void generate() {
dockerRepo();
cert();
Expand All @@ -128,6 +146,7 @@ private void generate() {
messaging();
database();
activeMQ();
dynamoDB();
app.appEnv().tag(stack);
app.synth();
}
Expand Down

0 comments on commit 7932bc4

Please sign in to comment.