package cz.cuni.mff.d3s.been.detectors; import java.io.File; import java.lang.management.ManagementFactory; import java.lang.management.OperatingSystemMXBean; import java.lang.reflect.Method; import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.util.Enumeration; import org.apache.commons.collections.EnumerationUtils; import cz.cuni.mff.d3s.been.core.ri.*; /** * * Java based fallback detector. * * @author Kuba Brecka */ public class JavaDetector { /** * Detects all Java related info * * @return Java related info */ public Java detectJava() { Java java = new Java(); java.setVersion(System.getProperty("java.version")); java.setVendor(System.getProperty("java.vendor")); java.setVersion(System.getProperty("java.version")); java.setRuntimeName(System.getProperty("java.runtime.name")); java.setVMVersion(System.getProperty("java.vm.version")); java.setVMVendor(System.getProperty("java.vm.vendor")); java.setRuntimeVersion(System.getProperty("java.runtime.version")); java.setSpecificationVersion(System.getProperty("java.specification.version")); return java; } /** * Operation system info * * @param runtimeInfo * where to fill it out */ public void detectOperatingSystem(RuntimeInfo runtimeInfo) { OperatingSystem os = new OperatingSystem(); os.setName(System.getProperty("os.name")); os.setArch(System.getProperty("os.arch")); os.setVersion(System.getProperty("os.version")); runtimeInfo.setOperatingSystem(os); } /** * Hardware info * * @param runtimeInfo * where to fill it out */ public void detectHardware(RuntimeInfo runtimeInfo) { Hardware hw = new Hardware(); Memory mem = new Memory(); mem.setRam(getTotalMemoryFromReflection()); hw.setMemory(mem); for (int i = 0; i < Runtime.getRuntime().availableProcessors(); i++) { Cpu cpu = new Cpu(); hw.getCpu().add(cpu); } try { Enumeration<NetworkInterface> ifs = NetworkInterface.getNetworkInterfaces(); for (Object i : EnumerationUtils.toList(ifs)) { NetworkInterface iface = (NetworkInterface) i; cz.cuni.mff.d3s.been.core.ri.NetworkInterface networkInterface = new cz.cuni.mff.d3s.been.core.ri.NetworkInterface(); networkInterface.setName(iface.getName()); networkInterface.setMtu(iface.getMTU()); for (Object o : EnumerationUtils.toList(iface.getInetAddresses())) { InetAddress a = (InetAddress) o; networkInterface.getAddress().add(a.getHostAddress()); } hw.getNetworkInterface().add(networkInterface); } } catch (SocketException e) { // do nothing } runtimeInfo.setHardware(hw); } /** * File system info * * @param runtimeInfo * where to fill it out */ public void detectFilesystems(RuntimeInfo runtimeInfo) { for (File root : File.listRoots()) { Filesystem f = new Filesystem(); f.setDirectory(root.getAbsolutePath()); f.setFree(root.getFreeSpace()); f.setTotal(root.getTotalSpace()); runtimeInfo.getFilesystem().add(f); } } private long getTotalMemoryFromReflection() { OperatingSystemMXBean os = ManagementFactory.getOperatingSystemMXBean(); try { Method a = os.getClass().getMethod("getTotalPhysicalMemorySize"); a.setAccessible(true); Object o = a.invoke(os); return (Long) o; } catch (Throwable e) { // do nothing } return 0; } private long getFreeMemoryFromReflection() { OperatingSystemMXBean os = ManagementFactory.getOperatingSystemMXBean(); try { Method a = os.getClass().getMethod("getFreePhysicalMemorySize"); a.setAccessible(true); Object o = a.invoke(os); return (Long) o; } catch (Throwable e) { // do nothing } return 0; } /** * Generates a monitoring sample. * * @return newly generated sample */ public MonitorSample generateSample() { OperatingSystemMXBean os = ManagementFactory.getOperatingSystemMXBean(); MonitorSample sample = new MonitorSample(); LoadAverage la = new LoadAverage(); la.setLoad1(os.getSystemLoadAverage()); sample.setLoadAverage(la); sample.setFreeMemory(getFreeMemoryFromReflection()); return sample; } }