org.exist.management.impl.DiskUsage.java Source code

Java tutorial

Introduction

Here is the source code for org.exist.management.impl.DiskUsage.java

Source

/*
 *  eXist Open Source Native XML Database
 *  Copyright (C) 2001-08 The eXist Project
 *  http://exist-db.org
 *
 *  This program is free software; you can redistribute it and/or
 *  modify it under the terms of the GNU Lesser General Public License
 *  as published by the Free Software Foundation; either version 2
 *  of the License, or (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU Lesser General Public License for more details.
 *
 *  You should have received a copy of the GNU Lesser General Public
 *  License along with this library; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 *  $Id$
 */
package org.exist.management.impl;

import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import org.apache.commons.lang3.StringUtils;

import org.exist.storage.BrokerPool;
import org.exist.storage.journal.Journal;
import org.exist.util.Configuration;

/**
 * Class DiskUsage. Retrieves data from the java File object
 *
 * @author dizzzz@exist-db.org
 */
public class DiskUsage implements DiskUsageMBean {

    private File journalDir;
    private File dataDir;

    public DiskUsage(BrokerPool pool) {

        Configuration config = pool.getConfiguration();

        String journalDirValue = (String) config.getProperty(Journal.PROPERTY_RECOVERY_JOURNAL_DIR);
        if (StringUtils.isNotBlank(journalDirValue)) {
            File tmpDir = new File(journalDirValue);
            if (tmpDir.isDirectory()) {
                journalDir = tmpDir;
            }
        }

        String dataDirValue = (String) config.getProperty(BrokerPool.PROPERTY_DATA_DIR);
        if (StringUtils.isNotBlank(dataDirValue)) {
            File tmpDir = new File(dataDirValue);
            if (tmpDir.isDirectory()) {
                dataDir = tmpDir;
            }
        }

    }

    @Override
    public String getDataDirectory() {
        if (dataDir != null) {
            try {
                return dataDir.getCanonicalPath();
            } catch (IOException ex) {
                return dataDir.getAbsolutePath();
            }
        }
        return NOT_CONFIGURED;
    }

    @Override
    public String getJournalDirectory() {
        if (journalDir != null) {
            try {
                return journalDir.getCanonicalPath();
            } catch (IOException ex) {
                return journalDir.getAbsolutePath();
            }
        }
        return NOT_CONFIGURED;
    }

    @Override
    public long getDataDirectoryTotalSpace() {
        if (dataDir != null) {
            return dataDir.getTotalSpace();
        }

        return NO_VALUE;
    }

    @Override
    public long getDataDirectoryUsableSpace() {
        if (dataDir != null) {
            return dataDir.getUsableSpace();
        }
        return NO_VALUE;
    }

    @Override
    public long getJournalDirectoryTotalSpace() {
        if (journalDir != null) {
            return journalDir.getTotalSpace();
        }
        return NO_VALUE;
    }

    @Override
    public long getJournalDirectoryUsableSpace() {
        if (journalDir != null) {
            return journalDir.getUsableSpace();
        }
        return NO_VALUE;
    }

    @Override
    public long getDataDirectoryUsedSpace() {

        long totalSize = 0;

        final File dir = new File(getDataDirectory());
        final File[] files = dir.listFiles(new DbxFilenameFilter());
        for (final File file : files) {
            totalSize += file.length();
        }

        return totalSize;
    }

    @Override
    public long getJournalDirectoryUsedSpace() {
        long totalSize = 0;

        final File dir = new File(getJournalDirectory());
        final File[] files = dir.listFiles(new JournalFilenameFilter());
        for (final File file : files) {
            totalSize += file.length();
        }

        return totalSize;
    }

    @Override
    public int getJournalDirectoryNumberOfFiles() {
        final File dir = new File(getJournalDirectory());
        final File[] files = dir.listFiles(new JournalFilenameFilter());
        return files.length;
    }
}

class DbxFilenameFilter implements FilenameFilter {

    @Override
    public boolean accept(File directory, String name) {
        return name.endsWith(".dbx");
    }
}

class JournalFilenameFilter implements FilenameFilter {

    @Override
    public boolean accept(File directory, String name) {
        return name.endsWith(".log");
    }
}