From: Tom Hughes Date: Fri, 23 Aug 2013 23:33:49 +0000 (+0100) Subject: Add a cron job to cleanup old tiles X-Git-Url: https://git.openstreetmap.org./chef.git/commitdiff_plain/e2fccde243e82951a757683066a80071f67bda2b?ds=sidebyside Add a cron job to cleanup old tiles --- diff --git a/cookbooks/tile/recipes/default.rb b/cookbooks/tile/recipes/default.rb index 9c219e62d..4f3cc5002 100644 --- a/cookbooks/tile/recipes/default.rb +++ b/cookbooks/tile/recipes/default.rb @@ -473,6 +473,27 @@ template "/etc/rsyslog.d/20-renderd.conf" do notifies :restart, "service[rsyslog]" end +package "libfilesys-df-perl" + +template "/usr/local/bin/cleanup-tiles" do + source "cleanup-tiles.erb" + owner "root" + group "root" + mode 0644 +end + +tile_directories = node[:tile][:styles].collect do |name,style| + style[:tile_directories].collect { |directory| directory[:name] } +end.flatten.sort.uniq + +template "/etc/cron.d/cleanup-tiles" do + source "cleanup-tiles.cron.erb" + owner "root" + group "root" + mode 0644 + variables :directories => tile_directories +end + munin_plugin "mod_tile_fresh" munin_plugin "mod_tile_response" munin_plugin "mod_tile_zoom" diff --git a/cookbooks/tile/templates/default/cleanup-tiles.cron.erb b/cookbooks/tile/templates/default/cleanup-tiles.cron.erb new file mode 100644 index 000000000..7c235a99c --- /dev/null +++ b/cookbooks/tile/templates/default/cleanup-tiles.cron.erb @@ -0,0 +1,5 @@ +# DO NOT EDIT - This file is being maintained by Chef + +<% @directories.each do |directory| -%> +0 1 * * * www-data ionice -c 3 /usr/local/bin/cleanup-tiles <%= directory %> +<% end -%> diff --git a/cookbooks/tile/templates/default/cleanup-tiles.erb b/cookbooks/tile/templates/default/cleanup-tiles.erb new file mode 100644 index 000000000..31a7fadd9 --- /dev/null +++ b/cookbooks/tile/templates/default/cleanup-tiles.erb @@ -0,0 +1,40 @@ +#!/usr/bin/perl + +# DO NOT EDIT - This file is being maintained by Chef + +use strict; +use warnings; + +use File::Temp qw(tmpnam); +use Filesys::Df; + +my $tiledir = shift @ARGV; +my $tempfile = tmpnam(); + +if (df($tiledir)->{per} > 90) +{ + system("find", $tiledir, "-xdev", "-type", "f", "-name", "*.meta", "-atime", "+60", "-fprintf", $tempfile, "%A@ %p\n"); + + open(TILES, "-|", "sort", "-n", $tempfile) || die "Can't open $tempfile: $!"; + + while (df($tiledir)->{per} > 80) + { + for my $n (1..1000) + { + if (defined(my $line = readline(TILES))) + { + chomp $line; + + my($time,$tile) = split(/ /, $line); + + unlink($tile) || warn "Can't remove $tile: $!"; + } + } + } + + close(TILES); +} + +unlink($tempfile); + +exit 0;