/** * Copyright 2013-2015 Seagate Technology LLC. * * This Source Code Form is subject to the terms of the Mozilla * Public License, v. 2.0. If a copy of the MPL was not * distributed with this file, You can obtain one at * https://mozilla.org/MP:/2.0/. * * This program is distributed in the hope that it will be useful, * but is provided AS-IS, WITHOUT ANY WARRANTY; including without * the implied warranty of MERCHANTABILITY, NON-INFRINGEMENT or * FITNESS FOR A PARTICULAR PURPOSE. See the Mozilla Public * License for more details. * * See www.openkinetic.org for more project information */ package com.seagate.kinetic.example.heartbeat.rest; import java.io.IOException; import java.util.Date; import java.util.SortedMap; import java.util.logging.Logger; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.eclipse.jetty.server.Request; import org.eclipse.jetty.server.handler.AbstractHandler; /** * Rest Heartbeat handler handles HTTP request. * <p> * The response is a HTML table that contains all the collected kinetic heartbeats. * * @see RestHeartbeatService * * @author chiaming * */ public class HeartbeatHandler extends AbstractHandler { private final static Logger logger = Logger .getLogger(HeartbeatHandler.class.getName()); private HeartbeatCollector hbc = null; public HeartbeatHandler(HeartbeatCollector hbc) { this.hbc = hbc; } @Override public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html;charset=utf-8"); response.setStatus(HttpServletResponse.SC_OK); baseRequest.setHandled(true); response.getWriter().println("<h1>Hearbeat Table</h1>"); response.getWriter().println("<br>update time: " + new Date() + "</br>"); SortedMap <String, MessageContainer> map = hbc.getHeartBeatMap(); int index = 0; String table = "<table border=\"1\" style=\"width:300px\">"; response.getWriter().println(table); response.getWriter().println("<tr>"); response.getWriter().println("<td>Num</td>"); response.getWriter().println("<td>IP Address</td>"); response.getWriter().println("<td>TCP Port</td>"); response.getWriter().println("<td>TLS Port</td>"); response.getWriter().println("<td>Timestamp</td>"); response.getWriter().println("</tr>"); synchronized (this) { for (String key: map.keySet()) { //response.getWriter().println("<br>" + index + ": " + key); response.getWriter().println("<tr>"); response.getWriter().println("<td>" + index +"</td>"); response.getWriter().println("<td>" + map.get(key).getHeartbeatMessage().getNetworkInterfaces().get(0).getIpV4Address() +"</td>"); response.getWriter().println("<td>" + map.get(key).getHeartbeatMessage().getPort() +"</td>"); response.getWriter().println("<td>" + map.get(key).getHeartbeatMessage().getTlsPort() +"</td>"); response.getWriter().println("<td>" + new Date (map.get(key).getTimestamp()) +"</td>"); response.getWriter().println("</tr>"); index ++; } } response.getWriter().println("</table>"); logger.info("total kinetic services collected: " + map.size()); } }