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:
|
||||
- name: PORT
|
||||
value: "9555"
|
||||
- name: LISTEN_ADDR
|
||||
value: "0.0.0.0"
|
||||
- name: ADS_URL
|
||||
value: "http://localhost:10010/ads/"
|
||||
resources:
|
||||
requests:
|
||||
cpu: 200m
|
||||
|
|
|
@ -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"]
|
||||
|
|
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.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<Ad> 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<maxAttempts; i++) {
|
||||
try {
|
||||
StackdriverTraceExporter.createAndRegister(
|
||||
StackdriverTraceConfiguration.builder().build());
|
||||
StackdriverStatsExporter.createAndRegister(
|
||||
StackdriverStatsConfiguration.builder()
|
||||
.setExportInterval(Duration.create(15, 0))
|
||||
.build());
|
||||
} catch (Exception e) {
|
||||
if (i==(maxAttempts-1)) {
|
||||
logger.log(Level.WARNING, "Failed to register Stackdriver Exporter." +
|
||||
" 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.
|
||||
|
|
|
@ -142,17 +142,32 @@ public class AdServiceClient {
|
|||
|
||||
// Registers Stackdriver exporters.
|
||||
if (cloudProjectId != null) {
|
||||
try {
|
||||
StackdriverTraceExporter.createAndRegister(
|
||||
StackdriverTraceConfiguration.builder().setProjectId(cloudProjectId).build());
|
||||
StackdriverStatsExporter.createAndRegister(
|
||||
StackdriverStatsConfiguration.builder()
|
||||
.setProjectId(cloudProjectId)
|
||||
.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());
|
||||
long sleepTime = 10; /* seconds */
|
||||
int maxAttempts = 3;
|
||||
|
||||
for (int i=0; i<maxAttempts; i++) {
|
||||
try {
|
||||
StackdriverTraceExporter.createAndRegister(
|
||||
StackdriverTraceConfiguration.builder().setProjectId(cloudProjectId).build());
|
||||
StackdriverStatsExporter.createAndRegister(
|
||||
StackdriverStatsConfiguration.builder()
|
||||
.setProjectId(cloudProjectId)
|
||||
.setExportInterval(Duration.create(15, 0))
|
||||
.build());
|
||||
} catch (Exception e) {
|
||||
if (i==(maxAttempts-1)) {
|
||||
logger.log(Level.WARNING, "Failed to register Stackdriver Exporter." +
|
||||
" 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