package org.neo4j.kernel.impl.management; import java.io.File; import javax.management.NotCompliantMBeanException; import org.neo4j.kernel.management.StoreFile; @Description( "Information about the sizes of the different parts of the Neo4j graph store" ) class StoreFileBean 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; StoreFileBean( int instanceId, File storePath ) throws NotCompliantMBeanException { super( instanceId, StoreFile.class ); this.storePath = storePath; } @Description( "The total disk space used by this Neo4j instance" ) public long getTotalStoreSize() { return sizeOf( storePath ); } @Description( "The amount of disk space used by the current Neo4j logical log" ) 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" ) public long getArrayStoreSize() { return sizeOf( ARRAY_STORE ); } @Description( "The amount of disk space used to store nodes" ) public long getNodeStoreSize() { return sizeOf( NODE_STORE ); } @Description( "The amount of disk space used to store properties " + "(excluding string values and array values)" ) public long getPropertyStoreSize() { return sizeOf( PROPERTY_STORE ); } @Description( "The amount of disk space used to store relationships" ) public long getRelationshipStoreSize() { return sizeOf( RELATIONSHIP_STORE ); } @Description( "The amount of disk space used to store string properties" ) public long getStringStoreSize() { return sizeOf( STRING_STORE ); } }