From d9e0d8d70de65b9bfeb983415c8f14c19f74ddce Mon Sep 17 00:00:00 2001 From: Christoph Urlacher Date: Sat, 18 Apr 2026 11:50:06 +0200 Subject: [PATCH] send injection results as ntfy attachements --- scripts/runner.pl | 79 +++++++++++++++++++++++++++++++++-------------- 1 file changed, 55 insertions(+), 24 deletions(-) diff --git a/scripts/runner.pl b/scripts/runner.pl index d2d0b57..bf38a9b 100644 --- a/scripts/runner.pl +++ b/scripts/runner.pl @@ -38,6 +38,16 @@ sub notify { "-d", $msg, "$ntfy_url/$ntfy_topic" ); } +sub notify_file { + my ($file) = @_; + + system( + "curl", "-H", "Authorization: Bearer $ntfy_token", + "-T", $file, "-H", "Filename: $file", + "$ntfy_url/$ntfy_topic" + ); +} + sub update_db_config { my ($experiment) = @_; @@ -125,7 +135,10 @@ sub import_trace { sub inject { my ($experiment) = @_; - notify("Injecting $experiment..."); + # my $count = 1; + my $count = cpu_count(); + + notify("Injecting $experiment using $count cores..."); my $pid = fork(); die "fork failed: $!" unless defined $pid; @@ -139,9 +152,6 @@ sub inject { } # parent -> client - # my $count = 1; - my $count = cpu_count(); - # "-Wf,--catch-write-textsegment", system( "nice $bochs_runner -V $fail_share/vgabios.bin -b $fail_share/BIOS-bochs-latest -f $fail_inject -e $remote_builds_dir/$experiment/system.elf -i $remote_builds_dir/$experiment/system.iso -j $count -- -Wf,--server-port=$fail_server_port -Wf,--state-dir=$remote_builds_dir/$experiment/state -Wf,--trap -Wf,--catch-outerspace -Wf,--timeout=500000 -Wf,--ok-marker=fail_marker_positive -Wf,--fail-marker=fail_marker_negative -Wf,--detected-marker=fail_marker_detected > /dev/null" @@ -153,7 +163,20 @@ sub inject { # notify("Injecting $experiment complete."); } -# TODO: Add a function that accepts query + output file args +sub query { + my ( $experiment, $query, $args, $file ) = @_; + + my $result = qx{mariadb --defaults-file=$remote_db_conf $args -e "$query"}; + die "Query failed: $?" if $? != 0; + + open( my $results_handle, '>', "$remote_builds_dir/$experiment/$file" ) + or die "failed to open file: $!"; + print $results_handle $result; + close($results_handle) or die "failed to close file: $!"; + + notify_file("$remote_builds_dir/$experiment/$file"); +} + sub results { my ($experiment) = @_; @@ -170,16 +193,20 @@ WHERE v.variant = '$experiment' GROUP BY v.id, resulttype ORDER BY variant, benchmark, resulttype;"; - my $results_overview = qx{ - mariadb --defaults-file=$remote_db_conf -t -e "$results_overview_query" - }; - die "Query failed: $?" if $? != 0; + query( $experiment, $results_overview_query, "-t", "results.txt" ); - open( my $results_overview_handle, - '>', "$remote_builds_dir/$experiment/results.txt" ) - or die "failed to open file: $!"; - print $results_overview_handle $results_overview; - close($results_overview_handle) or die "failed to close file: $!"; + # my $results_overview = qx{ + # mariadb --defaults-file=$remote_db_conf -t -e "$results_overview_query" + # }; + # die "Query failed: $?" if $? != 0; + # + # open( my $results_overview_handle, + # '>', "$remote_builds_dir/$experiment/results.txt" ) + # or die "failed to open file: $!"; + # print $results_overview_handle $results_overview; + # close($results_overview_handle) or die "failed to close file: $!"; + # + # notify_file("$remote_builds_dir/$experiment/results.txt"); my $fail_markers_query = "SELECT CONCAT('0x', HEX(p.injection_instr_absolute)) AS fault_address, @@ -193,17 +220,21 @@ WHERE v.variant = '$experiment' AND r.resulttype = 'FAIL_MARKER' GROUP BY p.injection_instr_absolute ORDER BY SUM(t.time2 - t.time1 + 1) DESC;"; - my $fail_markers = qx{ - mariadb --defaults-file=$remote_db_conf --batch --raw -e "$fail_markers_query" - }; - die "Query failed: $?" if $? != 0; - $fail_markers =~ s/\t/,/g; + query( $experiment, $fail_markers_query, "--batch --raw", "markers.csv" ); - open( my $fail_markers_handle, - '>', "$remote_builds_dir/$experiment/markers.csv" ) - or die "failed to open file: $!"; - print $fail_markers_handle $fail_markers; - close($fail_markers_handle) or die "failed to close file: $!"; +# my $fail_markers = qx{ +# mariadb --defaults-file=$remote_db_conf --batch --raw -e "$fail_markers_query" +# }; +# die "Query failed: $?" if $? != 0; +# $fail_markers =~ s/\t/,/g; +# +# open( my $fail_markers_handle, +# '>', "$remote_builds_dir/$experiment/markers.csv" ) +# or die "failed to open file: $!"; +# print $fail_markers_handle $fail_markers; +# close($fail_markers_handle) or die "failed to close file: $!"; +# +# notify_file("$remote_builds_dir/$experiment/markers.csv"); } # Run experiments