From 3b2dd258b729c568f2d9af0e738c80a25b003ccd Mon Sep 17 00:00:00 2001 From: Shawn Potts Date: Tue, 1 Jul 2025 10:08:49 +0100 Subject: [PATCH 1/3] Changed ads-java to use postgres for ads and h2 for test --- services/ads/java/Dockerfile | 11 +++-- services/ads/java/build.gradle | 7 +++- .../main/java/adsjava/AdsJavaApplication.java | 42 ++++++++++--------- .../src/main/java/adsjava/Advertisement.java | 26 ++++++++++++ .../java/adsjava/AdvertisementRepository.java | 6 +++ .../java/src/main/resources/application.yml | 10 +++++ .../java/src/test/resources/application.yml | 10 +++++ 7 files changed, 87 insertions(+), 25 deletions(-) create mode 100644 services/ads/java/src/main/java/adsjava/Advertisement.java create mode 100644 services/ads/java/src/main/java/adsjava/AdvertisementRepository.java create mode 100644 services/ads/java/src/test/resources/application.yml diff --git a/services/ads/java/Dockerfile b/services/ads/java/Dockerfile index 6117e3f3..9c467914 100644 --- a/services/ads/java/Dockerfile +++ b/services/ads/java/Dockerfile @@ -20,13 +20,16 @@ ARG DD_GIT_REPOSITORY_URL ARG DD_GIT_COMMIT_SHA ENV APP_HOME=/usr/app/ \ - ADS_SERVER_PORT=3030 \ - DD_GIT_REPOSITORY_URL=${DD_GIT_REPOSITORY_URL} \ - DD_GIT_COMMIT_SHA=${DD_GIT_COMMIT_SHA} + ADS_SERVER_PORT=3030 \ + POSTGRES_PASSWORD=postgres \ + POSTGRES_USER=postgres \ + POSTGRES_HOST=postgres \ + DD_GIT_REPOSITORY_URL=${DD_GIT_REPOSITORY_URL} \ + DD_GIT_COMMIT_SHA=${DD_GIT_COMMIT_SHA} WORKDIR $APP_HOME COPY --from=temp_build_image $APP_HOME/build/libs/*.jar store-ads.jar RUN wget -O dd-java-agent.jar 'https://dtdg.co/latest-java-tracer' -ENTRYPOINT ["java", "-javaagent:/usr/app/dd-java-agent.jar", "-jar", "store-ads.jar"] \ No newline at end of file +ENTRYPOINT ["java", "-javaagent:/usr/app/dd-java-agent.jar", "-jar", "store-ads.jar"] diff --git a/services/ads/java/build.gradle b/services/ads/java/build.gradle index e1f316eb..4425949c 100644 --- a/services/ads/java/build.gradle +++ b/services/ads/java/build.gradle @@ -15,11 +15,14 @@ repositories { dependencies { implementation ( 'commons-io:commons-io:2.4', - 'org.springframework.boot:spring-boot-starter-web' + 'org.springframework.boot:spring-boot-starter-web', + 'org.springframework.boot:spring-boot-starter-data-jpa' ) + runtimeOnly 'org.postgresql:postgresql' implementation 'com.fasterxml.jackson.core:jackson-databind:2.15.2' - implementation 'net.logstash.logback:logstash-logback-encoder:7.0' + implementation 'net.logstash.logback:logstash-logback-encoder:7.0' testImplementation 'org.springframework.boot:spring-boot-starter-test' + testImplementation 'com.h2database:h2' } bootJar { diff --git a/services/ads/java/src/main/java/adsjava/AdsJavaApplication.java b/services/ads/java/src/main/java/adsjava/AdsJavaApplication.java index 3ba5148b..b375fc65 100644 --- a/services/ads/java/src/main/java/adsjava/AdsJavaApplication.java +++ b/services/ads/java/src/main/java/adsjava/AdsJavaApplication.java @@ -15,9 +15,13 @@ import org.springframework.web.bind.annotation.RequestParam; import java.util.concurrent.TimeoutException; import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.beans.factory.annotation.Autowired; +import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.context.annotation.Bean; +import org.springframework.boot.CommandLineRunner; @SpringBootApplication @@ -26,6 +30,9 @@ public class AdsJavaApplication { private static final Logger logger = LoggerFactory.getLogger(AdsJavaApplication.class); + @Autowired + private AdvertisementRepository advertisementRepository; + @RequestMapping("/") public String home() { logger.info("home url for ads called"); @@ -51,7 +58,7 @@ public String home() { value = "/ads", produces = MediaType.APPLICATION_JSON_VALUE ) - public HashMap[] ads(@RequestHeader HashMap headers) { + public List ads(@RequestHeader HashMap headers) { logger.info("/ads called"); boolean errorFlag = false; @@ -74,28 +81,25 @@ public HashMap[] ads(@RequestHeader HashMap headers) { throw new RuntimeException(e); } } else { - HashMap map1 = new HashMap<>(); - map1.put("id", "1"); - map1.put("name", "Discount Clothing"); - map1.put("path", "1.jpg"); - - HashMap map2 = new HashMap<>(); - map2.put("id", "2"); - map2.put("name", "Cool Hats"); - map2.put("path", "2.jpg"); - - HashMap map3 = new HashMap<>(); - map3.put("id", "3"); - map3.put("name", "Nic Bags"); - map3.put("path", "3.jpg"); - HashMap[] myArr = { map1, map2, map3 }; - logger.info("Total responses available: " + myArr.length); - return myArr; + List ads = advertisementRepository.findAll(); + logger.info("Total ads available: " + ads.size()); + return ads; } - } + } public static void main(String[] args) { SpringApplication.run(AdsJavaApplication.class, args); } + @Bean + public CommandLineRunner initDb(AdvertisementRepository repository) { + return args -> { + if (repository.count() == 0) { + repository.save(new Advertisement("Discount Clothing", "1.jpg")); + repository.save(new Advertisement("Cool Hats", "2.jpg")); + repository.save(new Advertisement("Nice Bags", "3.jpg")); + } + }; + } + } diff --git a/services/ads/java/src/main/java/adsjava/Advertisement.java b/services/ads/java/src/main/java/adsjava/Advertisement.java new file mode 100644 index 00000000..edd00986 --- /dev/null +++ b/services/ads/java/src/main/java/adsjava/Advertisement.java @@ -0,0 +1,26 @@ +package adsjava; + +import javax.persistence.*; + +@Entity +public class Advertisement { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + private String name; + private String path; + + public Advertisement() {} + + public Advertisement(String name, String path) { + this.name = name; + this.path = path; + } + + public Long getId() { return id; } + public void setId(Long id) { this.id = id; } + public String getName() { return name; } + public void setName(String name) { this.name = name; } + public String getPath() { return path; } + public void setPath(String path) { this.path = path; } +} \ No newline at end of file diff --git a/services/ads/java/src/main/java/adsjava/AdvertisementRepository.java b/services/ads/java/src/main/java/adsjava/AdvertisementRepository.java new file mode 100644 index 00000000..ae7c56cd --- /dev/null +++ b/services/ads/java/src/main/java/adsjava/AdvertisementRepository.java @@ -0,0 +1,6 @@ +package adsjava; + +import org.springframework.data.jpa.repository.JpaRepository; + +public interface AdvertisementRepository extends JpaRepository { +} \ No newline at end of file diff --git a/services/ads/java/src/main/resources/application.yml b/services/ads/java/src/main/resources/application.yml index a8359851..c1e5936e 100644 --- a/services/ads/java/src/main/resources/application.yml +++ b/services/ads/java/src/main/resources/application.yml @@ -1,2 +1,12 @@ server: port: ${ADS_SERVER_PORT:3030} + +spring: + datasource: + url: jdbc:postgresql://${POSTGRES_HOST:localhost}:5432/${POSTGRES_USER:postgres} + username: ${POSTGRES_USER:postgres} + password: ${POSTGRES_PASSWORD:postgres} + jpa: + hibernate: + ddl-auto: update + show-sql: true diff --git a/services/ads/java/src/test/resources/application.yml b/services/ads/java/src/test/resources/application.yml new file mode 100644 index 00000000..67da9f11 --- /dev/null +++ b/services/ads/java/src/test/resources/application.yml @@ -0,0 +1,10 @@ +spring: + datasource: + url: jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1 + driver-class-name: org.h2.Driver + username: sa + password: + jpa: + hibernate: + ddl-auto: create-drop + show-sql: false \ No newline at end of file From 4d8156dbe90e8aca0812e2492c712893a15039a6 Mon Sep 17 00:00:00 2001 From: Shawn Potts Date: Tue, 1 Jul 2025 10:10:46 +0100 Subject: [PATCH 2/3] added envs to ads in docker compose files --- docker-compose.dev.yml | 3 +++ docker-compose.yml | 3 +++ 2 files changed, 6 insertions(+) diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index a3e64f66..78d8525e 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -167,6 +167,9 @@ services: depends_on: - dd-agent environment: + - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-postgres} + - POSTGRES_USER=${POSTGRES_USER:-postgres} + - POSTGRES_HOST=postgres - DD_AGENT_HOST=dd-agent - DD_SERVICE=store-ads - DD_VERSION=${DD_VERSION_ADS:-1.0.0} diff --git a/docker-compose.yml b/docker-compose.yml index cf4041a2..9638f957 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -112,6 +112,9 @@ services: depends_on: - dd-agent environment: + - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-postgres} + - POSTGRES_USER=${POSTGRES_USER:-postgres} + - POSTGRES_HOST=postgres - DD_AGENT_HOST=dd-agent - DD_SERVICE=store-ads - DD_ENV=${DD_ENV:-production} From f8a202aeb2e3d23d2e0333b0217f8d6d0f0c8708 Mon Sep 17 00:00:00 2001 From: Shawn Potts Date: Tue, 1 Jul 2025 13:53:44 +0100 Subject: [PATCH 3/3] added depends on for ads service --- docker-compose.dev.yml | 1 + docker-compose.yml | 1 + 2 files changed, 2 insertions(+) diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index 78d8525e..6ab1205f 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -165,6 +165,7 @@ services: build: context: ./services/ads/java depends_on: + - postgres - dd-agent environment: - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-postgres} diff --git a/docker-compose.yml b/docker-compose.yml index 9638f957..2fbd9607 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -110,6 +110,7 @@ services: ads: image: ghcr.io/datadog/storedog/ads-java:${STOREDOG_IMAGE_VERSION:-latest} depends_on: + - postgres - dd-agent environment: - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-postgres}