Fixed review comments.
1. Changed Ad redirect urls to products. 2. Removed leftovers from Dockerfile/kub*manifests*yaml 3. Added retry for StackDriver. 4. Added log for Ad request. 5. Added comment for gradle caching. 6. Added README.md to src/adservice.
This commit is contained in:
parent
8ad27fb16a
commit
f5b00ea47d
5 changed files with 87 additions and 33 deletions
|
@ -31,10 +31,6 @@ spec:
|
||||||
env:
|
env:
|
||||||
- name: PORT
|
- name: PORT
|
||||||
value: "9555"
|
value: "9555"
|
||||||
- name: LISTEN_ADDR
|
|
||||||
value: "0.0.0.0"
|
|
||||||
- name: ADS_URL
|
|
||||||
value: "http://localhost:10010/ads/"
|
|
||||||
resources:
|
resources:
|
||||||
requests:
|
requests:
|
||||||
cpu: 200m
|
cpu: 200m
|
||||||
|
|
|
@ -2,6 +2,9 @@
|
||||||
FROM openjdk:8
|
FROM openjdk:8
|
||||||
RUN apt-get update && apt-get install net-tools telnet
|
RUN apt-get update && apt-get install net-tools telnet
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
|
# Next three steps are for caching dependency downloads
|
||||||
|
# to improve subsequent docker build.
|
||||||
COPY ["build.gradle", "gradlew", "./"]
|
COPY ["build.gradle", "gradlew", "./"]
|
||||||
COPY gradle gradle
|
COPY gradle gradle
|
||||||
RUN ./gradlew downloadRepos
|
RUN ./gradlew downloadRepos
|
||||||
|
@ -10,4 +13,3 @@ COPY . .
|
||||||
RUN ./gradlew installDist
|
RUN ./gradlew installDist
|
||||||
EXPOSE 9555
|
EXPOSE 9555
|
||||||
ENTRYPOINT ["/app/build/install/hipstershop/bin/AdService"]
|
ENTRYPOINT ["/app/build/install/hipstershop/bin/AdService"]
|
||||||
#ENTRYPOINT ["tail", "-f", "/dev/null"]
|
|
||||||
|
|
26
src/adservice/README.md
Normal file
26
src/adservice/README.md
Normal file
|
@ -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 <new-version>
|
||||||
|
```
|
||||||
|
|
||||||
|
## Docker Build
|
||||||
|
|
||||||
|
From repository root, run:
|
||||||
|
|
||||||
|
```
|
||||||
|
docker build --file src/adservice/Dockerfile .
|
||||||
|
```
|
||||||
|
|
|
@ -44,6 +44,7 @@ import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
@ -101,6 +102,7 @@ public class AdService {
|
||||||
Span span = tracer.getCurrentSpan();
|
Span span = tracer.getCurrentSpan();
|
||||||
span.putAttribute("method", AttributeValue.stringAttributeValue("getAds"));
|
span.putAttribute("method", AttributeValue.stringAttributeValue("getAds"));
|
||||||
List<Ad> ads = new ArrayList<>();
|
List<Ad> ads = new ArrayList<>();
|
||||||
|
logger.info("received ad request (context_words=" + req.getContextKeysCount() + ")");
|
||||||
if (req.getContextKeysCount() > 0) {
|
if (req.getContextKeysCount() > 0) {
|
||||||
span.addAnnotation(
|
span.addAnnotation(
|
||||||
"Constructing Ads using context",
|
"Constructing Ads using context",
|
||||||
|
@ -162,13 +164,12 @@ public class AdService {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void initializeAds() {
|
static void initializeAds() {
|
||||||
String adsUrl = System.getenv("ADS_URL");
|
cacheMap.put("camera", Ad.newBuilder().setRedirectUrl( "/product/2ZYFJ3GM2N")
|
||||||
cacheMap.put("camera", Ad.newBuilder().setRedirectUrl(adsUrl + "/camera")
|
.setText("Film camera for sale. 50% off.").build());
|
||||||
.setText("MyPro camera for sale. 50% off.").build());
|
cacheMap.put("bike", Ad.newBuilder().setRedirectUrl("/product/9SIQT8TOJO")
|
||||||
cacheMap.put("bike", Ad.newBuilder().setRedirectUrl(adsUrl + "/bike")
|
.setText("City Bike for sale. 10% off.").build());
|
||||||
.setText("ZoomZoom bike for sale. 10% off.").build());
|
cacheMap.put("kitchen", Ad.newBuilder().setRedirectUrl("/product/1YMWWN1N4O")
|
||||||
cacheMap.put("kitchen", Ad.newBuilder().setRedirectUrl(adsUrl + "/kitchen")
|
.setText("Home Barista kitchen kit for sale. Buy one, get second kit for free").build());
|
||||||
.setText("CutPro knife for sale. Buy one, get second set for free").build());
|
|
||||||
logger.info("Default Ads initialized");
|
logger.info("Default Ads initialized");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -183,7 +184,10 @@ public class AdService {
|
||||||
|
|
||||||
// Registers logging trace exporter.
|
// Registers logging trace exporter.
|
||||||
LoggingTraceExporter.register();
|
LoggingTraceExporter.register();
|
||||||
|
long sleepTime = 10; /* seconds */
|
||||||
|
int maxAttempts = 3;
|
||||||
|
|
||||||
|
for (int i=0; i<maxAttempts; i++) {
|
||||||
try {
|
try {
|
||||||
StackdriverTraceExporter.createAndRegister(
|
StackdriverTraceExporter.createAndRegister(
|
||||||
StackdriverTraceConfiguration.builder().build());
|
StackdriverTraceConfiguration.builder().build());
|
||||||
|
@ -192,8 +196,19 @@ public class AdService {
|
||||||
.setExportInterval(Duration.create(15, 0))
|
.setExportInterval(Duration.create(15, 0))
|
||||||
.build());
|
.build());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
if (i==(maxAttempts-1)) {
|
||||||
logger.log(Level.WARNING, "Failed to register Stackdriver Exporter." +
|
logger.log(Level.WARNING, "Failed to register Stackdriver Exporter." +
|
||||||
" Census tracing and stats data will not reported to Stackdriver. Error message: " + e.toString());
|
" Tracing and Stats data will not reported to Stackdriver. Error message: " + e
|
||||||
|
.toString());
|
||||||
|
} else {
|
||||||
|
logger.info("Attempt to register Stackdriver Exporter in " + sleepTime + " seconds ");
|
||||||
|
try {
|
||||||
|
Thread.sleep(TimeUnit.SECONDS.toMillis(sleepTime));
|
||||||
|
} catch (Exception se) {
|
||||||
|
logger.log(Level.WARNING, "Exception while sleeping" + se.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Register Prometheus exporters and export metrics to a Prometheus HTTPServer.
|
// Register Prometheus exporters and export metrics to a Prometheus HTTPServer.
|
||||||
|
|
|
@ -142,6 +142,10 @@ public class AdServiceClient {
|
||||||
|
|
||||||
// Registers Stackdriver exporters.
|
// Registers Stackdriver exporters.
|
||||||
if (cloudProjectId != null) {
|
if (cloudProjectId != null) {
|
||||||
|
long sleepTime = 10; /* seconds */
|
||||||
|
int maxAttempts = 3;
|
||||||
|
|
||||||
|
for (int i=0; i<maxAttempts; i++) {
|
||||||
try {
|
try {
|
||||||
StackdriverTraceExporter.createAndRegister(
|
StackdriverTraceExporter.createAndRegister(
|
||||||
StackdriverTraceConfiguration.builder().setProjectId(cloudProjectId).build());
|
StackdriverTraceConfiguration.builder().setProjectId(cloudProjectId).build());
|
||||||
|
@ -151,8 +155,19 @@ public class AdServiceClient {
|
||||||
.setExportInterval(Duration.create(15, 0))
|
.setExportInterval(Duration.create(15, 0))
|
||||||
.build());
|
.build());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
if (i==(maxAttempts-1)) {
|
||||||
logger.log(Level.WARNING, "Failed to register Stackdriver Exporter." +
|
logger.log(Level.WARNING, "Failed to register Stackdriver Exporter." +
|
||||||
" Census tracing and stats data will not reported to Stackdriver. Error message: " + e.toString());
|
" Tracing and Stats data will not reported to Stackdriver. Error message: " + e
|
||||||
|
.toString());
|
||||||
|
} else {
|
||||||
|
logger.info("Attempt to register Stackdriver Exporter in " + sleepTime + " seconds");
|
||||||
|
try {
|
||||||
|
Thread.sleep(TimeUnit.SECONDS.toMillis(sleepTime));
|
||||||
|
} catch (Exception se) {
|
||||||
|
logger.log(Level.WARNING, "Exception while sleeping" + e.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue