View Javadoc
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 }