jonahkh
2020-05-13 4829e49af4e2cd4d8c8dfe0c215bd9f3d65efdfb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
package com.redhat.developer.demos;
 
import org.apache.camel.Exchange;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.model.rest.RestBindingMode;
import org.springframework.stereotype.Component;
 
@Component("RecommendationCamelRoute")
public class RecommendationCamelRoute extends RouteBuilder {
 
    private static final String RESPONSE_STRING_FORMAT = "recommendation v1 from '%s': %d\n";
 
    private static final String HOSTNAME = parseContainerIdFromHostname(
            System.getenv().getOrDefault("HOSTNAME", "unknown")
    );
 
    static String parseContainerIdFromHostname(String hostname) {
        return hostname.replaceAll("recommendation-v\\d+-", "");
    }
 
    /**
     * Counter to help us see the lifecycle
     */
    private int count = 0;
 
    /**
     * Flag for throwing a 503 when enabled
     */
    private boolean misbehave = false;
 
 
    @Override
    public void configure() throws Exception {
        restConfiguration()
                .component("servlet")
                .enableCORS(true)
                .contextPath("/")
                .bindingMode(RestBindingMode.auto);
 
        rest("/").get().produces("text/plain")
                .route().routeId("root")
//                .to("direct:timeout")
                .choice()
                    .when(method("RecommendationCamelRoute", "isMisbehave"))
                        .to("direct:misbehave")
                    .otherwise()
                        .to("direct:response")
                .endChoice()
        .endRest();
 
        rest("/misbehave").get().produces("text/plain")
                .route().routeId("misbehave")
                .process(exchange -> {
                    this.misbehave = true;
                    log.info("'misbehave' has been set to 'true'");
                    exchange.getOut().setBody("Following requests to '/' will return a 503\n");
                })
        .endRest();
 
 
        rest("/behave").get().produces("text/plain")
                .route().routeId("behave")
                .process(exchange -> {
                    this.misbehave = false;
                    log.info("'misbehave' has been set to 'false'");
                    exchange.getOut().setBody("Following requests to '/' will return a 200\n");
                })
        .endRest();
 
        from("direct:response")
                .process(exchange -> {
                   count++;
                   log.info(String.format("recommendation request from %s: %d", HOSTNAME, count));
                   exchange.getOut().setBody(String.format(RESPONSE_STRING_FORMAT, HOSTNAME, count));
                }).end();
 
        from("direct:misbehave")
                .log(String.format("Misbehaving %d", count))
                .setHeader(Exchange.HTTP_RESPONSE_CODE, constant(503))
                .transform(simpleF("recommendation misbehavior from '%s'\\n", HOSTNAME))
                .process(exchange -> {
                    count = 0;
                }).end();
 
        from("direct:timeout")
                .process(exchange -> {Thread.sleep(3000);}).end();
    }
 
    public boolean isMisbehave() {
        return misbehave;
    }
}