summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorlpsolit%gmail.com <>2007-03-17 02:27:44 +0100
committerlpsolit%gmail.com <>2007-03-17 02:27:44 +0100
commitf8fd2befb9b33967beb35d8e86a57f0de9b326e5 (patch)
tree4867cea3c1539e822abab4c4ea66f001e6516513
parent832b52161f35aaa7ddf03168b540c5867f33dfe8 (diff)
downloadbugzilla-f8fd2befb9b33967beb35d8e86a57f0de9b326e5.tar.gz
bugzilla-f8fd2befb9b33967beb35d8e86a57f0de9b326e5.tar.xz
Bug 45207: Automated sanity check that can send an e-mail if there are problems - Patch by Frédéric Buclin <LpSolit@gmail.com> r=mkanat a=LpSolit
-rw-r--r--Bugzilla/Install/Filesystem.pm1
-rwxr-xr-xsanitycheck.cgi35
-rw-r--r--sanitycheck.pl70
-rw-r--r--template/en/default/email/sanitycheck.txt.tmpl37
4 files changed, 134 insertions, 9 deletions
diff --git a/Bugzilla/Install/Filesystem.pm b/Bugzilla/Install/Filesystem.pm
index c13df2893..e38270032 100644
--- a/Bugzilla/Install/Filesystem.pm
+++ b/Bugzilla/Install/Filesystem.pm
@@ -110,6 +110,7 @@ sub FILESYSTEM {
'whine.pl' => { perms => $ws_executable },
'customfield.pl' => { perms => $owner_executable },
'email_in.pl' => { perms => $ws_executable },
+ 'sanitycheck.pl' => { perms => $ws_executable },
'docs/makedocs.pl' => { perms => $owner_executable },
'docs/rel_notes.txt' => { perms => $ws_readable },
diff --git a/sanitycheck.cgi b/sanitycheck.cgi
index 873432fb9..8be69dec6 100755
--- a/sanitycheck.cgi
+++ b/sanitycheck.cgi
@@ -45,8 +45,19 @@ sub get_string {
sub Status {
my ($san_tag, $vars, $alert) = @_;
- my $start_tag = $alert ? '<p class="alert">' : '<p>';
- print $start_tag . get_string($san_tag, $vars) . "</p>\n";
+ my $cgi = Bugzilla->cgi;
+ return if (!$alert && Bugzilla->usage_mode == USAGE_MODE_CMDLINE && !$cgi->param('verbose'));
+
+ if (Bugzilla->usage_mode == USAGE_MODE_CMDLINE) {
+ my $output = $cgi->param('output') || '';
+ my $linebreak = $alert ? "\nALERT: " : "\n";
+ $cgi->param('error_found', 1) if $alert;
+ $cgi->param('output', $output . $linebreak . get_string($san_tag, $vars));
+ }
+ else {
+ my $start_tag = $alert ? '<p class="alert">' : '<p>';
+ print $start_tag . get_string($san_tag, $vars) . "</p>\n";
+ }
}
###########################################################################
@@ -60,7 +71,7 @@ my $dbh = Bugzilla->dbh;
my $template = Bugzilla->template;
my $vars = {};
-print $cgi->header();
+print $cgi->header() unless Bugzilla->usage_mode == USAGE_MODE_CMDLINE;
# Make sure the user is authorized to access sanitycheck.cgi.
# As this script can now alter the group_control_map table, we no longer
@@ -71,8 +82,10 @@ $user->in_group("editcomponents")
action => "run",
object => "sanity_check"});
-$template->process('admin/sanitycheck/list.html.tmpl', $vars)
- || ThrowTemplateError($template->error());
+unless (Bugzilla->usage_mode == USAGE_MODE_CMDLINE) {
+ $template->process('admin/sanitycheck/list.html.tmpl', $vars)
+ || ThrowTemplateError($template->error());
+}
###########################################################################
# Users with 'editkeywords' privs only can only check keywords.
@@ -234,8 +247,10 @@ if ($cgi->param('rescanallBugMail')) {
Status('send_bugmail_end') if scalar(@$list);
- $template->process('global/footer.html.tmpl', $vars)
- || ThrowTemplateError($template->error());
+ unless (Bugzilla->usage_mode == USAGE_MODE_CMDLINE) {
+ $template->process('global/footer.html.tmpl', $vars)
+ || ThrowTemplateError($template->error());
+ }
exit;
}
@@ -937,5 +952,7 @@ if (scalar(@$badbugs > 0)) {
Status('checks_completed');
-$template->process('global/footer.html.tmpl', $vars)
- || ThrowTemplateError($template->error());
+unless (Bugzilla->usage_mode == USAGE_MODE_CMDLINE) {
+ $template->process('global/footer.html.tmpl', $vars)
+ || ThrowTemplateError($template->error());
+}
diff --git a/sanitycheck.pl b/sanitycheck.pl
new file mode 100644
index 000000000..5c383e67d
--- /dev/null
+++ b/sanitycheck.pl
@@ -0,0 +1,70 @@
+#!/usr/bin/perl -w
+# -*- Mode: perl; indent-tabs-mode: nil -*-
+#
+# The contents of this file are subject to the Mozilla Public
+# License Version 1.1 (the "License"); you may not use this file
+# except in compliance with the License. You may obtain a copy of
+# the License at http://www.mozilla.org/MPL/
+#
+# Software distributed under the License is distributed on an "AS
+# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+# implied. See the License for the specific language governing
+# rights and limitations under the License.
+#
+# The Original Code is the Bugzilla Bug Tracking System.
+#
+# The Initial Developer of the Original Code is Frédéric Buclin.
+# Portions created by Frédéric Buclin are Copyright (C) 2007
+# Frédéric Buclin. All Rights Reserved.
+#
+# Contributor(s): Frédéric Buclin <LpSolit@gmail.com>
+
+use strict;
+
+use lib qw(.);
+
+use Bugzilla;
+use Bugzilla::Constants;
+use Bugzilla::Error;
+use Bugzilla::User;
+use Bugzilla::Mailer;
+
+use Getopt::Long;
+
+my $verbose = 0; # Return all comments if true, else errors only.
+my $login = ''; # Login name of the user which is used to call sanitycheck.cgi.
+
+my $result = GetOptions('verbose' => \$verbose, 'login=s' => \$login);
+
+Bugzilla->usage_mode(USAGE_MODE_CMDLINE);
+
+# Be sure a login name if given.
+$login || ThrowUserError('invalid_username');
+
+my $user = new Bugzilla::User({ name => $login })
+ || ThrowUserError('invalid_username', { name => $login });
+
+my $cgi = Bugzilla->cgi;
+my $template = Bugzilla->template;
+
+# Authenticate using this user account.
+Bugzilla->set_user($user);
+
+# Pass this param to sanitycheck.cgi.
+$cgi->param('verbose', $verbose);
+
+require 'sanitycheck.cgi';
+
+# Now it's time to send an email to the user if there is something to notify.
+if ($cgi->param('output')) {
+ my $message;
+ my $vars = {};
+ $vars->{'addressee'} = $user->email;
+ $vars->{'output'} = $cgi->param('output');
+ $vars->{'error_found'} = $cgi->param('error_found') ? 1 : 0;
+
+ $template->process('email/sanitycheck.txt.tmpl', $vars, \$message)
+ || ThrowTemplateError($template->error());
+
+ MessageToMTA($message);
+}
diff --git a/template/en/default/email/sanitycheck.txt.tmpl b/template/en/default/email/sanitycheck.txt.tmpl
new file mode 100644
index 000000000..fd5b9151b
--- /dev/null
+++ b/template/en/default/email/sanitycheck.txt.tmpl
@@ -0,0 +1,37 @@
+[%# 1.0@bugzilla.org %]
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): Frédéric Buclin <LpSolit@gmail.com>
+ #%]
+
+[% PROCESS "global/variables.none.tmpl" %]
+From: [% Param('mailfrom') %]
+To: [% addressee %]
+Subject: [[% terms.Bugzilla %]] Sanity Check Results
+X-Bugzilla-Type: sanitycheck
+
+[%+ Param('urlbase') %]sanitycheck.cgi
+
+Below can you read the sanity check results.
+[% IF error_found %]
+Some errors have been found.
+[% ELSE %]
+No errors have been found.
+[% END %]
+
+[% output FILTER txt %]