Sigar-硬件操纵&监控

1:Sigar用作windows/linux的硬件资源监控,可嵌入到Java程序中.

2: 下载地址: http://sourceforge.net/projects/sigar/files/sigar/1.6/

3: 下载后解压,将sigar.jar 及连接文件:

sigar-amd64-winnt.dll,sigar-x86-winnt.dll,libsigar-amd64-linux.so,libsigar-x86-linux.so

放到webapp\lib目录下

4:查看代码:

hyperic-sigar-1.6.4\bindings\java\examples\java

5:将代码复制到eclipse中执行即可.

示例代码:

Controller:

import java.text.DecimalFormat;
import java.util.Map;

import org.hyperic.sigar.CpuPerc;
import org.hyperic.sigar.FileSystem;
import org.hyperic.sigar.FileSystemUsage;
import org.hyperic.sigar.Mem;
import org.hyperic.sigar.NetFlags;
import org.hyperic.sigar.NetInterfaceConfig;
import org.hyperic.sigar.OperatingSystem;
import org.hyperic.sigar.Sigar;
import org.hyperic.sigar.Swap;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;

import com.google.common.collect.Maps;

@Controller 
@RequestMapping("hardware")
public class HardwareController {
	 

	@RequestMapping("monitor")
	public String monitor(ModelMap modelMap) {
		try {
			Map<String, Map<String, String>> allData = Maps.newLinkedHashMap();
			modelMap.put("allData", allData);
			// 总信息
			Sigar sigar = new Sigar();
			double divider2 = 1024 * 1024;
			double divider3 = 1024 * 1024 * 1024;
			DecimalFormat df = new DecimalFormat("#0.00");
			
			// 系统信息
			OperatingSystem os = OperatingSystem.getInstance();
			Map<String, String> sysData = Maps.newLinkedHashMap();
			
			sysData.put("系统名称:", os.getName());
			sysData.put("系统位数:", os.getDataModel());
			sysData.put("系统架构:", os.getArch());
			
			allData.put("系统信息:", sysData);
			// CPU信息
			CpuPerc[] cpus = sigar.getCpuPercList();
			Map<String, String> cpuData = Maps.newLinkedHashMap();
			for(int i=0;i<cpus.length;i++) {
				cpuData.put("CPU" + i, CpuPerc.format(cpus[i].getCombined()));
			}
			allData.put("CPU信息:", cpuData);
			
			// 内存信息
			Mem mem = sigar.getMem();
			Map<String, String> memData = Maps.newLinkedHashMap();
			double memTotal = ((double)mem.getTotal() / divider3);
			double memUsed = ((double)mem.getUsed() / divider3);
			double memFree = ((double)mem.getFree() / divider3);
			memData.put("内存总数", df.format(memTotal) + "G");
			memData.put("内存使用量", df.format(memUsed) + "G");
			memData.put("内存剩余量", df.format(memFree) + "G");
			
			allData.put("内存信息:", memData);
			
			// 交换区信息
			Swap swap = sigar.getSwap();
			Map<String, String> swapData = Maps.newLinkedHashMap();
			
			double swapTotal = ((double)swap.getTotal() / divider3);
			double swapUsed = ((double)swap.getUsed() / divider3);
			double swapFree = ((double)swap.getFree() / divider3);
			swapData.put("交换区总数",   df.format(swapTotal) + "G");
			swapData.put("交换区使用量", df.format(swapFree) + "G");
			swapData.put("交换区剩余量", df.format(swapUsed) + "G");
			
			allData.put("交换区信息:", swapData);
			
			// 硬盘信息:
			FileSystem fileSystems[] = sigar.getFileSystemList();
			Map<String, String> fileSystemData = Maps.newLinkedHashMap();
			
			for(FileSystem fileSystem : fileSystems) {
				if(!"cdrom".equals(fileSystem.getTypeName())) {
					fileSystemData.put("<br/>硬盘[" + fileSystem.getDirName() + "]信息", " ");
					FileSystemUsage fileSystemUsage = sigar.getFileSystemUsage(fileSystem.getDirName());
					fileSystemData.put("硬盘[" + fileSystem.getDirName() + "]总量", df.format((double)fileSystemUsage.getTotal()/divider2) + "G");     
					fileSystemData.put("硬盘[" + fileSystem.getDirName() + "]使用量", df.format((double)fileSystemUsage.getUsed()/divider2) + "G");
					fileSystemData.put("硬盘[" + fileSystem.getDirName() + "]可用量", df.format((double)fileSystemUsage.getAvail()/divider2) + "G");
				}
			}
			allData.put("硬盘信息:", fileSystemData);
			
			String[] netinterfaces = sigar.getNetInterfaceList();
			Map<String, String> netinterfaceData = Maps.newLinkedHashMap();
			
			for (int i = 0; i < netinterfaces.length; i++) {
				NetInterfaceConfig cfg = sigar.getNetInterfaceConfig(netinterfaces[i]);
				if (NetFlags.LOOPBACK_ADDRESS.equals(cfg.getAddress()) || (cfg.getFlags() & NetFlags.IFF_LOOPBACK) != 0 || NetFlags.NULL_HWADDR.equals(cfg.getHwaddr())) {continue;}
				netinterfaceData.put("<br/>网卡[" + cfg.getName() + "]信息", " ");
				netinterfaceData.put("名称" + cfg.getName(), cfg.getName());
				netinterfaceData.put("IP地址" + cfg.getName(), cfg.getAddress());
				netinterfaceData.put("网关广播地址" + cfg.getName(), cfg.getBroadcast());
				netinterfaceData.put("网卡Mac地址" + cfg.getName(), cfg.getHwaddr());
				netinterfaceData.put("子网掩码" + cfg.getName(), cfg.getNetmask());
			}
			allData.put("网络信息:", netinterfaceData);
			
			return "system/hardware/monitor";
		} catch (Exception e) {
			return "error";
		}
	}

}

 Jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ include file="/tags.jsp"%>
<table style="width: 100%; margin: 17px; padding: 11px;">
	<c:forEach var="d" items="${allData}">
		<tr>
			<td>
				<b>${d.key}</b>
			</td>
			<td>
				<c:forEach var="k" items="${d.value}" varStatus="vs">
					${k.key} : ${k.value} <c:if test="${vs.index!=(fn:length(d.value)-1)}"> --------- </c:if>
				</c:forEach>
			</td>
		</tr>
		<tr><td colspan="2">&nbsp;</td></tr>
	</c:forEach>
</table>

猜你喜欢

转载自rayoo.iteye.com/blog/1997287