package org.opendedup.sdfs.monitor; import java.io.BufferedOutputStream; import java.io.FileOutputStream; import java.io.IOException; import java.text.DecimalFormat; import org.opendedup.sdfs.servers.HashChunkService; public class IOMeter implements Runnable { private long sleeptime = 15; String fileName; private boolean stopped = false; DecimalFormat df = new DecimalFormat("###.##"); DecimalFormat dfp = new DecimalFormat("##.##%"); public IOMeter(String fileName) { this.fileName = fileName; } public void run() { BufferedOutputStream out = null; double lastMBRead = 0; double lastMBWrite = 0; try { out = new BufferedOutputStream(new FileOutputStream(fileName)); String column = "reading (MB/s),writing (MB/s),duplicates found,chunks written,dedup rate\r\n"; out.write(column.getBytes()); out.flush(); while (!stopped) { try { Thread.sleep(sleeptime * 1000); double difMBRead = (HashChunkService.getKBytesRead() - lastMBRead) / 1024; double difMBWrite = (HashChunkService.getKBytesWrite() - lastMBWrite) / 1024; double dedupRate = ((double) HashChunkService .getDupsFound() / ((double) HashChunkService .getDupsFound() + (double) HashChunkService .getChunksWritten())); lastMBWrite = HashChunkService.getKBytesWrite(); lastMBRead = HashChunkService.getKBytesRead(); String csvStr = df.format((difMBRead) / sleeptime) + "," + df.format((difMBWrite) / sleeptime) + "," + HashChunkService.getDupsFound() + "," + HashChunkService.getChunksWritten() + "," + dfp.format(dedupRate) + "\r\n"; out.write(csvStr.getBytes()); out.flush(); } catch (Exception e) { e.printStackTrace(); } } } catch (IOException e) { e.printStackTrace(); } finally { try { out.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public void stop() { this.stopped = true; } }