fix composite cache keys and remove setByHttp

This commit is contained in:
Doug Bell 2010-04-19 14:58:35 -05:00
parent 43413fe75c
commit 92cd204b31
10 changed files with 78 additions and 71 deletions

View file

@ -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"))};
}

View file

@ -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.

View file

@ -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);
};
}
}

View file

@ -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) {

View file

@ -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) {

View file

@ -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 .= '<table>';
$output .= '<tr><td align="right" class="tableHeader">'.$i18n->get(145).':</td><td class="tableData">'.$WebGUI::VERSION.'-'.$WebGUI::STATUS.'</td></tr>';
if ($version ne $WebGUI::VERSION) {

View file

@ -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]);
}

View file

@ -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});
}

View file

@ -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)};
}
#----------------------------------------------------------------------------