@Override
    public synchronized FsStats stats() {
		FileSystem[] fslist;
		try {
			fslist = this.proxy.getFileSystemList();
		} catch (SigarException e1) {
			e1.printStackTrace();
			return null;
		}
    	  
    	  File[] dataLocations =new File[fslist.length];
    	  for (int i=0;i<fslist.length; i++) {
    		File dataPath= new File(  fslist[i].getDevName());
    		dataLocations[i]=dataPath;
		}
        FsStats.Info[] infos = new FsStats.Info[dataLocations.length];
        for (int i = 0; i < dataLocations.length; i++) {
            File dataLocation = dataLocations[i];

            FsStats.Info info = new FsStats.Info();
            info.path = dataLocation.getAbsolutePath();

            try {
                FileSystem fileSystem = fileSystems.get(dataLocation);
              
                if (fileSystem == null) {
                    FileSystemMap fileSystemMap = sigar.getFileSystemMap();
                    if (fileSystemMap != null) {
                        fileSystem = fileSystemMap.getMountPoint(dataLocation.getPath());
                        fileSystems.put(dataLocation, fileSystem);
                    }
                }
                if (fileSystem != null) {
                    info.mount = fileSystem.getDirName();
                    info.dev = fileSystem.getDevName();
                    FileSystemUsage fileSystemUsage = sigar.getFileSystemUsage(fileSystem.getDirName());
                    if (fileSystemUsage != null) {
                        // total/free/available seem to be in megabytes?
                        info.totalKB = fileSystemUsage.getTotal();
                        info.freeKB = fileSystemUsage.getFree() ;
                        info.availableKB = fileSystemUsage.getAvail();
                        info.reads = fileSystemUsage.getDiskReads();
                        info.writes = fileSystemUsage.getDiskWrites();
                        info.readKB = fileSystemUsage.getDiskReadBytes()/1024;
                        info.writeKB = fileSystemUsage.getDiskWriteBytes()/1024;
                        info.diskQueue = fileSystemUsage.getDiskQueue();
                        info.diskServiceTime = fileSystemUsage.getDiskServiceTime();
                    }
                }
            } catch (SigarException e) {
                // failed...
            }

            infos[i] = info;
        }

        return new FsStats(System.currentTimeMillis(), infos);
    }