aboutsummaryrefslogtreecommitdiff
path: root/perl
diff options
context:
space:
mode:
authorRuss Allbery <eagle@eyrie.org>2014-07-15 16:50:13 -0700
committerRuss Allbery <rra@stanford.edu>2014-07-15 21:10:16 -0700
commit6d7b65a912e6ea7e36d3ea5121bea2f427de453f (patch)
tree8365b87e9ad1539f8f3b89d3e251df1eebc17fdd /perl
parent284b4a8201ef5cfcf44e9571ab155425b4e6a44f (diff)
Use DateTime objects in the database layer, not strings
Pass in DateTime objects for the date fields in the database instead of formatted time strings. This provides better compatibility with different database engines. Document in README the need to install the DateTime::Format::* module corresponding to the DBD::* module used for the server database. Change-Id: Id25796da718d734ac96ca27ccea9045b0c80c03f Reviewed-on: https://gerrit.stanford.edu/1551 Reviewed-by: Russ Allbery <rra@stanford.edu> Tested-by: Russ Allbery <rra@stanford.edu>
Diffstat (limited to 'perl')
-rw-r--r--perl/lib/Wallet/ACL.pm13
-rw-r--r--perl/lib/Wallet/Object/Base.pm28
2 files changed, 21 insertions, 20 deletions
diff --git a/perl/lib/Wallet/ACL.pm b/perl/lib/Wallet/ACL.pm
index 9507c64..57097c0 100644
--- a/perl/lib/Wallet/ACL.pm
+++ b/perl/lib/Wallet/ACL.pm
@@ -17,13 +17,13 @@ use strict;
use warnings;
use vars qw($VERSION);
+use DateTime;
use DBI;
-use POSIX qw(strftime);
# This version should be increased on any code change to this module. Always
# use two digits for the minor version with a leading zero if necessary so
# that it will sort properly.
-$VERSION = '0.07';
+$VERSION = '0.08';
##############################################################################
# Constructors
@@ -78,7 +78,7 @@ sub create {
die "unable to retrieve new ACL ID" unless defined $id;
# Add to the history table.
- my $date = strftime ('%Y-%m-%d %T', localtime $time);
+ my $date = DateTime->from_epoch (epoch => $time);
%record = (ah_acl => $id,
ah_action => 'create',
ah_by => $user,
@@ -86,7 +86,6 @@ sub create {
ah_on => $date);
my $history = $schema->resultset('AclHistory')->create (\%record);
die "unable to create new history entry" unless defined $history;
-
$guard->commit;
};
if ($@) {
@@ -164,13 +163,14 @@ sub log_acl {
unless ($action =~ /^(add|remove)\z/) {
die "invalid history action $action";
}
+ my $date = DateTime->from_epoch (epoch => $time);
my %record = (ah_acl => $self->{id},
ah_action => $action,
ah_scheme => $scheme,
ah_identifier => $identifier,
ah_by => $user,
ah_from => $host,
- ah_on => strftime ('%Y-%m-%d %T', localtime $time));
+ ah_on => $date);
$self->{schema}->resultset('AclHistory')->create (\%record);
}
@@ -242,11 +242,12 @@ sub destroy {
$entry->delete if defined $entry;
# Create new history line for the deletion.
+ my $date = DateTime->from_epoch (epoch => $time);
my %record = (ah_acl => $self->{id},
ah_action => 'destroy',
ah_by => $user,
ah_from => $host,
- ah_on => strftime ('%Y-%m-%d %T', localtime $time));
+ ah_on => $date);
$self->{schema}->resultset('AclHistory')->create (\%record);
$guard->commit;
};
diff --git a/perl/lib/Wallet/Object/Base.pm b/perl/lib/Wallet/Object/Base.pm
index a009d76..f1b8b72 100644
--- a/perl/lib/Wallet/Object/Base.pm
+++ b/perl/lib/Wallet/Object/Base.pm
@@ -17,15 +17,15 @@ use strict;
use warnings;
use vars qw($VERSION);
+use DateTime;
use DBI;
-use POSIX qw(strftime);
use Text::Wrap qw(wrap);
use Wallet::ACL;
# This version should be increased on any code change to this module. Always
# use two digits for the minor version with a leading zero if necessary so
# that it will sort properly.
-$VERSION = '0.06';
+$VERSION = '0.07';
##############################################################################
# Constructors
@@ -63,22 +63,20 @@ sub create {
die "invalid object name\n" unless $name;
my $guard = $schema->txn_scope_guard;
eval {
+ my $date = DateTime->from_epoch (epoch => $time);
my %record = (ob_type => $type,
ob_name => $name,
ob_created_by => $user,
ob_created_from => $host,
- ob_created_on => strftime ('%Y-%m-%d %T',
- localtime $time));
+ ob_created_on => $date);
$schema->resultset('Object')->create (\%record);
-
%record = (oh_type => $type,
oh_name => $name,
oh_action => 'create',
oh_by => $user,
oh_from => $host,
- oh_on => strftime ('%Y-%m-%d %T', localtime $time));
+ oh_on => $date);
$schema->resultset('ObjectHistory')->create (\%record);
-
$guard->commit;
};
if ($@) {
@@ -139,27 +137,27 @@ sub log_action {
# assume that AutoCommit is turned off.
my $guard = $self->{schema}->txn_scope_guard;
eval {
+ my $date = DateTime->from_epoch (epoch => $time);
my %record = (oh_type => $self->{type},
oh_name => $self->{name},
oh_action => $action,
oh_by => $user,
oh_from => $host,
- oh_on => strftime ('%Y-%m-%d %T', localtime $time));
+ oh_on => $date);
$self->{schema}->resultset('ObjectHistory')->create (\%record);
+ # Add in more timestamps based on the action type.
my %search = (ob_type => $self->{type},
ob_name => $self->{name});
my $object = $self->{schema}->resultset('Object')->find (\%search);
if ($action eq 'get') {
$object->ob_downloaded_by ($user);
$object->ob_downloaded_from ($host);
- $object->ob_downloaded_on (strftime ('%Y-%m-%d %T',
- localtime $time));
+ $object->ob_downloaded_on ($date);
} elsif ($action eq 'store') {
$object->ob_stored_by ($user);
$object->ob_stored_from ($host);
- $object->ob_stored_on (strftime ('%Y-%m-%d %T',
- localtime $time));
+ $object->ob_stored_on ($date);
}
$object->update;
$guard->commit;
@@ -193,6 +191,7 @@ sub log_set {
die "invalid history field $field";
}
+ my $date = DateTime->from_epoch (epoch => $time);
my %record = (oh_type => $self->{type},
oh_name => $self->{name},
oh_action => 'set',
@@ -202,7 +201,7 @@ sub log_set {
oh_new => $new,
oh_by => $user,
oh_from => $host,
- oh_on => strftime ('%Y-%m-%d %T', localtime $time));
+ oh_on => $date);
$self->{schema}->resultset('ObjectHistory')->create (\%record);
}
@@ -703,12 +702,13 @@ sub destroy {
$self->{schema}->resultset('Object')->search (\%search)->delete;
# And create a new history object for the destroy action.
+ my $date = DateTime->from_epoch (epoch => $time);
my %record = (oh_type => $type,
oh_name => $name,
oh_action => 'destroy',
oh_by => $user,
oh_from => $host,
- oh_on => strftime ('%Y-%m-%d %T', localtime $time));
+ oh_on => $date);
$self->{schema}->resultset('ObjectHistory')->create (\%record);
$guard->commit;
};