Skip to content
This repository was archived by the owner on Dec 5, 2023. It is now read-only.

Commit fef970e

Browse files
authored
Merge pull request #11 from microservices-demo/add_health_endpoint
Initial checkin for healthcheck
2 parents 038527e + 5daa3fc commit fef970e

File tree

6 files changed

+167
-0
lines changed

6 files changed

+167
-0
lines changed
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package works.weave.socks.cart.configuration;
2+
3+
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
4+
import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration;
5+
import org.springframework.context.annotation.Bean;
6+
import org.springframework.context.annotation.Configuration;
7+
8+
import com.mongodb.MongoClientOptions;
9+
10+
@Configuration
11+
@AutoConfigureBefore(MongoAutoConfiguration.class)
12+
public class MongoConfiguration {
13+
14+
@Bean
15+
public MongoClientOptions optionsProvider() {
16+
MongoClientOptions.Builder optionsBuilder = new MongoClientOptions.Builder();
17+
optionsBuilder.serverSelectionTimeout(10000);
18+
MongoClientOptions options = optionsBuilder.build();
19+
return options;
20+
}
21+
}

src/main/java/works/weave/socks/cart/controllers/CartsController.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import works.weave.socks.cart.cart.CartResource;
1111
import works.weave.socks.cart.entities.Cart;
1212

13+
1314
@RestController
1415
@RequestMapping(path = "/carts")
1516
public class CartsController {
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package works.weave.socks.cart.controllers;
2+
3+
import org.springframework.beans.factory.annotation.Autowired;
4+
import org.springframework.data.mongodb.core.MongoTemplate;
5+
import org.springframework.http.HttpStatus;
6+
import org.springframework.web.bind.annotation.*;
7+
import works.weave.socks.cart.entities.HealthCheck;
8+
9+
import java.util.ArrayList;
10+
import java.util.Calendar;
11+
import java.util.Date;
12+
import java.util.HashMap;
13+
import java.util.List;
14+
import java.util.Map;
15+
16+
@RestController
17+
public class HealthCheckController {
18+
19+
@Autowired
20+
private MongoTemplate mongoTemplate;
21+
22+
@ResponseStatus(HttpStatus.OK)
23+
@RequestMapping(method = RequestMethod.GET, path = "/health")
24+
public
25+
@ResponseBody
26+
Map<String, List<HealthCheck>> getHealth() {
27+
Map<String, List<HealthCheck>> map = new HashMap<String, List<HealthCheck>>();
28+
List<HealthCheck> healthChecks = new ArrayList<HealthCheck>();
29+
Date dateNow = Calendar.getInstance().getTime();
30+
31+
HealthCheck app = new HealthCheck("cart", "OK", dateNow);
32+
HealthCheck database = new HealthCheck("cart-db", "OK", dateNow);
33+
34+
try {
35+
mongoTemplate.executeCommand("{ buildInfo: 1 }");
36+
} catch (Exception e) {
37+
database.setStatus("err");
38+
}
39+
40+
healthChecks.add(app);
41+
healthChecks.add(database);
42+
43+
map.put("health", healthChecks);
44+
return map;
45+
}
46+
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package works.weave.socks.cart.entities;
2+
3+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
4+
import com.fasterxml.jackson.annotation.JsonFormat;
5+
6+
import java.util.Calendar;
7+
import java.util.Date;
8+
9+
@JsonIgnoreProperties(ignoreUnknown = true)
10+
public class HealthCheck {
11+
private String service;
12+
private String status;
13+
14+
@JsonFormat(pattern="yyyy-MM-dd'T'HH:mm:ss.SSSXXX")
15+
private Date date = Calendar.getInstance().getTime();
16+
17+
public HealthCheck() {
18+
19+
}
20+
21+
public HealthCheck(String service, String status, Date date) {
22+
this.service = service;
23+
this.status = status;
24+
this.date = date;
25+
}
26+
27+
@Override
28+
public String toString() {
29+
return "HealthCheck{" +
30+
"service='" + service + '\'' +
31+
", status='" + status + '\'' +
32+
", date='" + date +
33+
'}';
34+
}
35+
36+
public String getService() {
37+
return service;
38+
}
39+
40+
public void setService(String service) {
41+
this.service = service;
42+
}
43+
44+
public String getStatus() {
45+
return status;
46+
}
47+
48+
public void setStatus(String status) {
49+
this.status = status;
50+
}
51+
52+
public Date getDate() {
53+
return date;
54+
}
55+
56+
public void setDate(Date date) {
57+
this.date = date;
58+
}
59+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
server.port=${port:8081}
22
spring.data.mongodb.uri=mongodb://${db:cart-db}:27017/data
3+
endpoints.health.enabled=false
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package works.weave.socks.cart.controllers;
2+
3+
import org.junit.Test;
4+
import org.junit.runner.RunWith;
5+
import org.springframework.beans.factory.annotation.Autowired;
6+
import org.springframework.context.annotation.Bean;
7+
import org.springframework.context.annotation.Configuration;
8+
import org.springframework.test.context.ContextConfiguration;
9+
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
10+
11+
import static org.hamcrest.CoreMatchers.equalTo;
12+
import static org.hamcrest.CoreMatchers.is;
13+
import static org.hamcrest.collection.IsCollectionWithSize.hasSize;
14+
import static org.hamcrest.collection.IsEmptyCollection.empty;
15+
import static org.hamcrest.collection.IsIterableContainingInAnyOrder.containsInAnyOrder;
16+
import static org.junit.Assert.assertThat;
17+
18+
import works.weave.socks.cart.entities.HealthCheck;
19+
20+
import java.util.ArrayList;
21+
import java.util.Calendar;
22+
import java.util.Date;
23+
import java.util.HashMap;
24+
import java.util.List;
25+
import java.util.Map;
26+
27+
@RunWith(SpringJUnit4ClassRunner.class)
28+
@ContextConfiguration
29+
public class UnitHealthCheckController {
30+
31+
@Autowired
32+
private HealthCheckController healthCheckController;
33+
34+
@Test
35+
public void shouldGetHealth() {
36+
Map<String, List<HealthCheck>> results = healthCheckController.getHealth();
37+
assertThat(results.get("health").size(), is(equalTo(2)));
38+
}
39+
}

0 commit comments

Comments
 (0)