1 package net.avcompris.status.web;
2
3 import static com.google.common.base.Preconditions.checkNotNull;
4 import static net.avcompris.status.web.Application.API;
5 import static org.springframework.web.bind.annotation.RequestMethod.GET;
6 import static org.springframework.web.bind.annotation.RequestMethod.POST;
7
8 import javax.servlet.http.HttpServletRequest;
9 import javax.servlet.http.HttpServletResponse;
10
11 import org.apache.commons.logging.Log;
12 import org.springframework.beans.factory.annotation.Autowired;
13 import org.springframework.http.HttpStatus;
14 import org.springframework.http.ResponseEntity;
15 import org.springframework.web.bind.annotation.PathVariable;
16 import org.springframework.web.bind.annotation.RequestBody;
17 import org.springframework.web.bind.annotation.RequestMapping;
18 import org.springframework.web.bind.annotation.RequestParam;
19 import org.springframework.web.bind.annotation.RestController;
20
21 import net.avcompris.commons3.api.exception.ServiceException;
22 import net.avcompris.commons3.client.SessionPropagator;
23 import net.avcompris.commons3.core.CorrelationService;
24 import net.avcompris.commons3.utils.Clock;
25 import net.avcompris.commons3.utils.LogFactory;
26 import net.avcompris.status.api.InlineService;
27 import net.avcompris.status.api.ServiceStatus;
28 import net.avcompris.status.api.ServiceStatusHistory;
29 import net.avcompris.status.api.ServicesStatus;
30 import net.avcompris.status.api.ServicesStatusHistory;
31 import net.avcompris.status.api.StatusConfig;
32 import net.avcompris.status.api.StatusService;
33
34 @RestController
35 public final class StatusController extends MyAbstractController {
36
37 @SuppressWarnings("unused")
38 private static final Log logger = LogFactory.getLog(StatusController.class);
39
40 private final StatusService statusService;
41
42 @Autowired
43 public StatusController(final CorrelationService correlationService, final StatusService statusService,
44 final SessionPropagator sessionPropagator,
45 final Clock clock) {
46
47 super(correlationService, sessionPropagator, clock);
48
49 this.statusService = checkNotNull(statusService, "statusService");
50 }
51
52 @RequestMapping(value = API + "/status/live", method = GET)
53 public ResponseEntity<ServicesStatus> getServicesLiveStatus(final HttpServletRequest request,
54 final HttpServletResponse response,
55 @RequestParam(name = "q", required = false) final String q,
56 @RequestParam(name = "sort", required = false) final String sort,
57 @RequestParam(name = "start", required = false) final Integer start,
58 @RequestParam(name = "limit", required = false) final Integer limit,
59 @RequestParam(name = "expand", required = false) final String expand
60 ) throws ServiceException {
61
62 return wrapNonAuthenticated(request, (correlationId) -> {
63
64 final ServicesStatus status = statusService.getServicesLiveStatus(correlationId);
65
66 return ResponseEntity.status(HttpStatus.OK)
67 .body(status);
68 });
69 }
70
71 @RequestMapping(value = API + "/status/live/{serviceId}", method = GET)
72 public ResponseEntity<ServiceStatus> getServiceLiveStatus(final HttpServletRequest request,
73 final HttpServletResponse response,
74 @PathVariable(name = "serviceId", required = true) final String serviceId
75 ) throws ServiceException {
76
77 return wrapNonAuthenticated(request, (correlationId) -> {
78
79 final ServiceStatus status = statusService.getServiceLiveStatus(correlationId, serviceId);
80
81 return ResponseEntity.status(HttpStatus.OK)
82 .body(status);
83 });
84 }
85
86 @RequestMapping(value = API + "/status/live/{serviceId}", method = POST)
87 public ResponseEntity<ServiceStatus> getInlineServiceLiveStatus(final HttpServletRequest request,
88 final HttpServletResponse response,
89 @PathVariable(name = "serviceId", required = true) final String serviceId,
90 @RequestBody(required = true) final InlineService inlineService
91 ) throws ServiceException {
92
93 return wrapNonAuthenticated(request, (correlationId) -> {
94
95 final ServiceStatus status = statusService.getInlineServiceLiveStatus(correlationId, serviceId,
96 inlineService);
97
98 return ResponseEntity.status(HttpStatus.OK)
99 .body(status);
100 });
101 }
102
103 @RequestMapping(value = API + "/status/history", method = GET)
104 public ResponseEntity<ServicesStatusHistory> getServicesStatusHistory(final HttpServletRequest request,
105 final HttpServletResponse response,
106 @RequestParam(name = "q", required = false) final String q,
107 @RequestParam(name = "sort", required = false) final String sort,
108 @RequestParam(name = "start", required = false) final Integer start,
109 @RequestParam(name = "limit", required = false) final Integer limit,
110 @RequestParam(name = "expand", required = false) final String expand
111 ) throws ServiceException {
112
113 return wrapNonAuthenticated(request, (correlationId) -> {
114
115 final ServicesStatusHistory history = statusService.getServicesStatusHistory(correlationId);
116
117 return ResponseEntity.status(HttpStatus.OK)
118 .body(history);
119 });
120 }
121
122 @RequestMapping(value = API + "/status/history/{serviceId}", method = GET)
123 public ResponseEntity<ServiceStatusHistory> getServiceStatusHistory(final HttpServletRequest request,
124 final HttpServletResponse response,
125 @PathVariable(name = "serviceId", required = true) final String serviceId
126 ) throws ServiceException {
127
128 return wrapNonAuthenticated(request, (correlationId) -> {
129
130 final ServiceStatusHistory history = statusService.getServiceStatusHistory(correlationId, serviceId);
131
132 return ResponseEntity.status(HttpStatus.OK)
133 .body(history);
134 });
135 }
136
137 @RequestMapping(value = API + "/status/config", method = GET)
138 public ResponseEntity<StatusConfig> getStatusConfig(final HttpServletRequest request,
139 final HttpServletResponse response
140 ) throws ServiceException {
141
142 return wrapNonAuthenticated(request, (correlationId) -> {
143
144 final StatusConfig config = statusService.getStatusConfig(correlationId);
145
146 return ResponseEntity.status(HttpStatus.OK)
147 .body(config);
148 });
149 }
150 }