print_database_statistics = { label = "Print Database Statistics" shortcut = "pds" requires_profile = true parameters = { } expression = ` # Get the profile node string profile_name = command_line.profile; node profile_node = 'profiles'{command_line.profile}; include "lib.database"; string database_directory = get_database_directory(profile_node); echo("Database Directory: " . database_directory); # This returns the size of a single file or directory. If it's a directory, it recurses into it to get the total size. subroutine(file_size(string pathname), ( #echo("file_info(); pathname=" . pathname); v.fileinfo = ''; get_file_info(pathname, 'v.fileinfo'); if (@'v.fileinfo'{'type'} eq 'directory') then ( #echo("Recursing " . pathname); # v.dircontents = ''; node dircontents = new_node(); get_directory_contents(pathname, dircontents); #echo("direcontents: " . node_as_string(dircontents)); int total_file_size = 0; node diritem; foreach diritem dircontents total_file_size += file_size(@diritem{"pathname"}); delete_node(dircontents); total_file_size; ); else @'v.fileinfo'{'size'}; )); # file_size() echo("\nItemnum Tables:"); node database_fields = profile_node{"database"}{"fields"}; node database_field; #node fileinfo = new_node(); foreach database_field database_fields ( if (@database_field{"aggregation_method"} eq 'none') then ( # echo("database field: " . database_field); string itemnums_directory = database_directory . 'items' . internal.directory_divider . node_name(database_field); # echo("itemnums_directory: " . itemnums_directory); # echo('nums_by_item size: ' . file_size(itemnums_directory . internal.directory_divider . 'nums_by_item')); int nums_by_item_size = file_size(itemnums_directory . internal.directory_divider . 'nums_by_item'); int offsets_by_num_size = file_size(itemnums_directory . internal.directory_divider . 'offsets_by_num'); int pool_size = file_size(itemnums_directory . internal.directory_divider . 'pool'); int total_itemnums_size = nums_by_item_size + offsets_by_num_size + pool_size; echo(" " . expand(@database_field{"label"}) . " (" . node_name(database_field) . ") itemnums size on disk: " . total_itemnums_size); # echo("fileinfo: " . node_as_string('v.fileinfo')); ); ); # foreach database_field echo("\nCross-reference Groups:"); int xref_group_num = 0; node cross_reference_groups = profile_node{"database"}{"cross_reference_groups"}; node cross_reference_group; foreach cross_reference_group cross_reference_groups ( string xref_table_directory = database_directory . 'Tables' . internal.directory_divider . 'xref' . xref_group_num; # echo("xref_table_directory: " . xref_table_directory); int size = file_size(xref_table_directory); echo(" Xref " . xref_group_num . ' (' . @cross_reference_group{"label"} . ') size: ' . size); xref_group_num++; ); # foreach cross_reference_group ` } # print_database_statistics