1 |
#!/usr/bin/perl |
2 |
|
3 |
use warnings; |
4 |
use strict; |
5 |
|
6 |
use DateTime; |
7 |
|
8 |
my $now = DateTime->now(); |
9 |
|
10 |
my $last_backup; |
11 |
|
12 |
open(my $fs, '-|', 'zfs list -H'); |
13 |
while(<$fs>) { |
14 |
chomp; |
15 |
my ( $name, $used, $avail, $refer, $mountpoint ) = split(/\t/,$_,6); |
16 |
|
17 |
next unless $name =~ m{(.+)@(\d\d\d\d)-(\d\d)-(\d\d)}; |
18 |
|
19 |
my $host = $1; |
20 |
|
21 |
my $date = DateTime->new( year => $2, month => $3, day => $4 ); |
22 |
|
23 |
my $age = $now->delta_days( $date )->delta_days; |
24 |
|
25 |
my $op = ' '; |
26 |
my $last = 0; |
27 |
|
28 |
if ( $age > 14 ) { |
29 |
|
30 |
$last_backup->{$host} ||= $date; |
31 |
$last = $last_backup->{$host}->delta_days( $date )->delta_days; |
32 |
|
33 |
if ( $last && $last < 5 ) { |
34 |
$op = '-'; |
35 |
} else { |
36 |
$op = '+'; |
37 |
$last_backup->{$host} = $date; |
38 |
} |
39 |
} |
40 |
|
41 |
warn "$op $name\t$used\t$refer\t$age\t$last\n"; |
42 |
|
43 |
system "zfs destroy $name" if $op eq '-' && @ARGV; |
44 |
} |