From c470e24a1cd99179e4397ce7b371f559feaa2837 Mon Sep 17 00:00:00 2001 From: Dan Langford Date: Fri, 24 May 2013 19:23:50 -0600 Subject: [PATCH 1/2] implementing Google Apps status page --- .../getstatus/clouds/GoogleAppsClouds.java | 168 ++++++++++++++++++ 1 file changed, 168 insertions(+) create mode 100644 src/main/java/co/ohba/getstatus/clouds/GoogleAppsClouds.java diff --git a/src/main/java/co/ohba/getstatus/clouds/GoogleAppsClouds.java b/src/main/java/co/ohba/getstatus/clouds/GoogleAppsClouds.java new file mode 100644 index 0000000..6df49f1 --- /dev/null +++ b/src/main/java/co/ohba/getstatus/clouds/GoogleAppsClouds.java @@ -0,0 +1,168 @@ +package co.ohba.getstatus.clouds; + +import co.ohba.getstatus.enums.ResponseType; +import co.ohba.getstatus.enums.Status; +import com.mashape.unirest.http.HttpResponse; +import lombok.Data; +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; +import org.codehaus.jackson.annotate.JsonIgnoreProperties; +import org.codehaus.jackson.map.ObjectMapper; +import org.joda.time.DateTime; + +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.List; + +@Slf4j +public class GoogleAppsClouds { + + public static abstract class AbstractGoogleAppsCloud implements Cloud { + + private static ObjectMapper om = new ObjectMapper(); + private static String urlStr = "http://www.google.com/appsstatus/json/en", + JSONP1 = "dashboard.jsonp(", JSONP2 = ");"; + private static URL url = null; + + private static Response buildJson(String body) throws IOException { + log.debug("response body is {}", body); + + // strip of json-padding + String json = body.substring(JSONP1.length(), body.length() - JSONP2.length()); + log.debug("response json is {}", json); + + return om.readValue(json, Response.class); + } + + @Getter Status status; + @Getter DateTime timestamp; + @Getter ResponseType responseType = ResponseType.TEXT; + + @Override + public URL getUrl() throws MalformedURLException { + if (url == null) { + url = new URL(urlStr); + } + return url; + } + + @Override + public void parse(HttpResponse response, DateTime timestamp) { + this.timestamp = timestamp; + status = Status.OK; + + Response res = null; + try { + res = buildJson(response.getBody()); + } catch (IOException e) { + e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. + status = Status.ERROR; + } + + + + Integer serviceId=null; + for(Response.Service s : res.getServices()){ + if(getServiceName().equals(s.getName())){ + serviceId = s.getId(); + break; + } + } + if(serviceId ==null) { + status=Status.WARNING; + } else { + for(Response.Message m : res.getMessages()){ + if(serviceId.equals(m.getService()) && m.getResolved()!=Boolean.TRUE){ + status=Status.ERROR; + } + } + } + } + + abstract String getServiceName(); + } + + public static class GoogleAppsGmailCloud extends AbstractGoogleAppsCloud { + @Getter String name = "Google-Apps-Gmail"; + @Getter String serviceName = "Gmail"; + } + + public static class GoogleAppsCalendarCloud extends AbstractGoogleAppsCloud { + @Getter String name = "Google-Apps-Calendar"; + @Getter String serviceName = "Google Calendar"; + } + + public static class GoogleAppstalkCloud extends AbstractGoogleAppsCloud { + @Getter String name = "Google-Apps-Talk"; + @Getter String serviceName = "Google Talk"; + } + + public static class GoogleAppsDriveCloud extends AbstractGoogleAppsCloud { + @Getter String name = "Google-Apps-Drive"; + @Getter String serviceName = "Google Drive"; + } + + public static class GoogleAppsDocumentsCloud extends AbstractGoogleAppsCloud { + @Getter String name = "Google-Apps-Documents"; + @Getter String serviceName = "Google Documents"; + } + + public static class GoogleAppsSpreadsheetsCloud extends AbstractGoogleAppsCloud { + @Getter String name = "Google-Apps-Spreadsheets"; + @Getter String serviceName = "Google Spreadsheets"; + } + + public static class GoogleAppsPresentationsCloud extends AbstractGoogleAppsCloud { + @Getter String name = "Google-Apps-Presentations"; + @Getter String serviceName = "Google Presentations"; + } + + public static class GoogleAppsDrawingsCloud extends AbstractGoogleAppsCloud { + @Getter String name = "Google-Apps-Drawings"; + @Getter String serviceName = "Google Drawings"; + } + + public static class GoogleAppsSitesCloud extends AbstractGoogleAppsCloud { + @Getter String name = "Google-Apps-Sites"; + @Getter String serviceName = "Google Sites"; + } + + public static class GoogleAppsGroupsCloud extends AbstractGoogleAppsCloud { + @Getter String name = "Google-Apps-Groups"; + @Getter String serviceName = "Google Groups"; + } + + public static class GoogleAppsAdminControlApiCloud extends AbstractGoogleAppsCloud { + @Getter String name = "Google-Apps-Admin-Control-API"; + @Getter String serviceName = "Admin control panel / API"; + } + + public static class GoogleAppsPostiniCloud extends AbstractGoogleAppsCloud { + @Getter String name = "Google-Apps-Postini"; + @Getter String serviceName = "Postini Services"; + } + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + static class Response { + List services; + List messages; + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + static class Service { + Integer id, sort; + String name; + } + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + static class Message { + Integer service, type; + String pst, message; + Boolean resolved, premier; + } + + } +} From 51780e4cdf572094d7eaa52e4e0bea9a94945522 Mon Sep 17 00:00:00 2001 From: Dan Langford Date: Fri, 24 May 2013 19:30:30 -0600 Subject: [PATCH 2/2] i like this naming convention better --- src/main/java/co/ohba/getstatus/clouds/GoogleAppsClouds.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/co/ohba/getstatus/clouds/GoogleAppsClouds.java b/src/main/java/co/ohba/getstatus/clouds/GoogleAppsClouds.java index 6df49f1..3ce58b7 100644 --- a/src/main/java/co/ohba/getstatus/clouds/GoogleAppsClouds.java +++ b/src/main/java/co/ohba/getstatus/clouds/GoogleAppsClouds.java @@ -134,7 +134,7 @@ public static class GoogleAppsGroupsCloud extends AbstractGoogleAppsCloud { } public static class GoogleAppsAdminControlApiCloud extends AbstractGoogleAppsCloud { - @Getter String name = "Google-Apps-Admin-Control-API"; + @Getter String name = "Google-Apps-AdminControlAPI"; @Getter String serviceName = "Admin control panel / API"; }