Putting 4.2.0 on top of 4.0.17
[usit-rt.git] / share / html / Admin / Tools / Configuration.html
CommitLineData
84fb5b46
MKG
1%# BEGIN BPS TAGGED BLOCK {{{
2%#
3%# COPYRIGHT:
4%#
403d7b0b 5%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC
84fb5b46
MKG
6%# <sales@bestpractical.com>
7%#
8%# (Except where explicitly superseded by other copyright notices)
9%#
10%#
11%# LICENSE:
12%#
13%# This work is made available to you under the terms of Version 2 of
14%# the GNU General Public License. A copy of that license should have
15%# been provided with this software, but in any event can be snarfed
16%# from www.gnu.org.
17%#
18%# This work is distributed in the hope that it will be useful, but
19%# WITHOUT ANY WARRANTY; without even the implied warranty of
20%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21%# General Public License for more details.
22%#
23%# You should have received a copy of the GNU General Public License
24%# along with this program; if not, write to the Free Software
25%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
26%# 02110-1301 or visit their web page on the internet at
27%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
28%#
29%#
30%# CONTRIBUTION SUBMISSION POLICY:
31%#
32%# (The following paragraph is not intended to limit the rights granted
33%# to you to modify and distribute this software under the terms of
34%# the GNU General Public License and is only of importance to you if
35%# you choose to contribute your changes and enhancements to the
36%# community by submitting them to Best Practical Solutions, LLC.)
37%#
38%# By intentionally submitting any modifications, corrections or
39%# derivatives to this work, or any other work intended for use with
40%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
41%# you are the copyright holder for those contributions and you grant
42%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
43%# royalty-free, perpetual, license to use, copy, create derivative
44%# works based on those contributions, and sublicense and distribute
45%# those contributions and any derivatives thereof.
46%#
47%# END BPS TAGGED BLOCK }}}
48<%init>
49require Module::Versions::Report;
50my $title = loc('System Configuration');
51unless ($session{'CurrentUser'}->HasRight( Object=> $RT::System, Right => 'SuperUser')) {
52 Abort(loc('This feature is only available to system administrators'));
53}
54</%init>
55<& /Admin/Elements/Header, Title => $title &>
56<& /Elements/Tabs &>
57
58<&|/Widgets/TitleBox, title => loc("RT Configuration") &>
59<table border="0" cellspacing="0" cellpadding="5" width="100%" class="collection">
60<tr class="collection-as-table">
61<th class="collection-as-table"><&|/l&>Option</&></th>
62<th class="collection-as-table"><&|/l&>Value</&></th>
63<th class="collection-as-table"><&|/l&>Source</&></th>
64</tr>
65<%PERL>
66my $index_conf;
67foreach my $key ( RT->Config->Options( Overridable => undef, Sorted => 0 ) ) {
68 my $val = RT->Config->GetObfuscated( $key );
69 next unless defined $val;
70
71 my $meta = RT->Config->Meta( $key );
72 my $description = '';
73 if ( $meta->{'Source'}{'Extension'} && $meta->{'Source'}{'SiteConfig'} ) {
74 $description = loc("[_1] site config", $meta->{'Source'}{'Extension'});
75 }
76 elsif ( $meta->{'Source'}{'Extension'} ) {
77 $description = loc("[_1] core config", $meta->{'Source'}{'Extension'});
78 }
79 elsif ( $meta->{'Source'}{'SiteConfig'} ) {
80 $description = loc("site config");
81 }
82 else {
83 $description = loc("core config");
84 }
85 $index_conf++;
86</%PERL>
87<tr class="<% $index_conf%2 ? 'oddline' : 'evenline'%>">
88<td class="collection-as-table"><% $key %></td>
89<td class="collection-as-table">
90% if ( $key =~ /Password(?!Length)/i ) {
91<em><% loc('Password not printed' ) %></em>\
92% } else {
93<% stringify($val) |n %>\
94% }
95</td>
96<td class="collection-as-table" style="white-space: nowrap">
97% if ( $meta->{'Source'}{'SiteConfig'} ) {
98<span style="font-weight: bold"><% $description %></span>
99% } else {
100<% $description %>
101% }
102</td>
103</tr>
104% }
105</table>
106</&>
107<table width="100%">
108 <tr>
109 <td valign="top" width="60%" class="boxcontainer">
110<&|/Widgets/TitleBox, title=> loc("RT core variables") &>
111<table border="0" cellspacing="0" cellpadding="5" width="100%" class="collection">
112<tr class="collection-as-table">
113<th class="collection-as-table"><&|/l&>Variable</&></th>
114<th class="collection-as-table"><&|/l&>Value</&></th>
115</tr>
116<%PERL>
117{ no strict qw/refs/;
118my %config_opt = map { $_ => 1 } RT->Config->Options( Overridable => undef );
119my $index_var;
120foreach my $key ( sort keys %{*RT::} ) {
121 next if !${'RT::'.$key} || ref ${'RT::'.$key} || $config_opt{ $key };
122 $index_var++;
123</%PERL>
124<tr class="collection-as-table <% $index_var%2 ? 'oddline' : 'evenline'%>">
125<td class="collection-as-table">RT::<% $key %></td>
126<td class="collection-as-table">
127% if ( $key =~ /Password(?!Length)/i ) {
128<em><% loc('Password not printed' ) %></em>\
129% } else {
130<% ${'RT::'.$key} %>
131% }
132</td>
133</tr>
134% }
135% }
136</table>
137</&>
138
139<&|/Widgets/TitleBox, title => loc("RT Size") &>
140<table border="0" cellspacing="0" cellpadding="5" width="100%" class="collection">
141<tr class="collection-as-table">
142<th class="collection-as-table"><&|/l&>Object</&></th>
143<th class="collection-as-table"><&|/l&>Size</&></th>
144</tr>
145<%PERL>
146my ($index_size, $user_count, $privileged_count);
147for my $type (qw/Tickets Queues Transactions Groups PrivilegedUsers UnprivilegedUsers/) {
148 my $count;
149 my $class = 'RT::' . $type;
150 $class =~ s/Privileged|Unprivileged//;
151 my $collection = $class->new(RT->SystemUser);
152 $collection->UnLimit;
af59614d 153 $collection->FindAllRows; # find disabled
84fb5b46
MKG
154 if ($type =~ /PrivilegedUsers/) {
155 $user_count = $collection->CountAll;
156 $collection->LimitToPrivileged;
157 $count = $privileged_count = $collection->CountAll;
158 } elsif ($type =~ /UnprivilegedUsers/) {
159 $count = $user_count - $privileged_count;
160 } else {
161 $count = $collection->CountAll;
162 }
163 $index_size++;
164</%PERL>
165<tr class="<% $index_size%2 ? 'oddline' : 'evenline'%>">
166<td class="collection-as-table"><% $type %></td>
167<td class="collection-as-table"><% $count %></td>
168</tr>
169% }
170</table>
171</&>
172</td>
173<td valign="top" class="boxcontainer">
174
175<&|/Widgets/TitleBox, title => loc("Mason template search order") &>
176<ol>
177% foreach my $path ( RT::Interface::Web->ComponentRoots ) {
178<li><% $path %></li>
179% }
180</ol>
181</&>
182
183<&|/Widgets/TitleBox, title => loc("Perl library search order") &>
184<ol>
185% foreach my $inc (@INC) {
186<li><% $inc %></li>
187% }
188</ol>
189</&>
190
af59614d
MKG
191<&|/Widgets/TitleBox, title=> loc("Loaded config files") &>
192<ol>
193% foreach my $config (RT->Config->LoadedConfigs) {
194% if ($config->{site}) {
195<li><strong><% $config->{filename} %></strong></li>
196% } else {
197<li><% $config->{filename} %></li>
198% }
199% }
200</ol>
201</&>
202
203<&|/Widgets/TitleBox, title=> loc("Logging summary") &>
204 <& /Admin/Elements/LoggingSummary &>
205</&>
206
84fb5b46
MKG
207</td>
208</table>
209
210<&|/Widgets/TitleBox, title => loc("Global Attributes") &>
211<table border="0" cellspacing="0" cellpadding="5" width="100%" class="collection">
212<tr class="collection-as-table">
213<th class="collection-as-table"><&|/l&>Name</&></th>
214<th class="collection-as-table"><&|/l&>Value</&></th>
215</tr>
216% my $attrs = $RT::System->Attributes;
217% my $index_size = 0;
218% while ( my $attr = $attrs->Next ) {
af59614d 219% next if $attr->Name eq 'UpgradeHistory';
84fb5b46
MKG
220<tr class="<% $index_size%2 ? 'oddline' : 'evenline'%>">
221% if ($attr->Name eq 'UserLogo') {
222% my $content = $attr->Content;
223% $content->{data} = defined $content->{data} ? 'DATA' : 'undef'
224% if exists $content->{data};
225<td><% $attr->Name %></td><td><% stringify($content) |n %></td>
226% } else {
227<td><% $attr->Name %></td><td><% stringify($attr->Content) |n %></td>
228% }
229</tr>
230% $index_size++;
231% }
232</table>
233</&>
234
235<&|/Widgets/TitleBox, title => loc("Loaded perl modules")&>
236<table border="0" cellspacing="0" cellpadding="5" width="100%" class="collection">
237<tr class="collection-as-table">
238<th class="collection-as-table"><&|/l&>Module</&></th>
239<th class="collection-as-table"><&|/l&>Version</&></th>
240<th class="collection-as-table"><&|/l&>Source</&></th>
241
242
243<%perl>
244my $i = 0;
245my $report = Module::Versions::Report::report();
246my @report = grep /v\d/, split("\n",$report);
247shift @report; # throw away the perl version
248my ($ver, $source, $distfile);
249foreach my $item (@report) {
250if ($item =~ /^\s*(.*?)\s*v(\S+);/) {
251 $item = $1;
252 $ver = $2;
253 $distfile = $item.".pm";
254 $distfile =~ s|::|/|g;
255}
256</%perl>
257<tr class="<% $i++ %2 ? 'oddline' : 'evenline'%>">
258<td class="collection-as-table"><% $item %></td>
259 <td class="collection-as-table">
260 <%$ver%>
261 </td>
262 <td class="collection-as-table">
263 <% $INC{$distfile} || '' %>
264 </td>
265</tr>
266% }
267</table>
268</&>
269
af59614d
MKG
270<&|/Widgets/TitleBox, title => loc("RT upgrade history")&>
271<& /Admin/Elements/UpgradeHistory &>
272</&>
273
84fb5b46
MKG
274<&|/Widgets/TitleBox, title => loc("Perl configuration") &>
275% require Config;
276<pre>
277<% Config::myconfig() %>
278</pre>
279</&>
280
af59614d
MKG
281<&|/Widgets/TitleBox, title=> loc("Environment variables") &>
282<table border="0" cellspacing="0" cellpadding="5" width="100%" class="collection">
283<tr class="collection-as-table">
284<th class="collection-as-table"><&|/l&>Variable</&></th>
285<th class="collection-as-table"><&|/l&>Value</&></th>
286</tr>
287% my $row = 0;
288% for my $key (sort keys %ENV) {
289<tr class="collection-as-table <% $row++ %2 ? 'oddline' : 'evenline'%>">
290<td class="collection-as-table"><% $key %></td>
291<td class="collection-as-table"><% $ENV{$key} %></td>
292</tr>
293% }
294</table>
295</&>
296
297<&|/Widgets/TitleBox, title => loc("Operating System") &>
298<table border="0" cellspacing="0" cellpadding="5" width="100%" class="collection">
299<tr class="collection-as-table evenline">
300<td class="collection-as-table">Deployment type</td>
301<td class="collection-as-table"><%
302 $INC{'mod_perl.pm'} ? "mod_perl" :
303 $INC{'FCGI.pm'} ? "fastcgi" :
304 "standalone" %>
305</td>
306</tr>
307<%perl>
308my @os = (
309 "Distribution" => 'lsb_release --all',
310 "uname -a" => 'uname -a',
311 "SELinux status" => 'getenforce',
312 "Apache" => [map { "$_ -V" } qw(apache2ctl apachectl httpdctl)],
313 "nginx" => 'nginx -V 2>&1',
314 "lighttpd" => 'lighttpd -V',
315);
316my @os_info;
317
318while (my ($name, $cmd) = splice @os, 0, 2) {
319 $cmd = [$cmd] unless ref $cmd eq 'ARRAY';
320 for my $run (@$cmd) {
321 $run .= " </dev/null";
322 $run .= " 2>/dev/null" unless $run =~ /2>/;
323 my $result = `$run`;
324 if (defined $result and $result =~ /\S/) {
325 push @os_info, $name => $result;
326 last;
327 }
328 }
329}
330my $row = 1;
331</%perl>
332% while (my ($name, $output) = splice @os_info, 0, 2) {
333<tr class="collection-as-table <% $row++ % 2 ? "oddline" : "evenline" %>">
334<td class="collection-as-table"><% $name %></td>
335<td class="collection-as-table" style="white-space: pre-wrap; font-family: monospace"><% $output %></td>
336</tr>
337% }
338</table>
339</&>
340
84fb5b46
MKG
341<%INIT>
342use Data::Dumper;
343local $Data::Dumper::Terse = 1;
344local $Data::Dumper::Indent = 2;
345
346sub stringify {
347 my $value = shift;
348 my $output = Dumper $value;
af59614d 349 RT::Interface::Web::EscapeHTML(\$output);
84fb5b46
MKG
350 $output =~ s/ /&nbsp;/g;
351 $output =~ s!\n!<br />!g;
352 return $output;
353}
354</%INIT>