Moved the offline executables to "sbin". Updated testEnvironment.pl to test all of the conf files in etc.

This commit is contained in:
JT Smith 2002-05-29 17:20:51 +00:00
parent 4ba70f123e
commit 2671feae26
4 changed files with 487 additions and 0 deletions

View file

@ -7,6 +7,11 @@ upgrading from one version to the next, or even between multiple
versions. Be sure to heed the warnings contained herein as they will versions. Be sure to heed the warnings contained herein as they will
save you many hours of grief. save you many hours of grief.
3.9.0
--------------------------------------------------------------------
* The offline executables (runHourly.pl, testEnvironment.pl,
and preload.perl) have been moved to the sbin folder.
3.8.0 3.8.0
-------------------------------------------------------------------- --------------------------------------------------------------------
* Widgets are being replaced with Wobjects. Any custom widgets * Widgets are being replaced with Wobjects. Any custom widgets

36
sbin/preload.perl Normal file
View file

@ -0,0 +1,36 @@
#! /usr/bin/perl
use strict;
use lib "/data/WebGUI/lib";
print "Staring WebGUI ".$WebGUI::VERSION."\t\t";
$ENV{GATEWAY_INTERFACE} =~ /^CGI-Perl/ or die "GATEWAY_INTERFACE not Perl!";
use Apache::Registry ();
use Apache::DBI ();
use CGI (); CGI->compile(':all');
use CGI::Carp ();
use DBI ();
use DBD::mysql ();
use URI::Escape ();
#use HTML::Parser (); # commented because it is causing problems with attachments
use Data::Config ();
use Date::Calc ();
use HTML::CalendarMonthSimple ();
eval "use Image::Magick ();"; # eval, may not be installed
use Tie::CPHash ();
use Tie::IxHash ();
use Net::LDAP ();
use Net::SMTP ();
use File::Copy ();
use File::Path ();
use FileHandle ();
#use HTML::TagFilter (); # commented because it is causing problems with attachments
use POSIX ();
use WebGUI ();
print "[ OK ]";
1;

85
sbin/runHourly.pl Normal file
View file

@ -0,0 +1,85 @@
#-------------------------------------------------------------------
# WebGUI is Copyright 2001-2002 Plain Black Software.
#-------------------------------------------------------------------
# Please read the legal notices (docs/legal.txt) and the license
# (docs/license.txt) that came with this distribution before using
# this software.
#-------------------------------------------------------------------
# http://www.plainblack.com info@plainblack.com
#-------------------------------------------------------------------
BEGIN {
unshift (@INC, "../lib");
}
use DBI;
use HTTP::Request;
use LWP::UserAgent;
use strict;
use Data::Config;
use WebGUI::SQL;
use RSSLite;
my $config = new Data::Config '../etc/WebGUI.conf';
our $dbh = DBI->connect($config->param('dsn'), $config->param('dbuser'), $config->param('dbpass'));
deleteExpiredSessions();
updateSyndicatedContent();
$dbh->disconnect();
#-------------------------------------------------------------------
sub deleteExpiredSessions {
WebGUI::SQL->write("delete from userSession where expires<".time(),$dbh);
}
#-------------------------------------------------------------------
sub getRSS {
my ($userAgent, $request, $response, $content, %result);
$userAgent = new LWP::UserAgent;
$request = new HTTP::Request (GET => $_[0]);
$response = $userAgent->request($request);
$content = $response->content;
parseXML(\%result, \$content);
return %result;
}
#-------------------------------------------------------------------
sub generateHTML {
my (%rss, $html, $item);
%rss = @_;
$html = $rss{title};
$html = '<a href="'.$rss{link}.'" target="_blank">'.$html.'</a>' if ($rss{link});
$html = '<h1>'.$html.'</h1>';
$html .= $rss{description}.'<p>' if ($rss{description});
foreach $item (@{$rss{items}}) {
$html .= '<li>';
if ($item->{link}) {
$html .= '<a href="'.$item->{link}.'" target="_blank">'.$item->{title}.'</a>';
} else {
$html .= $item->{title};
}
$html .= ' - '.$item->{description} if ($item->{description});
$html .= '<br>';
}
return ($html);
}
#-------------------------------------------------------------------
sub updateSyndicatedContent {
my ($sth, @data, %rss, $html);
$sth = WebGUI::SQL->read("select wobject.wobjectId, SyndicatedContent.rssURL, SyndicatedContent.content from wobject,SyndicatedContent where wobject.wobjectId=SyndicatedContent.wobjectId and wobject.pageId<>3",$dbh);
while (@data = $sth->array) {
%rss = getRSS($data[1]);
$html = generateHTML(%rss);
if ($html ne "") {
WebGUI::SQL->write("update SyndicatedContent set content=".$dbh->quote($html).", lastFetched=".time()." where wobjectId=$data[0]",$dbh);
} elsif (substr($data[2],6) ne "Unable" && substr($data[2],7) ne "Not yet") {
# then just leave the existing content in place
} else {
WebGUI::SQL->write("update SyndicatedContent set content='Unable to fetch content. Perhaps the RSS is improperly formated.', lastFetched=".time()." where wobjectId=$data[0]",$dbh);
}
}
$sth->finish;
}

361
sbin/testEnvironment.pl Normal file
View file

@ -0,0 +1,361 @@
#-------------------------------------------------------------------
# WebGUI is Copyright 2001-2002 Plain Black Software.
#-------------------------------------------------------------------
# Please read the legal notices (docs/legal.txt) and the license
# (docs/license.txt) that came with this distribution before using
# this software.
#-------------------------------------------------------------------
# http://www.plainblack.com info@plainblack.com
#-------------------------------------------------------------------
# Yeah if you're looking at this code you're probably thinking to
# yourself, "What a #$@*ing mess!" That's what we think too. But
# if you know Perl well enough to know that this sux, then you
# probably don't need to use this script cuz you know how to
# install Perl modules and such.
our $webguiRoot;
BEGIN {
$webguiRoot = $ARGV[0] || "/data/WebGUI";
unshift (@INC, $webguiRoot."/lib");
}
use strict;
use CPAN;
print "\nWebGUI is checking your system environment:\n\n";
my ($os, $prereq, $dbi);
$prereq = 1;
if ($^O =~ /Win/i) {
$os = "Microsoftish";
} else {
$os = "Linuxish";
}
print "Operating System.........................".$os."\n";
print "WebGUI Root..............................".$webguiRoot."\n";
###################################
# Checking Perl
###################################
print "Perl Interpreter.........................";
if ($] >= 5.006) {
print "OK\n";
} else {
print "Please upgrade to 5.6 or later!\n";
print "Test environment exiting, cannot continue without Perl 5.6.\n";
exit;
}
print "LWP module...............................";
if (eval { require LWP }) {
print "OK\n";
} else {
if ($< == 0 && $os eq "Linuxish") {
print "Installing...\n";
CPAN::Shell->install("LWP");
} else {
print "Please install.\n";
$prereq = 0;
}
}
print "HTTP::Request module.....................";
if (eval { require HTTP::Request }) {
print "OK\n";
} else {
print "Please install LWP.\n";
$prereq = 0;
}
print "HTTP::Headers module.....................";
if (eval { require HTTP::Headers }) {
print "OK\n";
} else {
print "Please install LWP.\n";
$prereq = 0;
}
print "Digest::MD5 module.......................";
if (eval { require Digest::MD5 }) {
print "OK\n";
} else {
if ($< == 0 && $os eq "Linuxish") {
print "Installing...\n";
CPAN::Shell->install("Digest::MD5");
} else {
print "Please install.\n";
$prereq = 0;
}
}
my $dbi;
print "DBI module...............................";
if (eval { require DBI }) {
print "OK\n";
$dbi = 1;
} else {
if ($< == 0 && $os eq "Linuxish") {
print "Installing...\n";
CPAN::Shell->install("DBI");
eval {require DBI};
$dbi = 1;
} else {
print "Please install.\n";
$prereq = 0;
$dbi = 0;
}
}
print "Avalable database drivers................";
if ($dbi) {
print join(", ",DBI->available_drivers);
} else {
print "None";
$prereq = 0;
}
print "\n";
print "HTML::Parser module......................";
if (eval { require HTML::Parser }) {
print "OK\n";
} else {
if ($< == 0 && $os eq "Linuxish") {
print "Installing...\n";
CPAN::Shell->install("HTML::Parser");
} else {
print "Please install.\n";
$prereq = 0;
}
}
print "Tie::IxHash module.......................";
if (eval { require Tie::IxHash }) {
print "OK\n";
} else {
if ($< == 0 && $os eq "Linuxish") {
print "Installing...\n";
CPAN::Shell->install("Tie::IxHash");
} else {
print "Please install.\n";
$prereq = 0;
}
}
print "Tie::CPHash module.......................";
if (eval { require Tie::CPHash }) {
print "OK\n";
} else {
if ($< == 0 && $os eq "Linuxish") {
print "Installing...\n";
CPAN::Shell->install("Tie::CPHash");
} else {
print "Please install.\n";
$prereq = 0;
}
}
print "Net::SMTP module.........................";
if (eval { require Net::SMTP }) {
print "OK\n";
} else {
if ($< == 0 && $os eq "Linuxish") {
print "Installing...\n";
CPAN::Shell->install("Net::SMTP");
} else {
print "Please install.\n";
$prereq = 0;
}
}
print "Net::LDAP module.........................";
if (eval { require Net::LDAP }) {
print "OK\n";
} else {
if ($< == 0 && $os eq "Linuxish") {
print "Installing...\n";
CPAN::Shell->install("Net::LDAP");
} else {
print "Please install.\n";
$prereq = 0;
}
}
print "Date::Calc module........................";
if (eval { require Date::Calc }) {
print "OK\n";
} else {
if ($< == 0 && $os eq "Linuxish") {
print "Installing...\n";
CPAN::Shell->install("Date::Calc");
} else {
print "Please install.\n";
$prereq = 0;
}
}
print "HTML::CalendarMonthSimple module.........";
if (eval { require HTML::CalendarMonthSimple }) {
print "OK\n";
} else {
if ($< == 0 && $os eq "Linuxish") {
print "Installing...\n";
CPAN::Shell->install("HTML::CalendarMonthSimple");
} else {
print "Please install.\n";
$prereq = 0;
}
}
print "Image::Magick module.....................";
if (eval { require Image::Magick }) {
print "OK\n";
} else {
print "Please install or thumbnailing will be disabled.\n";
}
print "Apache::DBI module.......................";
if (eval { require Apache::DBI }) {
print "OK\n";
} else {
print "Please install if you want to use the mod_perl preloader.\n";
}
# this is here to insure they installed correctly.
if ($prereq) {
print "WebGUI modules...........................";
if (eval { require WebGUI } && eval { require WebGUI::SQL }) {
print "OK\n";
} else {
print "Not Found. Perhaps you're running this script in the wrong place.\n";
$prereq = 0;
}
print "Data::Config module......................";
if (eval { require Data::Config }) {
print "OK\n";
} else {
print "Not Found. Perhaps you're running this script in the wrong place.\n";
$prereq = 0;
}
print "HTML::TagFilter module...................";
if (eval { require HTML::TagFilter }) {
print "OK\n";
} else {
print "Not Found. Perhaps you're running this script in the wrong place.\n";
$prereq = 0;
}
} else {
print "Cannot continue without prerequisites.\n";
exit;
}
unless ($prereq) {
print "Cannot continue without WebGUI files.\n";
exit;
}
my (@files, $file, $dir, $error);
if ($os eq "Windowsish") {
$dir = $webguiRoot."\\etc\\";
} else {
$dir = $webguiRoot."/etc/";
}
opendir (DIR,$dir) or $error = "Can't open etc (".$dir.") directory!";
if ($error ne "") {
print $error."\nCannot continue.\n";
exit;
} else {
@files = readdir(DIR);
foreach $file (@files) {
if ($file =~ /(.*?)\.conf$/ && $file ne "some_other_site.conf") {
###################################
# Checking Config File
###################################
print "Found config file........................".$file."\n";
print "Verifying file...........................";
my ($config);
$config = new Data::Config $dir.$file;
unless (defined $config) {
print "Couldn't open it.";
$prereq = 0;
} elsif ($config->param('dsn') =~ /\s$/) {
print "DSN cannot end with a space.";
$prereq = 0;
} elsif ($config->param('dsn') !~ /\DBI\:\w+\:\w+/) {
print "DSN is improperly formatted.";
$prereq = 0;
} elsif ($config->param('dbuser') =~ /\s$/) {
print "dbuser cannot end with a space.";
$prereq = 0;
} elsif ($config->param('dbuser') =~ /\s$/) {
print "dbpass cannot end with a space.";
$prereq = 0;
} else {
print "OK\n";
}
unless ($prereq) {
print " Skipping this configuration.\n";
$prereq = 1;
} else {
###################################
# Checking database
###################################
print "Database connection......................";
my ($dbh, $test);
unless (eval {$dbh = DBI->connect($config->param('dsn'),$config->param('dbuser'),$config->param('dbpass'))}) {
print "Can't connect with info provided. Skipping.\n";
} else {
print "OK\n";
$dbh->disconnect();
}
}
}
}
closedir(DIR);
}
###################################
# Checking Version
###################################
print "Latest version...........................";
my ($header, $userAgent, $request, $response, $version, $referer);
$userAgent = new LWP::UserAgent;
$userAgent->agent("WebGUI-Check/2.0");
$userAgent->timeout(30);
$header = new HTTP::Headers;
$referer = "http://webgui.cli.getversion/".`hostname`;
chomp $referer;
$header->referer($referer);
$request = new HTTP::Request (GET => "http://www.plainblack.com/downloads/latest-version.txt", $header);
$response = $userAgent->request($request);
$version = $response->content;
chomp $version;
if ($response->is_error) {
print "Couldn't connect to Plain Black Software. Check your connection and try again.\n";
} elsif ($version eq $WebGUI::VERSION) {
print "OK\n";
} else {
print "You are using ".$WebGUI::VERSION." and ".$version." is available.\n";
}
print "\nTesting complete!\n";