Package voldemort.store.bdb.stats

Source Code of voldemort.store.bdb.stats.SpaceUtilizationStats

package voldemort.store.bdb.stats;

import java.util.Iterator;
import java.util.Map;
import java.util.SortedMap;

import voldemort.utils.Utils;

import com.sleepycat.je.DbInternal;
import com.sleepycat.je.Environment;
import com.sleepycat.je.cleaner.FileSummary;
import com.sleepycat.je.cleaner.UtilizationProfile;
import com.sleepycat.je.dbi.EnvironmentImpl;

/**
* Obtains the disk space utilization for the BDB environment
*/
final public class SpaceUtilizationStats {

    private final EnvironmentImpl envImpl;

    private SortedMap<Long, FileSummary> summaryMap;
    private long totalSpaceUsed = 0;
    private long totalSpaceUtilized = 0;

    public SpaceUtilizationStats(Environment env) {
        this(DbInternal.getEnvironmentImpl(env));
    }

    private SpaceUtilizationStats(EnvironmentImpl envImpl) {
        this.envImpl = envImpl;
        UtilizationProfile profile = this.envImpl.getUtilizationProfile();
        summaryMap = profile.getFileSummaryMap(true);

        Iterator<Map.Entry<Long, FileSummary>> fileItr = summaryMap.entrySet().iterator();
        while(fileItr.hasNext()) {
            Map.Entry<Long, FileSummary> entry = fileItr.next();
            FileSummary fs = entry.getValue();
            totalSpaceUsed += fs.totalSize;
            totalSpaceUtilized += fs.totalSize - fs.getObsoleteSize();
        }
    }

    public long getTotalSpaceUsed() {
        return totalSpaceUsed;
    }

    public long getTotalSpaceUtilized() {
        return totalSpaceUtilized;
    }

    public String getSummariesAsString() {
        StringBuffer summaryDetails = new StringBuffer();
        if(summaryMap != null) {
            summaryDetails.append("file,util%\n");
            Iterator<Map.Entry<Long, FileSummary>> fileItr = summaryMap.entrySet().iterator();
            while(fileItr.hasNext()) {
                Map.Entry<Long, FileSummary> entry = fileItr.next();
                FileSummary fs = entry.getValue();
                long bytesUsed = fs.totalSize - fs.getObsoleteSize();
                summaryDetails.append(String.format("%s,%f\n",
                                                    Long.toHexString(entry.getKey().longValue()),
                                                    Utils.safeGetPercentage(bytesUsed, fs.totalSize)));
            }
            summaryDetails.append(String.format("total,%f\n",
                                                Utils.safeGetPercentage(totalSpaceUtilized,
                                                                        totalSpaceUsed)));
        }
        return summaryDetails.toString();
    }
}
TOP

Related Classes of voldemort.store.bdb.stats.SpaceUtilizationStats

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.