diff --git a/lib/WebGUI/Asset.pm b/lib/WebGUI/Asset.pm index 5fde8666a..0f11632c7 100644 --- a/lib/WebGUI/Asset.pm +++ b/lib/WebGUI/Asset.pm @@ -350,7 +350,7 @@ around BUILDARGS => sub { } } - my $properties = eval{$session->cache->get(["asset",$assetId,$revisionDate])}; + my $properties = eval{$session->cache->get("asset".$assetId.$revisionDate)}; unless (exists $properties->{assetId}) { # can we get it from cache? my $sql = "select * from asset"; my $where = " where asset.assetId=?"; @@ -368,7 +368,7 @@ around BUILDARGS => sub { $session->errorHandler->error("Asset $assetId $className $revisionDate is missing properties. Consult your database tables for corruption. "); return undef; } - eval{ $session->cache->set(["asset",$assetId,$revisionDate], $properties, 60*60*24) }; + eval{ $session->cache->set("asset".$assetId.$revisionDate, $properties, 60*60*24) }; } if (defined $properties) { @@ -2369,7 +2369,7 @@ sub purgeCache { $stow->delete('assetLineage'); $stow->delete('assetClass'); $stow->delete('assetRevision'); - eval{$self->session->cache->delete(["asset",$self->getId,$self->get("revisionDate")])}; + eval{$self->session->cache->delete("asset".$self->getId.$self->get("revisionDate"))}; } diff --git a/lib/WebGUI/Asset/Snippet.pm b/lib/WebGUI/Asset/Snippet.pm index 78e998c42..3da563f43 100644 --- a/lib/WebGUI/Asset/Snippet.pm +++ b/lib/WebGUI/Asset/Snippet.pm @@ -165,30 +165,6 @@ sub exportGetUrlAsPath { #------------------------------------------------------------------- -=head2 getCache ( $calledAsWebMethod ) - -Overrides the base method to handle Snippet specific caching. - -=head3 $calledAsWebMethod - -If this is true, then change the cache key. - -=cut - -sub getCache { - my $self = shift; - my $calledAsWebMethod = shift; - my $session = $self->session; - my $cacheKey = "view_".$calledAsWebMethod.'_'.$self->getId; - if ($session->env->sslRequest) { - $cacheKey .= '_ssl'; - } - my $cache = WebGUI::Cache->new($session, $cacheKey); - return $cache; -} - -#------------------------------------------------------------------- - =head2 getToolbar ( ) Returns a toolbar with a set of icons that hyperlink to functions that delete, edit, promote, demote, cut, and copy. diff --git a/lib/WebGUI/Asset/Wobject/HttpProxy.pm b/lib/WebGUI/Asset/Wobject/HttpProxy.pm index bc4db5bf2..7affd50e9 100644 --- a/lib/WebGUI/Asset/Wobject/HttpProxy.pm +++ b/lib/WebGUI/Asset/Wobject/HttpProxy.pm @@ -270,8 +270,8 @@ override purgeCache => sub { my $self = shift; my $cache = $self->session->cache; eval { - $cache->delete([$self->proxiedUrl,"URL"]); - $cache->delete([$self->proxiedUrl,"HEADER"]); + $cache->delete($self->proxiedUrl."_URL"); + $cache->delete($self->proxiedUrl."_HEADER"); }; super(); }; @@ -317,8 +317,8 @@ sub view { my $cache = $self->session->cache; if ($requestMethod =~ /^GET$/i) { eval { - $var{header} = $cache->get([$proxiedUrl,'HEADER']); - $var{content} = $cache->get([$proxiedUrl,"URL"]); + $var{header} = $cache->get($proxiedUrl.'_HEADER'); + $var{content} = $cache->get($proxiedUrl."_URL"); }; } @@ -460,8 +460,8 @@ sub view { } unless ($self->cacheTimeout <= 10) { eval{ - $cache->set([$proxiedUrl,'URL'], $var{content}, $self->cacheTimeout); - $cache->set([$proxiedUrl,'HEADER'], $var{header}, $self->cacheTimeout); + $cache->set($proxiedUrl.'URL', $var{content}, $self->cacheTimeout); + $cache->set($proxiedUrl.'HEADER', $var{header}, $self->cacheTimeout); }; } } diff --git a/lib/WebGUI/Asset/Wobject/SyndicatedContent.pm b/lib/WebGUI/Asset/Wobject/SyndicatedContent.pm index c8efaeb82..b7a2ba715 100644 --- a/lib/WebGUI/Asset/Wobject/SyndicatedContent.pm +++ b/lib/WebGUI/Asset/Wobject/SyndicatedContent.pm @@ -115,23 +115,36 @@ Combines all feeds into a single XML::FeedPP object. sub generateFeed { my $self = shift; my $limit = shift || $self->maxHeadlines; + my $session = $self->session; + my ( $log, $cache ) = $session->quick(qw( log cache )); my $feed = XML::FeedPP::Atom->new(); - my $log = $self->session->log; # build one feed out of many my $newlyCached = 0; - my $cache = $self->session->cache; foreach my $url (split(/\s+/, $self->rssUrl)) { $log->info("Processing FEED: ".$url); $url =~ s/^feed:/http:/; if ($self->processMacroInRssUrl) { WebGUI::Macro::process($self->session, \$url); } - my $value = eval{$cache->get($url)}; - unless ($value) { - $value = eval{$cache->setByHttp($url, $self->cacheTimeout)}; - $newlyCached = 1; - } + + my $value = $cache->compute( $url, sub { + my $ua = LWP::UserAgent->new( + env_proxy => 1, + agent => "WebGUI/" . $WebGUI::VERSION, + timeout => 30, + ); + + my $r = $ua->get( $url ); + if ( $r->is_error ) { + $session->log->warn( "Could not get syndicated content from '$url': " . $r->status_line ); + } + else { + $newlyCached = 1; + return $r->decoded_content; + } + }, $self->cacheTimeout ); + # if the content can be downgraded, it is either valid latin1 or didn't have # an HTTP Content-Encoding header. In the second case, XML::FeedPP will take # care of any encoding specified in the XML prolog @@ -142,7 +155,7 @@ sub generateFeed { $feed->merge_item($singleFeed); }; if ($@) { - $log->error("Syndicated Content asset (".$self->getId.") has a bad feed URL (".$url."). Failed with ".$@); + $log->warn("Syndicated Content asset (".$self->getId.") has a bad feed URL (".$url."). Failed with ".$@); } } @@ -159,7 +172,7 @@ sub generateFeed { } } - my %seen = {}; + my %seen = (); my @items = $feed->get_item; $feed->clear_item; ITEM: foreach my $item (@items) { diff --git a/lib/WebGUI/Cache.pm b/lib/WebGUI/Cache.pm index 723460abb..c4d05149c 100644 --- a/lib/WebGUI/Cache.pm +++ b/lib/WebGUI/Cache.pm @@ -457,16 +457,19 @@ sub setByHttp { if ($debug) { $self->session->log->debug("Called setByHttp() with URL $url."); } - my $userAgent = new LWP::UserAgent; - $userAgent->env_proxy; - $userAgent->agent("WebGUI/".$WebGUI::VERSION); - $userAgent->timeout(30); - my $header = new HTTP::Headers; - my $referer = "http://webgui.http.request/".$self->session->env->get("SERVER_NAME").$self->session->env->get("REQUEST_URI"); - chomp $referer; - $header->referer($referer); - my $request = HTTP::Request->new(GET => $url, $header); - my $response = $userAgent->request($request); + + # Why is this being done? + my $referer = "http://webgui.http.request/".$self->session->env->get("SERVER_NAME").$self->session->env->get("REQUEST_URI"); + chomp $referer; + + my $ua = LWP::UserAgent->new( + env_proxy => 1, + agent => "WebGUI/" . $WebGUI::VERSION, + timeout => 30, + default_headers => HTTP::Headers->new( referer => $referer ), + ); + + my $response = $ua->get( $url ); if ($response->is_error) { $self->session->log->error("$url could not be retrieved."); if ($debug) { diff --git a/lib/WebGUI/Operation/Statistics.pm b/lib/WebGUI/Operation/Statistics.pm index 8e9265837..659ecb458 100644 --- a/lib/WebGUI/Operation/Statistics.pm +++ b/lib/WebGUI/Operation/Statistics.pm @@ -182,13 +182,26 @@ sub www_viewStatistics { return $session->privilege->adminOnly() unless canView($session); my ($output, $data); my $i18n = WebGUI::International->new($session); - my $url = "http://update.webgui.org/latest-version.txt"; + + # Get the latest WebGUI version + my $url = "http://update.webgui.org/latest-version.txt"; my $cache = $session->cache; - my $version = eval{$cache->get($url)}; - if (not defined $version) { - $version = eval{$cache->setByHttp($url, 43200)}; - } - chomp $version; + my $value = $cache->compute( $url, sub { + my $ua = LWP::UserAgent->new( + env_proxy => 1, + agent => "WebGUI/" . $WebGUI::VERSION, + timeout => 30, + ); + + my $r = $ua->get( $url ); + if ( $r->is_error ) { + $session->log->warn( "Could not get latest WebGUI version from '$url': " . $r->status_line ); + } + else { + return $r->decoded_content; + } + } ); + $output .= ''; $output .= ''; if ($version ne $WebGUI::VERSION) { diff --git a/lib/WebGUI/Session/Scratch.pm b/lib/WebGUI/Session/Scratch.pm index d6195b7ef..b592b3eb7 100644 --- a/lib/WebGUI/Session/Scratch.pm +++ b/lib/WebGUI/Session/Scratch.pm @@ -65,7 +65,7 @@ sub delete { my $value = delete $self->{_data}{$name}; my $session = $self->session; my $id = $session->getId; - eval{$session->cache->set(["sessionscratch",$id], $self->{_data}, $session->setting->get('sessionTimeout'))}; + eval{$session->cache->set("sessionscratch_".$id, $self->{_data}, $session->setting->get('sessionTimeout'))}; $session->db->write("delete from userSessionScratch where name=? and sessionId=?", [$name, $id]); return $value; } @@ -84,7 +84,7 @@ sub deleteAll { delete $self->{_data}; my $session = $self->session; my $id = $session->getId; - eval{$session->cache->delete(["sessionscratch",$id])}; + eval{$session->cache->delete("sessionscratch_".$id)}; $session->db->write("delete from userSessionScratch where sessionId=?", [$id]); } @@ -198,7 +198,7 @@ The current session. sub new { my ($class, $session) = @_; - my $scratch = eval{$session->cache->get(["sessionscratch",$session->getId])}; + my $scratch = eval{$session->cache->get("sessionscratch_".$session->getId)}; unless (ref $scratch eq "HASH") { $scratch = $session->db->buildHashRef("select name,value from userSessionScratch where sessionId=?",[$session->getId], {noOrder => 1}); } @@ -253,7 +253,7 @@ sub set { $self->{_data}{$name} = $value; my $session = $self->session; my $id = $session->getId; - eval{$session->cache->set(["sessionscratch",$id], $self->{_data}, $session->setting->get('sessionTimeout'))}; + eval{$session->cache->set("sessionscratch_".$id, $self->{_data}, $session->setting->get('sessionTimeout'))}; $session->db->write("replace into userSessionScratch (sessionId, name, value) values (?,?,?)", [$id, $name, $value]); } diff --git a/lib/WebGUI/Session/Var.pm b/lib/WebGUI/Session/Var.pm index 3641ae66f..af98a61c0 100644 --- a/lib/WebGUI/Session/Var.pm +++ b/lib/WebGUI/Session/Var.pm @@ -71,7 +71,7 @@ sub end { my $self = shift; my $session = $self->session; my $id = $self->getId; - eval{$session->cache->delete(['session',$id])}; + eval{$session->cache->delete($id)}; $session->scratch->deleteAll; $session->db->write("delete from userSession where sessionId=?",[$id]); delete $session->{_user}; @@ -176,7 +176,7 @@ sub new { $self->start(1); } else { ##existing session requested - $self->{_var} = eval{$session->cache->get(['session',$sessionId])}; + $self->{_var} = eval{$session->cache->get($sessionId)}; unless ($self->{_var}{sessionId} eq $sessionId) { $self->{_var} = $session->db->quickHashRef("select * from userSession where sessionId=?",[$sessionId]); } @@ -202,7 +202,7 @@ sub new { } else { $self->{_var}{nextCacheFlush} = $time + $session->config->get("hotSessionFlushToDb"); - eval{$session->cache->set(['session',$sessionId], $self->{_var}, $timeout)}; + eval{$session->cache->set($sessionId, $self->{_var}, $timeout)}; } $self->session->{_sessionId} = $self->{_var}{sessionId}; return $self; @@ -264,7 +264,7 @@ sub start { userId => $userId }; $self->session->{_sessionId} = $sessionId; - eval{$session->cache->set(['session',$sessionId], $self->{_var}, $timeout)}; + eval{$session->cache->set($sessionId, $self->{_var}, $timeout)}; delete $self->{_var}{nextCacheFlush}; $session->db->setRow("userSession","sessionId",$self->{_var},$sessionId); $self->{_sessionId} = $sessionId; @@ -283,7 +283,7 @@ sub switchAdminOff { my $self = shift; $self->{_var}{adminOn} = 0; my $session = $self->session; - eval{$session->cache->set(['session',$self->getId], $self->{_var}, $session->setting->get('sessionTimeout'))}; + eval{$session->cache->set($self->getId, $self->{_var}, $session->setting->get('sessionTimeout'))}; delete $self->{_var}{nextCacheFlush}; $session->db->setRow("userSession","sessionId", $self->{_var}); } @@ -300,7 +300,7 @@ sub switchAdminOn { my $self = shift; $self->{_var}{adminOn} = 1; my $session = $self->session; - eval{$session->cache->set(['session',$self->getId], $self->{_var}, $session->setting->get('sessionTimeout'))}; + eval{$session->cache->set($self->getId, $self->{_var}, $session->setting->get('sessionTimeout'))}; delete $self->{_var}{nextCacheFlush}; $self->session->db->setRow("userSession","sessionId", $self->{_var}); } diff --git a/lib/WebGUI/User.pm b/lib/WebGUI/User.pm index f7cba2579..237e5188b 100644 --- a/lib/WebGUI/User.pm +++ b/lib/WebGUI/User.pm @@ -282,7 +282,7 @@ sub cache { for my $k (qw(_userId _user _profile)) { $userData{$k} = $self->{$k}; } - eval{$self->session->cache->set(["user",$self->userId], \%userData, 60*60*24)}; + eval{$self->session->cache->set($self->userId, \%userData, 60*60*24)}; } #------------------------------------------------------------------- @@ -1058,7 +1058,7 @@ sub new { my $userId = shift || 1; my $overrideId = shift; $userId = _create($session, $overrideId) if ($userId eq "new"); - my $self = eval{$session->cache->get(["user",$userId])} || {}; + my $self = eval{$session->cache->get($userId)} || {}; bless $self, $class; $self->{_session} = $session; unless ($self->{_userId} && $self->{_user}{username}) { @@ -1332,7 +1332,7 @@ Deletes this user object out of the cache. sub uncache { my $self = shift; - eval{$self->session->cache->delete(["user",$self->userId])}; + eval{$self->session->cache->delete($self->userId)}; } #---------------------------------------------------------------------------- diff --git a/sbin/testEnvironment.pl b/sbin/testEnvironment.pl index 7a4dc6868..332d458e9 100755 --- a/sbin/testEnvironment.pl +++ b/sbin/testEnvironment.pl @@ -145,6 +145,8 @@ checkModule("Business::PayPal::API", "0.62" ); checkModule("Locales", "0.10" ); checkModule("Test::Harness", "3.17" ); checkModule("DateTime::Event::ICal", "0.10" ); +checkModule( "CHI", ); +checkModule( "Cache::FastMmap", ); failAndExit("Required modules are missing, running no more checks.") if $missingModule;
'.$i18n->get(145).':'.$WebGUI::VERSION.'-'.$WebGUI::STATUS.'