]>
Commit | Line | Data |
---|---|---|
84fb5b46 MKG |
1 | %# BEGIN BPS TAGGED BLOCK {{{ |
2 | %# | |
3 | %# COPYRIGHT: | |
4 | %# | |
320f0092 | 5 | %# This software is Copyright (c) 1996-2014 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> | |
49 | require Module::Versions::Report; | |
50 | my $title = loc('System Configuration'); | |
51 | unless ($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> | |
66 | my $index_conf; | |
67 | foreach 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/; | |
118 | my %config_opt = map { $_ => 1 } RT->Config->Options( Overridable => undef ); | |
119 | my $index_var; | |
120 | foreach 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> | |
146 | my ($index_size, $user_count, $privileged_count); | |
147 | for 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> | |
244 | my $i = 0; | |
245 | my $report = Module::Versions::Report::report(); | |
246 | my @report = grep /v\d/, split("\n",$report); | |
247 | shift @report; # throw away the perl version | |
248 | my ($ver, $source, $distfile); | |
249 | foreach my $item (@report) { | |
250 | if ($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> | |
308 | my @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 | ); | |
316 | my @os_info; | |
317 | ||
318 | while (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 | } | |
330 | my $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> |
342 | use Data::Dumper; | |
343 | local $Data::Dumper::Terse = 1; | |
344 | local $Data::Dumper::Indent = 2; | |
345 | ||
346 | sub stringify { | |
347 | my $value = shift; | |
348 | my $output = Dumper $value; | |
af59614d | 349 | RT::Interface::Web::EscapeHTML(\$output); |
84fb5b46 MKG |
350 | $output =~ s/ / /g; |
351 | $output =~ s!\n!<br />!g; | |
352 | return $output; | |
353 | } | |
354 | </%INIT> |