diff --git a/scripts/Queries/FaultsFailed.pm b/scripts/Queries/FaultsFailed.pm new file mode 100644 index 0000000..006ce54 --- /dev/null +++ b/scripts/Queries/FaultsFailed.pm @@ -0,0 +1,28 @@ +package Queries::FaultsFailed; + +use strict; +use warnings; +use diagnostics; + +sub query { + my ($experiment) = @_; + + return +"SELECT CONCAT('0x', HEX(p.injection_instr_absolute)) AS fault_address, SUM(t.time2 - t.time1 + 1) AS total_fail_markers +FROM trace t +JOIN variant v ON v.id = t.variant_id +JOIN fspgroup g ON g.variant_id = t.variant_id AND g.instr2 = t.instr2 AND g.data_address = t.data_address +JOIN result_GenericExperimentMessage r ON r.pilot_id = g.pilot_id +JOIN fsppilot p ON p.id = r.pilot_id +WHERE v.variant = '$experiment' AND r.resulttype = 'FAIL_MARKER' +GROUP BY p.injection_instr_absolute +ORDER BY SUM(t.time2 - t.time1 + 1) DESC;" +} + +sub args { return "--batch --raw"; } + +sub filename { return "faults_failed.csv"; } + +sub prostprocess { $_[0] =~ s/\t/,/g; } + +1; diff --git a/scripts/Queries/Results.pm b/scripts/Queries/Results.pm new file mode 100644 index 0000000..4fe330e --- /dev/null +++ b/scripts/Queries/Results.pm @@ -0,0 +1,28 @@ +package Queries::Results; + +use strict; +use warnings; +use diagnostics; + +sub query { + my ($experiment) = @_; + + return +"SELECT variant, benchmark, resulttype, sum(t.time2 - t.time1 + 1) AS faults +FROM variant v +JOIN trace t ON v.id = t.variant_id +JOIN fspgroup g ON g.variant_id = t.variant_id AND g.instr2 = t.instr2 AND g.data_address = t.data_address +JOIN result_GenericExperimentMessage r ON r.pilot_id = g.pilot_id +JOIN fsppilot p ON r.pilot_id = p.id +WHERE v.variant = '$experiment' +GROUP BY v.id, resulttype +ORDER BY variant, benchmark, resulttype;"; +} + +sub args { return "-t"; } + +sub filename { return "results.txt"; } + +sub prostprocess { } + +1; diff --git a/scripts/runner.pl b/scripts/runner.pl index b0f76dd..c25bf35 100644 --- a/scripts/runner.pl +++ b/scripts/runner.pl @@ -5,6 +5,7 @@ use warnings; use diagnostics; use IO::Socket::INET; +use Util qw(notify notify_file execute_query find_subdirs); use feature 'say'; @@ -29,27 +30,6 @@ my $fail_server = "$fail_bin/generic-experiment-server"; my $fail_inject = "$fail_bin/generic-experiment-client"; my $result_browser = "$fail_bin/resultbrowser.py"; -my $ntfy_url = "https://ntfy.vps.chriphost.de"; -my $ntfy_token = "tk_rx8fd6hojuz4ekcb72j7juugkbmga"; # May be public -my $ntfy_topic = "fail-alerts"; - -sub notify { - my ($msg) = @_; - - system( "curl", "-H", "Authorization: Bearer $ntfy_token", - "-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) = @_; @@ -58,7 +38,7 @@ sub update_db_config { my @lines; my $found = 0; while ( my $line = <$readhandle> ) { - if ( rindex( $line, "database=", 0 ) == 0 ) { + if ( rindex( $line, 'database=', 0 ) == 0 ) { $line = "database=${db_prefix}_$experiment\n"; $found = 1; } @@ -78,7 +58,7 @@ sub update_db_config { } sub cpu_count { - open( my $handle, "/proc/cpuinfo" ) or die "Can't open cpuinfo: $!\n"; + open( my $handle, '/proc/cpuinfo' ) or die "Can't open cpuinfo: $!\n"; my $count = scalar( map /^processor/, <$handle> ); close $handle; @@ -86,11 +66,13 @@ sub cpu_count { } # Find new experiments -opendir( my $dhandle, $remote_builds_dir ) - or die "opendir($remote_builds_dir): $!"; -my @experiments = grep { $_ ne '.' && $_ ne '..' && -d "$remote_builds_dir/$_" } - readdir($dhandle); -closedir($dhandle); +# opendir( my $dhandle, $remote_builds_dir ) +# or die "opendir($remote_builds_dir): $!"; +# my @experiments = grep { $_ ne '.' && $_ ne '..' && -d "$remote_builds_dir/$_" } +# readdir($dhandle); +# closedir($dhandle); + +my @experiments = find_subdirs($remote_builds_dir); sub trace { my ($experiment) = @_; @@ -288,66 +270,71 @@ sub inject { # notify("Injecting $experiment complete."); } -sub query { - my ( $experiment, $query, $args, $file, $postprocess ) = @_; - - say "Running query $query"; - - my $result = qx{mariadb --defaults-file=$remote_db_conf $args -e "$query"}; - die "Query failed: $?" if $? != 0; - - if ( defined $postprocess ) { - $postprocess->($result); - } - - 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 query { +# my ( $experiment, $query, $args, $file, $postprocess ) = @_; +# +# say "Running query $query"; +# +# my $result = qx{mariadb --defaults-file=$remote_db_conf $args -e "$query"}; +# die "Query failed: $?" if $? != 0; +# +# if ( defined $postprocess ) { +# $postprocess->($result); +# } +# +# 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) = @_; notify("Querying $experiment..."); - my $results_overview_query = "SELECT -variant, benchmark, resulttype, sum(t.time2 - t.time1 + 1) AS faults -FROM variant v -JOIN trace t ON v.id = t.variant_id -JOIN fspgroup g ON g.variant_id = t.variant_id AND g.instr2 = t.instr2 AND g.data_address = t.data_address -JOIN result_GenericExperimentMessage r ON r.pilot_id = g.pilot_id -JOIN fsppilot p ON r.pilot_id = p.id -WHERE v.variant = '$experiment' -GROUP BY v.id, resulttype -ORDER BY variant, benchmark, resulttype;"; + execute_query( $experiment, "Results", $remote_db_conf, + $remote_builds_dir ); + execute_query( $experiment, "FaultsFailed", $remote_db_conf, + $remote_builds_dir ); - query( $experiment, $results_overview_query, "-t", "results.txt" ); - - my $fail_markers_query = "SELECT -CONCAT('0x', HEX(p.injection_instr_absolute)) AS fault_address, -SUM(t.time2 - t.time1 + 1) AS total_fail_markers -FROM trace t -JOIN variant v ON v.id = t.variant_id -JOIN fspgroup g ON g.variant_id = t.variant_id AND g.instr2 = t.instr2 AND g.data_address = t.data_address -JOIN result_GenericExperimentMessage r ON r.pilot_id = g.pilot_id -JOIN fsppilot p ON p.id = r.pilot_id -WHERE v.variant = '$experiment' AND r.resulttype = 'FAIL_MARKER' -GROUP BY p.injection_instr_absolute -ORDER BY SUM(t.time2 - t.time1 + 1) DESC;"; - - query( $experiment, $fail_markers_query, "--batch --raw", - "markers.csv", sub { $_[0] =~ s/\t/,/g } ); +# my $results_overview_query = "SELECT +# variant, benchmark, resulttype, sum(t.time2 - t.time1 + 1) AS faults +# FROM variant v +# JOIN trace t ON v.id = t.variant_id +# JOIN fspgroup g ON g.variant_id = t.variant_id AND g.instr2 = t.instr2 AND g.data_address = t.data_address +# JOIN result_GenericExperimentMessage r ON r.pilot_id = g.pilot_id +# JOIN fsppilot p ON r.pilot_id = p.id +# WHERE v.variant = '$experiment' +# GROUP BY v.id, resulttype +# ORDER BY variant, benchmark, resulttype;"; +# +# query( $experiment, $results_overview_query, "-t", "results.txt" ); +# +# my $fail_markers_query = "SELECT +# CONCAT('0x', HEX(p.injection_instr_absolute)) AS fault_address, +# SUM(t.time2 - t.time1 + 1) AS total_fail_markers +# FROM trace t +# JOIN variant v ON v.id = t.variant_id +# JOIN fspgroup g ON g.variant_id = t.variant_id AND g.instr2 = t.instr2 AND g.data_address = t.data_address +# JOIN result_GenericExperimentMessage r ON r.pilot_id = g.pilot_id +# JOIN fsppilot p ON p.id = r.pilot_id +# WHERE v.variant = '$experiment' AND r.resulttype = 'FAIL_MARKER' +# GROUP BY p.injection_instr_absolute +# ORDER BY SUM(t.time2 - t.time1 + 1) DESC;"; +# +# query( $experiment, $fail_markers_query, "--batch --raw", +# "markers.csv", sub { $_[0] =~ s/\t/,/g } ); } # Run experiments for my $experiment (@experiments) { update_db_config($experiment); - trace($experiment); - import_trace($experiment); - inject($experiment); + # trace($experiment); + # import_trace($experiment); + # inject($experiment); results($experiment); }