1 |
dpavlin |
107 |
#!/usr/bin/perl |
2 |
|
|
|
3 |
|
|
use warnings; |
4 |
|
|
use strict; |
5 |
|
|
|
6 |
|
|
use DateTime; |
7 |
|
|
|
8 |
|
|
my $now = DateTime->now(); |
9 |
|
|
|
10 |
dpavlin |
108 |
my $last_backup; |
11 |
|
|
|
12 |
dpavlin |
107 |
open(my $fs, '-|', 'zfs list -H'); |
13 |
|
|
while(<$fs>) { |
14 |
|
|
chomp; |
15 |
|
|
my ( $name, $used, $avail, $refer, $mountpoint ) = split(/\t/,$_,6); |
16 |
|
|
|
17 |
dpavlin |
108 |
next unless $name =~ m{(.+)@(\d\d\d\d)-(\d\d)-(\d\d)}; |
18 |
dpavlin |
107 |
|
19 |
dpavlin |
108 |
my $host = $1; |
20 |
dpavlin |
107 |
|
21 |
dpavlin |
108 |
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 |
dpavlin |
107 |
} |