@ -51,6 +51,7 @@ import java.io.IOException;
import java.nio.charset.Charset ;
import java.nio.file.Files ;
import java.sql.Connection ;
import java.sql.ResultSet ;
import java.sql.SQLException ;
import java.util.* ;
@ -274,21 +275,23 @@ public class InternalHelpController {
}
private void gatherDatabaseInfo ( Map < String , Object > map ) {
try ( Connection conn = daoHelper . getDataSource ( ) . getConnection ( ) ) {
// Driver name/version
map . put ( "dbDriverName" , conn . getMetaData ( ) . getDriverName ( ) ) ;
map . put ( "dbDriverVersion" , conn . getMetaData ( ) . getDriverVersion ( ) ) ;
} catch ( SQLException e ) {
LOG . debug ( "Unable to gather information" , e ) ;
}
File dbDirectory = new File ( settingsService . getAirsonicHome ( ) , "db" ) ;
map . put ( "dbDirectorySizeBytes" , dbDirectory . exists ( ) ? FileUtils . sizeOfDirectory ( dbDirectory ) : 0 ) ;
map . put ( "dbDirectorySize" , FileUtils . byteCountToDisplaySize ( ( long ) map . get ( "dbDirectorySizeBytes" ) ) ) ;
File dbLogFile = new File ( dbDirectory , "airsonic.log" ) ;
map . put ( "dbLogSizeBytes" , dbLogFile . exists ( ) ? dbLogFile . length ( ) : 0 ) ;
map . put ( "dbLogSize" , FileUtils . byteCountToDisplaySize ( ( long ) map . get ( "dbLogSizeBytes" ) ) ) ;
// Gather information for existing database tables
ResultSet resultSet = conn . getMetaData ( ) . getTables ( null , null , "%" , null ) ;
SortedMap < String , Long > dbTableCount = new TreeMap < > ( ) ;
try {
for ( String tableName : daoHelper . getJdbcTemplate ( ) . queryForList ( "SELECT table_name FROM INFORMATION_SCHEMA.SYSTEM_TABLES WHERE table_schem = 'PUBLIC'" , String . class ) ) {
while ( resultSet . next ( ) ) {
String tableSchema = resultSet . getString ( "TABLE_SCHEM" ) ;
String tableName = resultSet . getString ( "TABLE_NAME" ) ;
String tableType = resultSet . getString ( "TABLE_TYPE" ) ;
LOG . debug ( "Got database table {}, schema {}, type {}" , tableName , tableSchema , tableType ) ;
if ( ! "table" . equalsIgnoreCase ( tableType ) ) continue ; // Table type
if ( ! "public" . equalsIgnoreCase ( tableSchema ) ) continue ; // Table schema
try {
Long tableCount = daoHelper . getJdbcTemplate ( ) . queryForObject ( String . format ( "SELECT count(*) FROM %s" , tableName ) , Long . class ) ;
dbTableCount . put ( tableName , tableCount ) ;
@ -296,10 +299,19 @@ public class InternalHelpController {
LOG . debug ( "Unable to gather information" , e ) ;
}
}
} catch ( Exception e ) {
map . put ( "dbTableCount" , dbTableCount ) ;
} catch ( SQLException e ) {
LOG . debug ( "Unable to gather information" , e ) ;
}
File dbDirectory = new File ( settingsService . getAirsonicHome ( ) , "db" ) ;
map . put ( "dbDirectorySizeBytes" , dbDirectory . exists ( ) ? FileUtils . sizeOfDirectory ( dbDirectory ) : 0 ) ;
map . put ( "dbDirectorySize" , FileUtils . byteCountToDisplaySize ( ( long ) map . get ( "dbDirectorySizeBytes" ) ) ) ;
File dbLogFile = new File ( dbDirectory , "airsonic.log" ) ;
map . put ( "dbLogSizeBytes" , dbLogFile . exists ( ) ? dbLogFile . length ( ) : 0 ) ;
map . put ( "dbLogSize" , FileUtils . byteCountToDisplaySize ( ( long ) map . get ( "dbLogSizeBytes" ) ) ) ;
map . put ( "dbMediaFileMusicNonPresentCount" , daoHelper . getJdbcTemplate ( ) . queryForObject ( String . format ( "SELECT count(*) FROM MEDIA_FILE WHERE NOT present AND type = 'MUSIC'" ) , Long . class ) ) ;
map . put ( "dbMediaFilePodcastNonPresentCount" , daoHelper . getJdbcTemplate ( ) . queryForObject ( String . format ( "SELECT count(*) FROM MEDIA_FILE WHERE NOT present AND type = 'PODCAST'" ) , Long . class ) ) ;
map . put ( "dbMediaFileDirectoryNonPresentCount" , daoHelper . getJdbcTemplate ( ) . queryForObject ( String . format ( "SELECT count(*) FROM MEDIA_FILE WHERE NOT present AND type = 'DIRECTORY'" ) , Long . class ) ) ;
@ -319,8 +331,6 @@ public class InternalHelpController {
map . put ( "dbMediaFilesWithMusicFolderMismatchCount" , mediaFileDao . getFilesWithMusicFolderMismatchCount ( ) ) ;
map . put ( "dbMediaFilesWithMusicFolderMismatchSample" , mediaFileDao . getFilesWithMusicFolderMismatch ( 10 ) ) ;
map . put ( "dbTableCount" , dbTableCount ) ;
}
private void gatherFilesystemInfo ( Map < String , Object > map ) {