]> git.openstreetmap.org Git - chef.git/blob - cookbooks/tile/templates/default/cleanup-tiles.erb
Make replication delay monitoring more reliable
[chef.git] / cookbooks / tile / templates / default / cleanup-tiles.erb
1 #!/usr/bin/perl
2
3 # DO NOT EDIT - This file is being maintained by Chef
4
5 use strict;
6 use warnings;
7
8 use File::Basename;
9 use File::Temp qw(tmpnam);
10 use Filesys::Df;
11 use LockFile::Simple;
12
13 my $tiledir = shift @ARGV;
14
15 my $lockmgr = LockFile::Simple->make(-autoclean => 1, -max => 1, -hold => 0, -warn => 0, -stale => 1);
16
17 $lockmgr->lock("${tiledir}/cleanup") || exit 0;
18
19 my $tempfile = tmpnam();
20
21 if (df($tiledir)->{per} > 88)
22 {
23     system("find", $tiledir, "-xdev", "-name", "lost+found", "-prune", "-o", "-type", "f", "-name", "*.meta", "-atime", "+3", "-fprintf", $tempfile, "%A@ %p\n");
24
25     open(TILES, "-|", "sort", "-n", $tempfile) || die "Can't open $tempfile: $!";
26
27     while (df($tiledir)->{per} > 80)
28     {
29         for my $n (1..1000)
30         {
31             if (defined(my $line = readline(TILES)))
32             {
33                 chomp $line;
34
35                 my($time,$tile) = split(/ /, $line);
36
37                 unlink($tile) || warn "Can't remove $tile: $!";
38
39                 for (my $dir = dirname($tile); $dir ne $tiledir; $dir = dirname($dir))
40                 {
41                     rmdir($dir);
42                 }
43             }
44             else
45             {
46                 goto done;
47             }
48         }
49     }
50
51   done:
52
53     close(TILES);
54
55     warn "Tile expiry finished before threshold reached" if df($tiledir)->{per} > 80;
56 }
57
58 unlink($tempfile);
59
60 $lockmgr->unlock("${tiledir}/cleanup");
61
62 exit 0;