/** * Copyright (c) 2002-2010 "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.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( String 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 ); } }