1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package net.anyflow.lannister.httphandler.api;
18
19 import java.util.stream.Collectors;
20
21 import com.fasterxml.jackson.core.JsonProcessingException;
22 import com.fasterxml.jackson.databind.ObjectMapper;
23 import com.google.common.base.Strings;
24
25 import io.netty.handler.codec.http.HttpResponseStatus;
26 import net.anyflow.lannister.http.HttpRequestHandler;
27 import net.anyflow.lannister.session.Session;
28
29 @HttpRequestHandler.Handles(paths = { "api/sessions" }, httpMethods = { "GET" })
30 public class Sessions extends HttpRequestHandler {
31
32 private static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(Sessions.class);
33
34 private String liveString() {
35 try {
36 return new ObjectMapper().writeValueAsString(Session.NEXUS.keySet().stream()
37 .map(c -> Session.NEXUS.get(c)).filter(s -> s.isConnected(false)).collect(Collectors.toList()));
38 }
39 catch (JsonProcessingException e) {
40 logger.error(e.getMessage(), e);
41
42 this.httpResponse().setStatus(HttpResponseStatus.INTERNAL_SERVER_ERROR);
43 return null;
44 }
45 }
46
47 private String allString() {
48 try {
49 return new ObjectMapper().writeValueAsString(
50 Session.NEXUS.keySet().stream().map(c -> Session.NEXUS.get(c)).collect(Collectors.toList()));
51 }
52 catch (JsonProcessingException e) {
53 logger.error(e.getMessage(), e);
54
55 this.httpResponse().setStatus(HttpResponseStatus.INTERNAL_SERVER_ERROR);
56 return null;
57 }
58 }
59
60 @Override
61 public String service() {
62 String filter = Strings.nullToEmpty(httpRequest().parameter("filter"));
63
64 switch (filter) {
65 case "":
66 case "live":
67 return liveString();
68
69 case "all":
70 return allString();
71
72 default:
73 return null;
74 }
75 }
76 }