aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthew Somerville <matthew@mysociety.org>2015-02-10 17:10:40 +0000
committerMatthew Somerville <matthew-github@dracos.co.uk>2015-02-13 10:09:33 +0000
commit3571f96251df08dd8a9dda3ec4e1fadf30d6c63d (patch)
tree6cd0d05d06a51dfdcbe183c4c10b38c0a15c6231
parent9591ba909210b2a628237074b54e5eb3c6536856 (diff)
Create timezone objects only once at startup.
Cache a DateTime::TimeZone::Local object, so that in an environment where /etc/localtime is a copy of a timezone file, we don't repeatedly walk all the timezone files to find the matching one.
-rwxr-xr-xbin/send-comments2
-rw-r--r--perllib/FixMyStreet.pm20
-rw-r--r--perllib/FixMyStreet/App/Controller/Dashboard.pm2
-rw-r--r--perllib/FixMyStreet/DB/Result/Alert.pm10
-rw-r--r--perllib/FixMyStreet/DB/Result/Comment.pm10
-rw-r--r--perllib/FixMyStreet/DB/Result/Problem.pm12
-rw-r--r--perllib/FixMyStreet/DB/Result/Questionnaire.pm10
-rw-r--r--perllib/FixMyStreet/DB/ResultSet/AlertType.pm16
-rw-r--r--perllib/FixMyStreet/SendReport.pm3
-rw-r--r--perllib/Utils.pm2
10 files changed, 32 insertions, 55 deletions
diff --git a/bin/send-comments b/bin/send-comments
index 2d6b525b5..fabf2b633 100755
--- a/bin/send-comments
+++ b/bin/send-comments
@@ -145,7 +145,7 @@ while ( my $body = $bodies->next ) {
sub bromley_retry_timeout {
my $row = shift;
- my $tz = DateTime::TimeZone->new( name => 'local' );
+ my $tz = FixMyStreet->local_time_zone;
my $now = DateTime->now( time_zone => $tz );
my $diff = $now - $row->send_fail_timestamp;
if ( $diff->in_units( 'minutes' ) < 30 ) {
diff --git a/perllib/FixMyStreet.pm b/perllib/FixMyStreet.pm
index f3b72c4d0..76760b967 100644
--- a/perllib/FixMyStreet.pm
+++ b/perllib/FixMyStreet.pm
@@ -6,6 +6,7 @@ use warnings;
use Path::Class;
my $ROOT_DIR = file(__FILE__)->parent->parent->absolute->resolve;
+use DateTime::TimeZone;
use Readonly;
use Sub::Override;
@@ -217,4 +218,23 @@ sub get_email_template {
return $template;
}
+my $tz = DateTime::TimeZone->new( name => "local" );
+my $tz_f;
+$tz_f = DateTime::TimeZone->new( name => FixMyStreet->config('TIME_ZONE') )
+ if FixMyStreet->config('TIME_ZONE');
+
+sub local_time_zone {
+ return $tz;
+}
+
+sub time_zone {
+ return $tz_f;
+}
+
+sub set_time_zone {
+ my ($class, $dt) = @_;
+ $dt->set_time_zone($tz);
+ $dt->set_time_zone($tz_f) if $tz_f;
+}
+
1;
diff --git a/perllib/FixMyStreet/App/Controller/Dashboard.pm b/perllib/FixMyStreet/App/Controller/Dashboard.pm
index 25c6e1923..c2b0a2ee2 100644
--- a/perllib/FixMyStreet/App/Controller/Dashboard.pm
+++ b/perllib/FixMyStreet/App/Controller/Dashboard.pm
@@ -128,7 +128,7 @@ sub index : Path : Args(0) {
my $dtf = $c->model('DB')->storage->datetime_parser;
my %counts;
- my $now = DateTime->now( time_zone => 'local' );
+ my $now = DateTime->now( time_zone => FixMyStreet->local_time_zone );
my $t = $now->clone->truncate( to => 'day' );
$counts{wtd} = $c->forward( 'updates_search',
[ $dtf->format_datetime( $t->clone->subtract( days => $t->dow - 1 ) ) ] );
diff --git a/perllib/FixMyStreet/DB/Result/Alert.pm b/perllib/FixMyStreet/DB/Result/Alert.pm
index 4ce72f873..c64cb2ff4 100644
--- a/perllib/FixMyStreet/DB/Result/Alert.pm
+++ b/perllib/FixMyStreet/DB/Result/Alert.pm
@@ -69,24 +69,16 @@ __PACKAGE__->belongs_to(
# You can replace this text with custom code or comments, and it will be preserved on regeneration
-use DateTime::TimeZone;
use Moose;
use namespace::clean -except => [ 'meta' ];
with 'FixMyStreet::Roles::Abuser';
-my $tz = DateTime::TimeZone->new( name => "local" );
-
-my $tz_f;
-$tz_f = DateTime::TimeZone->new( name => FixMyStreet->config('TIME_ZONE') )
- if FixMyStreet->config('TIME_ZONE');
-
my $stz = sub {
my ( $orig, $self ) = ( shift, shift );
my $s = $self->$orig(@_);
return $s unless $s && UNIVERSAL::isa($s, "DateTime");
- $s->set_time_zone($tz);
- $s->set_time_zone($tz_f) if $tz_f;
+ FixMyStreet->set_time_zone($s);
return $s;
};
diff --git a/perllib/FixMyStreet/DB/Result/Comment.pm b/perllib/FixMyStreet/DB/Result/Comment.pm
index 3fae6860a..836462ed5 100644
--- a/perllib/FixMyStreet/DB/Result/Comment.pm
+++ b/perllib/FixMyStreet/DB/Result/Comment.pm
@@ -95,25 +95,17 @@ __PACKAGE__->belongs_to(
__PACKAGE__->load_components("+FixMyStreet::DB::RABXColumn");
__PACKAGE__->rabx_column('extra');
-use DateTime::TimeZone;
use Image::Size;
use Moose;
use namespace::clean -except => [ 'meta' ];
with 'FixMyStreet::Roles::Abuser';
-my $tz = DateTime::TimeZone->new( name => "local" );
-
-my $tz_f;
-$tz_f = DateTime::TimeZone->new( name => FixMyStreet->config('TIME_ZONE') )
- if FixMyStreet->config('TIME_ZONE');
-
my $stz = sub {
my ( $orig, $self ) = ( shift, shift );
my $s = $self->$orig(@_);
return $s unless $s && UNIVERSAL::isa($s, "DateTime");
- $s->set_time_zone($tz);
- $s->set_time_zone($tz_f) if $tz_f;
+ FixMyStreet->set_time_zone($s);
return $s;
};
diff --git a/perllib/FixMyStreet/DB/Result/Problem.pm b/perllib/FixMyStreet/DB/Result/Problem.pm
index 34d740912..3c620ba84 100644
--- a/perllib/FixMyStreet/DB/Result/Problem.pm
+++ b/perllib/FixMyStreet/DB/Result/Problem.pm
@@ -153,7 +153,6 @@ __PACKAGE__->load_components("+FixMyStreet::DB::RABXColumn");
__PACKAGE__->rabx_column('extra');
__PACKAGE__->rabx_column('geocode');
-use DateTime::TimeZone;
use Image::Size;
use Moose;
use namespace::clean -except => [ 'meta' ];
@@ -316,18 +315,11 @@ sub council_states {
return wantarray ? keys %{$states} : $states;
}
-my $tz = DateTime::TimeZone->new( name => "local" );
-
-my $tz_f;
-$tz_f = DateTime::TimeZone->new( name => FixMyStreet->config('TIME_ZONE') )
- if FixMyStreet->config('TIME_ZONE');
-
my $stz = sub {
my ( $orig, $self ) = ( shift, shift );
my $s = $self->$orig(@_);
return $s unless $s && UNIVERSAL::isa($s, "DateTime");
- $s->set_time_zone($tz);
- $s->set_time_zone($tz_f) if $tz_f;
+ FixMyStreet->set_time_zone($s);
return $s;
};
@@ -745,7 +737,7 @@ sub update_from_open311_service_request {
# of course if local timezone is not the one that went into the data
# base then we're also in trouble
my $lastupdate = $self->lastupdate;
- $lastupdate->set_time_zone( DateTime::TimeZone->new( name => 'local' ) );
+ $lastupdate->set_time_zone( FixMyStreet->local_time_zone );
# update from open311 is older so skip
if ( $req_time < $lastupdate ) {
diff --git a/perllib/FixMyStreet/DB/Result/Questionnaire.pm b/perllib/FixMyStreet/DB/Result/Questionnaire.pm
index 7f9c79d9a..6f2941546 100644
--- a/perllib/FixMyStreet/DB/Result/Questionnaire.pm
+++ b/perllib/FixMyStreet/DB/Result/Questionnaire.pm
@@ -43,22 +43,14 @@ __PACKAGE__->belongs_to(
# Created by DBIx::Class::Schema::Loader v0.07035 @ 2013-09-10 17:11:54
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:oL1Hk4/bNG14CY74GA75SA
-use DateTime::TimeZone;
use Moose;
use namespace::clean -except => [ 'meta' ];
-my $tz = DateTime::TimeZone->new( name => "local" );
-
-my $tz_f;
-$tz_f = DateTime::TimeZone->new( name => FixMyStreet->config('TIME_ZONE') )
- if FixMyStreet->config('TIME_ZONE');
-
my $stz = sub {
my ( $orig, $self ) = ( shift, shift );
my $s = $self->$orig(@_);
return $s unless $s && UNIVERSAL::isa($s, "DateTime");
- $s->set_time_zone($tz);
- $s->set_time_zone($tz_f) if $tz_f;
+ FixMyStreet->set_time_zone($s);
return $s;
};
diff --git a/perllib/FixMyStreet/DB/ResultSet/AlertType.pm b/perllib/FixMyStreet/DB/ResultSet/AlertType.pm
index b704fa7dd..ad180cbd5 100644
--- a/perllib/FixMyStreet/DB/ResultSet/AlertType.pm
+++ b/perllib/FixMyStreet/DB/ResultSet/AlertType.pm
@@ -115,24 +115,14 @@ sub email_alerts ($) {
}
$data{data} .= $row->{item_name} . ' : ' if $row->{item_name} && !$row->{item_anonymous};
if ( $cobrand->include_time_in_update_alerts ) {
- # this is basically recreating the code from the inflate wrapper
- # in the database model.
- my $tz;
- if ( FixMyStreet->config('TIME_ZONE') ) {
- $tz = FixMyStreet->config('TIME_ZONE');
- }
-
my $parser = DateTime::Format::Pg->new();
my $dt = $parser->parse_timestamp( $row->{item_confirmed} );
- my $l_tz = DateTime::TimeZone->new( name => "local" );
# We need to always set this otherwise we end up with the DateTime
# object being in the floating timezone in which case applying a
# subsequent timezone set will have no effect.
- $dt->set_time_zone( $l_tz );
- if ( $tz ) {
- my $tz_obj = DateTime::TimeZone->new( name => $tz );
- $dt->set_time_zone( $tz_obj );
- }
+ # this is basically recreating the code from the inflate wrapper
+ # in the database model.
+ FixMyStreet->set_time_zone($dt);
$data{data} .= $cobrand->prettify_dt( $dt, 'alert' ) . "\n\n";
}
$data{data} .= $row->{item_text} . "\n\n------\n\n";
diff --git a/perllib/FixMyStreet/SendReport.pm b/perllib/FixMyStreet/SendReport.pm
index 40e76ef72..9967b0663 100644
--- a/perllib/FixMyStreet/SendReport.pm
+++ b/perllib/FixMyStreet/SendReport.pm
@@ -23,8 +23,7 @@ sub should_skip {
return 0 unless $row->send_fail_count;
- my $tz = DateTime::TimeZone->new( name => 'local' );
- my $now = DateTime->now( time_zone => $tz );
+ my $now = DateTime->now( time_zone => FixMyStreet->local_time_zone );
my $diff = $now - $row->send_fail_timestamp;
my $backoff = $row->send_fail_count > 1 ? 30 : 5;
diff --git a/perllib/Utils.pm b/perllib/Utils.pm
index 7f95d1f5a..87e0bd7c9 100644
--- a/perllib/Utils.pm
+++ b/perllib/Utils.pm
@@ -225,7 +225,7 @@ sub prettify_dt {
$type ||= '';
$type = 'short' if $type eq '1';
- my $now = DateTime->now( time_zone => FixMyStreet->config('TIME_ZONE') || 'local' );
+ my $now = DateTime->now( time_zone => FixMyStreet->time_zone || FixMyStreet->local_time_zone );
my $tt = '';
return "[unknown time]" unless ref $dt;