diff --git a/kubernetes-manifests/adservice.yaml b/kubernetes-manifests/adservice.yaml index 11da28e..a990219 100644 --- a/kubernetes-manifests/adservice.yaml +++ b/kubernetes-manifests/adservice.yaml @@ -31,10 +31,6 @@ spec: env: - name: PORT value: "9555" - - name: LISTEN_ADDR - value: "0.0.0.0" - - name: ADS_URL - value: "http://localhost:10010/ads/" resources: requests: cpu: 200m diff --git a/src/adservice/Dockerfile b/src/adservice/Dockerfile index fe65dad..d65b040 100644 --- a/src/adservice/Dockerfile +++ b/src/adservice/Dockerfile @@ -2,6 +2,9 @@ FROM openjdk:8 RUN apt-get update && apt-get install net-tools telnet WORKDIR /app + +# Next three steps are for caching dependency downloads +# to improve subsequent docker build. COPY ["build.gradle", "gradlew", "./"] COPY gradle gradle RUN ./gradlew downloadRepos @@ -10,4 +13,3 @@ COPY . . RUN ./gradlew installDist EXPOSE 9555 ENTRYPOINT ["/app/build/install/hipstershop/bin/AdService"] -#ENTRYPOINT ["tail", "-f", "/dev/null"] diff --git a/src/adservice/README.md b/src/adservice/README.md new file mode 100644 index 0000000..6d41ec3 --- /dev/null +++ b/src/adservice/README.md @@ -0,0 +1,26 @@ +# Ad Service + +The Ad service provides advertisement based on context keys. If no context keys are provided then it returns random ads. + +## Local Build + +The Ad service uses gradlew to compile/install/distribute. Gradle wrapper is already part of the source code. To build Ad Service, run +``` + cd src/adservice; ./gradlew installDist +``` +It will create executable script src/adservice/build/install/hipstershop/bin/AdService + +### Upgrade gradle version +If you need to upgrade the version of gradle then run +``` + cd src/adservice ; ./gradlew wrapper --gradle-version +``` + +## Docker Build + +From repository root, run: + +``` +docker build --file src/adservice/Dockerfile . +``` + diff --git a/src/adservice/src/main/java/hipstershop/AdService.java b/src/adservice/src/main/java/hipstershop/AdService.java index 96121ea..9a913ce 100644 --- a/src/adservice/src/main/java/hipstershop/AdService.java +++ b/src/adservice/src/main/java/hipstershop/AdService.java @@ -44,6 +44,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Random; +import java.util.concurrent.TimeUnit; import java.util.logging.Level; import java.util.logging.Logger; @@ -101,6 +102,7 @@ public class AdService { Span span = tracer.getCurrentSpan(); span.putAttribute("method", AttributeValue.stringAttributeValue("getAds")); List ads = new ArrayList<>(); + logger.info("received ad request (context_words=" + req.getContextKeysCount() + ")"); if (req.getContextKeysCount() > 0) { span.addAnnotation( "Constructing Ads using context", @@ -162,13 +164,12 @@ public class AdService { } static void initializeAds() { - String adsUrl = System.getenv("ADS_URL"); - cacheMap.put("camera", Ad.newBuilder().setRedirectUrl(adsUrl + "/camera") - .setText("MyPro camera for sale. 50% off.").build()); - cacheMap.put("bike", Ad.newBuilder().setRedirectUrl(adsUrl + "/bike") - .setText("ZoomZoom bike for sale. 10% off.").build()); - cacheMap.put("kitchen", Ad.newBuilder().setRedirectUrl(adsUrl + "/kitchen") - .setText("CutPro knife for sale. Buy one, get second set for free").build()); + cacheMap.put("camera", Ad.newBuilder().setRedirectUrl( "/product/2ZYFJ3GM2N") + .setText("Film camera for sale. 50% off.").build()); + cacheMap.put("bike", Ad.newBuilder().setRedirectUrl("/product/9SIQT8TOJO") + .setText("City Bike for sale. 10% off.").build()); + cacheMap.put("kitchen", Ad.newBuilder().setRedirectUrl("/product/1YMWWN1N4O") + .setText("Home Barista kitchen kit for sale. Buy one, get second kit for free").build()); logger.info("Default Ads initialized"); } @@ -183,17 +184,31 @@ public class AdService { // Registers logging trace exporter. LoggingTraceExporter.register(); + long sleepTime = 10; /* seconds */ + int maxAttempts = 3; - try { - StackdriverTraceExporter.createAndRegister( - StackdriverTraceConfiguration.builder().build()); - StackdriverStatsExporter.createAndRegister( - StackdriverStatsConfiguration.builder() - .setExportInterval(Duration.create(15, 0)) - .build()); - } catch (Exception e) { - logger.log(Level.WARNING, "Failed to register Stackdriver Exporter." + - " Census tracing and stats data will not reported to Stackdriver. Error message: " + e.toString()); + for (int i=0; i