From 1784f084b67504c01e8ec138c52e13ab401c4fd1 Mon Sep 17 00:00:00 2001 From: Christoph Urlacher Date: Mon, 31 Aug 2026 21:52:39 +0200 Subject: [PATCH] Add database dump action to menu --- scripts/menu.pl | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/scripts/menu.pl b/scripts/menu.pl index 424fe48..e2b74ab 100644 --- a/scripts/menu.pl +++ b/scripts/menu.pl @@ -11,6 +11,7 @@ use Util; use Mars; use TUI; use Filters; +use File::Temp; use Text::CSV_XS; use feature 'say'; @@ -29,6 +30,7 @@ my $local_archive_dir = "$local_root/injections"; my $local_charts_dir = "$local_root/scripts/charts"; my $local_ghidra_projects = "$local_root/ghidra"; my $local_ghidra_scripts = "$local_root/scripts/ghidra"; +my $local_dump_dir = "$local_root/dumps"; my $local_db_conf = "$local_root/db.conf"; my $resultbrowser_port = '5000'; @@ -773,6 +775,48 @@ my %handlers = ( } }, + '31. Dump Database (Mars)' => sub { + + # Dump databases from mars into $local_dump_dir + my @dbs = Mars::db_list(); + my @dbs_with_notes; + foreach my $db (@dbs) { + my $info = + Util::read_experiment_info( $db =~ s/smchurla_//r =~ s/:/-/gr ); + + push @dbs_with_notes, + ( defined $info && length($info) > 0 ) + ? sprintf( "%-60s (%s)", $db, $info ) + : $db; + } + + my @selected_dbs = + TUI::select_from_list( "Select Databases to Dump from Mars", + 1, @dbs_with_notes ); + die "No database selected" unless @selected_dbs; + + @selected_dbs = + map { s/(.*?)\s+\(.+\)$/$1/r } @selected_dbs; + + system( 'mkdir', '-p', $local_dump_dir ); + + # Mariadb complains about the database= line, so strip it out + my ( $dump_conf_handle, $dump_conf ) = + File::Temp::tempfile( 'db-dump-XXXXXX', TMPDIR => 1, UNLINK => 1 ); + print $dump_conf_handle + grep { !/^\s*database\s*=/ } split /^/, + Util::read_file($local_db_conf); + close($dump_conf_handle) or die "failed to close $dump_conf: $!"; + + foreach my $db (@selected_dbs) { + my $dump_file = "$local_dump_dir/" . $db =~ s/:/-/gr . ".sql"; + + say "Dumping $db to $dump_file..."; + Util::run( 'mariadb-dump', "--defaults-file=$dump_conf", + "--result-file=$dump_file", $db ); + } + }, + '95. Delete Builds' => sub { # Delete old build files