/** * Copyright (c) 2002-2011 "Neo Technology," * Network Engine for Objects in Lund AB [http://neotechnology.com] * * This file is part of Neo4j. * * Neo4j is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 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 Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.neo4j.management.impl; import java.io.File; import java.io.IOException; import javax.management.NotCompliantMBeanException; import org.neo4j.helpers.Service; import org.neo4j.kernel.KernelExtension.KernelData; import org.neo4j.kernel.impl.nioneo.xa.NeoStoreXaDataSource; import org.neo4j.management.StoreFile; @Service.Implementation( ManagementBeanProvider.class ) public final class StoreFileBean extends ManagementBeanProvider { public StoreFileBean() { super( StoreFile.class ); } @Override protected Neo4jMBean createMBean( KernelData kernel ) throws NotCompliantMBeanException { return new StoreFileImpl( this, kernel ); } @Description( "Information about the sizes of the different parts of the Neo4j graph store" ) private static class StoreFileImpl extends Neo4jMBean implements StoreFile { private static final String NODE_STORE = "neostore.nodestore.db"; private static final String RELATIONSHIP_STORE = "neostore.relationshipstore.db"; private static final String PROPERTY_STORE = "neostore.propertystore.db"; private static final String ARRAY_STORE = "neostore.propertystore.db.arrays"; private static final String STRING_STORE = "neostore.propertystore.db.strings"; private static final String LOGICAL_LOG1 = "nioneo_logical.log.1"; private static final String LOGICAL_LOG2 = "nioneo_logical.log.2"; private final File storePath; StoreFileImpl( ManagementBeanProvider provider, KernelData kernel ) throws NotCompliantMBeanException { super( provider, kernel ); NeoStoreXaDataSource nioneodb = KernelBean.getNeoDataSource( kernel ); File path; try { path = new File( nioneodb.getStoreDir() ).getCanonicalFile().getAbsoluteFile(); } catch ( IOException e ) { path = new File( nioneodb.getStoreDir() ).getAbsoluteFile(); } this.storePath = path; } @Description( "The total disk space used by this Neo4j instance, in bytes." ) public long getTotalStoreSize() { return sizeOf( storePath ); } @Description( "The amount of disk space used by the current Neo4j logical log, in bytes." ) public long getLogicalLogSize() { File logicalLog = new File( storePath, LOGICAL_LOG1 ); if ( !logicalLog.isFile() ) { logicalLog = new File( storePath, LOGICAL_LOG2 ); } return sizeOf( logicalLog ); } private static long sizeOf( File file ) { if ( file.isFile() ) { return file.length(); } else if ( file.isDirectory() ) { long size = 0; for ( File child : file.listFiles() ) { size += sizeOf( child ); } return size; } return 0; } private long sizeOf( String name ) { return sizeOf( new File( storePath, name ) ); } @Description( "The amount of disk space used to store array properties, in bytes." ) public long getArrayStoreSize() { return sizeOf( ARRAY_STORE ); } @Description( "The amount of disk space used to store nodes, in bytes." ) public long getNodeStoreSize() { return sizeOf( NODE_STORE ); } @Description( "The amount of disk space used to store properties " + "(excluding string values and array values), in bytes." ) public long getPropertyStoreSize() { return sizeOf( PROPERTY_STORE ); } @Description( "The amount of disk space used to store relationships, in bytes." ) public long getRelationshipStoreSize() { return sizeOf( RELATIONSHIP_STORE ); } @Description( "The amount of disk space used to store string properties, in bytes." ) public long getStringStoreSize() { return sizeOf( STRING_STORE ); } } }