+
+<&|/Widgets/TitleBox, title=> loc("Environment variables") &>
+<table border="0" cellspacing="0" cellpadding="5" width="100%" class="collection">
+<tr class="collection-as-table">
+<th class="collection-as-table"><&|/l&>Variable</&></th>
+<th class="collection-as-table"><&|/l&>Value</&></th>
+</tr>
+% my $row = 0;
+% for my $key (sort keys %ENV) {
+<tr class="collection-as-table <% $row++ %2 ? 'oddline' : 'evenline'%>">
+<td class="collection-as-table"><% $key %></td>
+<td class="collection-as-table"><% $ENV{$key} %></td>
+</tr>
+% }
+</table>
+</&>
+
+<&|/Widgets/TitleBox, title => loc("Operating System") &>
+<table border="0" cellspacing="0" cellpadding="5" width="100%" class="collection">
+<tr class="collection-as-table evenline">
+<td class="collection-as-table">Deployment type</td>
+<td class="collection-as-table"><%
+ $INC{'mod_perl.pm'} ? "mod_perl" :
+ $INC{'FCGI.pm'} ? "fastcgi" :
+ "standalone" %>
+</td>
+</tr>
+<%perl>
+my @os = (
+ "Distribution" => 'lsb_release --all',
+ "uname -a" => 'uname -a',
+ "SELinux status" => 'getenforce',
+ "Apache" => [map { "$_ -V" } qw(apache2ctl apachectl httpdctl)],
+ "nginx" => 'nginx -V 2>&1',
+ "lighttpd" => 'lighttpd -V',
+);
+my @os_info;
+
+while (my ($name, $cmd) = splice @os, 0, 2) {
+ $cmd = [$cmd] unless ref $cmd eq 'ARRAY';
+ for my $run (@$cmd) {
+ $run .= " </dev/null";
+ $run .= " 2>/dev/null" unless $run =~ /2>/;
+ my $result = `$run`;
+ if (defined $result and $result =~ /\S/) {
+ push @os_info, $name => $result;
+ last;
+ }
+ }
+}
+my $row = 1;
+</%perl>
+% while (my ($name, $output) = splice @os_info, 0, 2) {
+<tr class="collection-as-table <% $row++ % 2 ? "oddline" : "evenline" %>">
+<td class="collection-as-table"><% $name %></td>
+<td class="collection-as-table" style="white-space: pre-wrap; font-family: monospace"><% $output %></td>
+</tr>
+% }
+</table>
+</&>
+
+<%INIT>
+use Data::Dumper;
+local $Data::Dumper::Terse = 1;
+local $Data::Dumper::Indent = 2;
+
+sub stringify {
+ my $value = shift;
+ my $output = Dumper $value;
+ RT::Interface::Web::EscapeHTML(\$output);
+ $output =~ s/ / /g;
+ $output =~ s!\n!<br />!g;
+ return $output;
+}
+</%INIT>