]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 45207: Automated sanity check that can send an e-mail if there are problems ...
authorlpsolit%gmail.com <>
Sat, 17 Mar 2007 01:27:44 +0000 (01:27 +0000)
committerlpsolit%gmail.com <>
Sat, 17 Mar 2007 01:27:44 +0000 (01:27 +0000)
Bugzilla/Install/Filesystem.pm
sanitycheck.cgi
sanitycheck.pl [new file with mode: 0644]
template/en/default/email/sanitycheck.txt.tmpl [new file with mode: 0644]

index c13df2893e65a03e97f3321df76e0f9f92be530d..e382700325ceabbb6ee26191257126a9cfc0bd2f 100644 (file)
@@ -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 },
index 873432fb9ace048f50086be615f5ba5d93d6e181..8be69dec6d06fad117ef0c7894d23a6ce649dd4e 100755 (executable)
@@ -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 (file)
index 0000000..5c383e6
--- /dev/null
@@ -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 (file)
index 0000000..fd5b915
--- /dev/null
@@ -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 %]