package com.buglabs.app.bugdash2.controller; import java.net.Inet4Address; import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.util.Enumeration; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.buglabs.app.bugdash2.Activator; import com.buglabs.app.bugdash2.LogManager; import com.buglabs.app.bugdash2.ShellUtil; import com.buglabs.osgi.sewing.pub.SewingController; import com.buglabs.osgi.sewing.pub.util.RequestParameters; import freemarker.template.SimpleHash; import freemarker.template.SimpleScalar; import freemarker.template.TemplateModelRoot; public abstract class OverviewController extends SewingController { public abstract String getBuildInfoCommand(); public abstract String getKernelInfoCommand(); public abstract String getDiskUsageCommand(); public abstract String getBatteryInfoPath(); public abstract String getHostName(); public String getTemplateName() { return "overview.fml"; } public TemplateModelRoot get(RequestParameters params, HttpServletRequest req, HttpServletResponse resp) { TemplateModelRoot root = new SimpleHash(); root.put("rootfs_info", getSoftwareInfo()); root.put("device_name", getDeviceName()); root.put("kernel_info", getKernelInfo()); root.put("disk_info", getDiskUsage()); root.put("network_info", getNetworkInfo()); return root; } /** * @return BUG SW version info */ private SimpleScalar getSoftwareInfo() { String result = ""; SimpleScalar output = ShellUtil.getSimpleScalar(getBuildInfoCommand()); String str_output = output.toString(); // TODO: would be more accurate to use regexp String[] buildinfo = str_output.split("\n"); if (str_output.indexOf("bug-image-production") > -1) { // check if it's older format result += buildinfo[2] + "<br />"; result += "<span class='quiet'>" + buildinfo[1] + "</span>"; } else { String[] line; for (int i=0; i<buildinfo.length; i++) { line = buildinfo[i].split(":"); if (line[0].equals("Version")) { result += buildinfo[i] + "<br />"; } else if (line[0].equals("Build Time") || line[0].equals("Revision")) { result += "<span class='quiet'>" + buildinfo[i] + "</span><br />"; } } } return new SimpleScalar(result); } private SimpleScalar getDeviceName() { String output = ShellUtil.getSimpleScalar(getHostName()).toString(); return new SimpleScalar(output.replace("\n","")); } /** * @return kernel info */ private SimpleScalar getKernelInfo() { String result = ""; SimpleScalar output = ShellUtil.getSimpleScalar(getKernelInfoCommand()); String[] info = output.toString().split(" "); if (info.length > 3) result += info[0] + " " + info[1] + " " + info[2]; return new SimpleScalar(result); } private SimpleScalar getDiskUsage() { String result = ""; SimpleScalar output = ShellUtil.getSimpleScalar(getDiskUsageCommand()); String[] diskinfo = output.toString().split("\n"); if (diskinfo.length > 1) { String[] usageinfo = diskinfo[1].trim().split(" "); result += "<table>"; if (usageinfo.length > 5) { result += "<tr><td class='quiet'>Total size</td><td>" + usageinfo[1] + "</td>"; result += "<td class='quiet'>Used</td><td>" + usageinfo[2] + "</td></tr>"; result += "<tr><td class='quiet'>Available</td><td>" + usageinfo[3] + "</td>"; result += "<td class='quiet'>Used %</td><td>" + usageinfo[4] +"</td></tr>"; } result += "</table>"; } // AK 2010-04-08 added battery life // JC, updated path for 2.0 result += "<br /><br />Battery life: " + Activator.getBatteryLife(getBatteryInfoPath()) + "%"; return new SimpleScalar(result); } private SimpleScalar getNetworkInfo() { String result = ""; try { Enumeration networkInterfaces = NetworkInterface.getNetworkInterfaces(); while (networkInterfaces.hasMoreElements()) { final NetworkInterface ni = (NetworkInterface) networkInterfaces.nextElement(); result += ni.getDisplayName() + ": "; Enumeration addrss = ni.getInetAddresses(); while (addrss.hasMoreElements()) { InetAddress addr = (InetAddress) addrss.nextElement(); if (addr instanceof Inet4Address) { String ipaddr = addr.toString().substring(1); result += ipaddr; } } result += "<br />"; } } catch (SocketException e) { LogManager.logWarning(e.getMessage()); } return new SimpleScalar(result); } }