summaryrefslogtreecommitdiffstats
path: root/vagrant/lib/Respin.pm
diff options
context:
space:
mode:
Diffstat (limited to 'vagrant/lib/Respin.pm')
-rw-r--r--vagrant/lib/Respin.pm30
1 files changed, 30 insertions, 0 deletions
diff --git a/vagrant/lib/Respin.pm b/vagrant/lib/Respin.pm
new file mode 100644
index 000000000..e72c601a1
--- /dev/null
+++ b/vagrant/lib/Respin.pm
@@ -0,0 +1,30 @@
+package Respin;
+
+use strict;
+use warnings;
+use DateTime;
+use DateTime::Format::Duration;
+use DateTime::Duration;
+use JSON::XS;
+
+my $iso8601_rx = qr{^(\d{4})(\d{2})(\d{2})T(\d{2})(\d{2})(\d{2})$};
+
+my $json = JSON::XS->new->utf8;
+
+my $dur_fmt = DateTime::Format::Duration->new(
+ normalize => 1,
+ pattern =>
+ q{{"week":"%V","day":"%u","hour":"%k","minute":"%M","second":"%S"}}
+);
+
+sub latest_src_age {
+ my ( $now, $src ) = @_;
+
+ my ( %now, %src );
+ @now{qw(year month day hour minute second)} = ( $now =~ $iso8601_rx );
+ @src{qw(year month day hour minute second)} = ( $src =~ $iso8601_rx );
+
+ print $dur_fmt->format_duration_from_deltas(
+ DateTime->new(%now)->subtract_datetime_absolute( DateTime->new(%src) )
+ ->deltas );
+}