From f8fd2befb9b33967beb35d8e86a57f0de9b326e5 Mon Sep 17 00:00:00 2001 From: "lpsolit%gmail.com" <> Date: Sat, 17 Mar 2007 01:27:44 +0000 Subject: Bug 45207: Automated sanity check that can send an e-mail if there are problems - Patch by Frédéric Buclin r=mkanat a=LpSolit MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Bugzilla/Install/Filesystem.pm | 1 + sanitycheck.cgi | 35 +++++++++---- sanitycheck.pl | 70 ++++++++++++++++++++++++++ template/en/default/email/sanitycheck.txt.tmpl | 37 ++++++++++++++ 4 files changed, 134 insertions(+), 9 deletions(-) create mode 100644 sanitycheck.pl create mode 100644 template/en/default/email/sanitycheck.txt.tmpl 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 ? '

' : '

'; - print $start_tag . get_string($san_tag, $vars) . "

\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 ? '

' : '

'; + print $start_tag . get_string($san_tag, $vars) . "

\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 + +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 + #%] + +[% 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 %] -- cgit v1.2.3-24-g4f1b