From: Gilles Darold Date: Sat, 1 Sep 2018 11:27:26 +0000 (+0200) Subject: Add support to all auto_explain format (text, xml, json and yaml). X-Git-Tag: v10.0~7 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=96463781086d0259ec90eba390d57f91a3536fed;p=pgbadger Add support to all auto_explain format (text, xml, json and yaml). --- diff --git a/pgbadger b/pgbadger index cc17395..a63dc83 100755 --- a/pgbadger +++ b/pgbadger @@ -9350,7 +9350,12 @@ sub display_plan my $url = $EXPLAIN_URL . url_escape($plan); - return "
Explain plan
\n
\n
" . $plan . "
\n
\n"; + # Only TEXT format plan can be sent to Depesz site. + if ($plan !~ /Node Type:|"Node Type":|Node-Type/s) { + return "
Explain plan
\n
\n
" . $plan . "
\n
\n"; + } else { + return "
Explain plan
\n
\n
" . $plan . "
\n
\n"; + } } sub print_lock_queries_report @@ -13790,17 +13795,37 @@ sub store_queries my $key = 'query'; my @plan = split("\n", $cur_plan_info{$t_pid}{plan}); foreach my $l (@plan) { + # In TEXT format if ($l =~ /\(cost=\d+.*rows=\d+/) { $key = 'plan' ; - } elsif ($l =~ /"Plan": \{/) { + # In JSON or YAML format + } elsif ($l =~ /"Plan": \{|Plan:/) { + $key = 'plan' ; + # In XML format + } elsif ($l =~ //) { $key = 'plan' ; } $cur_info{$t_pid}{$key} .= "$l\n"; } - $cur_info{$t_pid}{query} =~ s/Query Text: //s; - $cur_info{$t_pid}{query} =~ s/.*"Query Text": "//; - $cur_info{$t_pid}{query} =~ s/"$//; - $cur_info{$t_pid}{plan} = " [\n {\n" . $cur_info{$t_pid}{plan} . " ]\n"; + # YAML format + if ($cur_info{$t_pid}{query} =~ s/Query Text: "//s) { + $cur_info{$t_pid}{query} =~ s/"$//s; + $cur_info{$t_pid}{plan} .= "\n"; + # TEXT format + } elsif ($cur_info{$t_pid}{query} =~ s/Query Text: ([^"])/$1/s) { + $cur_info{$t_pid}{plan} .= "\n"; + # JSON format + } elsif ($cur_info{$t_pid}{query} =~ s/.*"Query Text": "//s) { + $cur_info{$t_pid}{query} =~ s/"$//s; + $cur_info{$t_pid}{plan} = " [\n {\n" . $cur_info{$t_pid}{plan} . " ]\n"; + } elsif ($cur_info{$t_pid}{query} =~ s/.*//s) { + $cur_info{$t_pid}{query} =~ s/<\/Query-Text>//s; + $cur_info{$t_pid}{plan} .= "\n"; + if ($extension eq 'html') { + $cur_info{$t_pid}{plan} =~ s//>/gs; + } + } } delete $cur_plan_info{$t_pid}; }