File Coverage

blib/lib/Sys/RevoBackup/Utils.pm
Criterion Covered Total %
statement 19 60 31.6
branch 0 24 0.0
condition 0 3 0.0
subroutine 7 11 63.6
pod 1 1 100.0
total 27 99 27.2


line stmt bran cond sub pod time code
1             package Sys::RevoBackup::Utils;
2             {
3             $Sys::RevoBackup::Utils::VERSION = '0.27';
4             }
5             BEGIN {
6 1     1   1948 $Sys::RevoBackup::Utils::AUTHORITY = 'cpan:TEX';
7             }
8             # ABSTRACT: Revobackup utilities
9              
10 1     1   20 use 5.010_000;
  1         4  
  1         37  
11 1     1   24 use mro 'c3';
  1         2  
  1         6  
12 1     1   25 use feature ':5.10';
  1         2  
  1         95  
13              
14 1     1   6 use strict;
  1         2  
  1         39  
15 1     1   11 use warnings;
  1         2  
  1         31  
16              
17 1     1   1335 use File::Blarf;
  1         1014  
  1         1078  
18              
19             sub backup_status {
20 0     0 1   my $Config = shift;
21 0           my $host = shift;
22              
23 0           my $bankdir = $Config->get('Sys::RevoBackup::Bank');
24 0           my $cfg = $Config->get( 'Sys::RevoBackup::Vaults::' . $host );
25 0 0         if ($cfg) {
26              
27             # Search string matches Vault name, now get the backup status
28 0           my $backup_dir = $bankdir . q{/} . $host . '/daily/0';
29 0           return _backup_ok($backup_dir);
30             }
31             else {
32 0           foreach my $vault ( $Config->get_array('Sys::RevoBackup::Vaults') ) {
33 0           my $source = $Config->get( 'Sys::RevoBackup::Vaults::' . $vault . '::Source' );
34 0 0         if ( $source =~ m/:/ ) {
35 0           my ( $hostname, $path ) = split /:/, $source;
36 0 0         if ( $hostname =~ m/@/ ) {
37 0           ( undef, $hostname ) = split /\@/, $hostname;
38             }
39 0 0         if ( $host eq $hostname ) {
40 0           my $backup_dir = $bankdir . q{/} . $vault . '/daily/0';
41 0           return _backup_ok($backup_dir);
42             }
43             }
44             }
45             }
46 0           return;
47             }
48              
49             sub _backup_ok {
50 0     0     my $dir = shift;
51              
52 0 0 0       if ( _backup_status_ok($dir) && _backup_ts_ok($dir) ) {
53 0           return 1;
54             }
55             else {
56 0           return;
57             }
58             }
59              
60             sub _backup_status_ok {
61 0     0     my $dir = shift;
62              
63 0 0         return unless $dir;
64 0 0         return unless -e $dir . '/log';
65              
66 0           my @lines = File::Blarf::slurp( $dir . '/log', { Chomp => 1, } );
67 0           my $status_ok = 0;
68 0           foreach my $line (@lines) {
69 0 0         if ( $line =~ m/^BACKUP-STATUS: OK/i ) {
70 0           $status_ok = 1;
71             }
72             }
73              
74 0           return $status_ok;
75             }
76              
77             sub _backup_ts_ok {
78 0     0     my $dir = shift;
79              
80 0 0         return unless $dir;
81 0 0         return unless -e $dir . '/log';
82              
83 0           my @lines = File::Blarf::slurp( $dir . '/log', { Chomp => 1, } );
84 0           my $timestamp_ok = 0;
85 0           foreach my $line (@lines) {
86 0 0         if ( $line =~ m/^BACKUP-FINISHED: (\d+)/ ) {
87 0           my $finish_ts = $1;
88              
89             # did the backup finish within the last 24h?
90 0 0         if ( time() - $finish_ts < 24 * 60 * 60 ) {
91 0           $timestamp_ok = 1;
92             }
93             }
94             }
95              
96 0           return $timestamp_ok;
97             }
98              
99             1;
100              
101             __END__
102              
103             =pod
104              
105             =encoding UTF-8
106              
107             =head1 NAME
108              
109             Sys::RevoBackup::Utils - Revobackup utilities
110              
111             =head1 METHODS
112              
113             =head2 backup_status
114              
115             Check the given backup.
116              
117             =head1 NAME
118              
119             Sys::RevoBackup::Utils - misc. RevoBackup utilities
120              
121             =head1 AUTHOR
122              
123             Dominik Schulz <dominik.schulz@gauner.org>
124              
125             =head1 COPYRIGHT AND LICENSE
126              
127             This software is copyright (c) 2012 by Dominik Schulz.
128              
129             This is free software; you can redistribute it and/or modify it under
130             the same terms as the Perl 5 programming language system itself.
131              
132             =cut