+Ohai.plugin(:TileCache) do
+ provides "tilecache"
+
+ def tile_siblings
+ recent = Time.now - 600
+ times = Hash.new
+
+ # Find performance reports for last few minutes
+ # Add up total time taken to download tile grouped by remote server
+ # Remove 1 second per successful time report (de-prioritise new servers)
+ # Add 30 seconds per failed time report request
+ Dir.glob("/srv/tilecache/data/**/tilecache-*.txt").each do |path|
+ if File.mtime(path) > recent
+ IO.readlines(path).reverse.take(20).each do |sample|
+ if sample =~ %r{^(\d+\.\d+),(\d+),https://([^/]+)/} then
+ time = Regexp.last_match(1).to_f
+ status = Regexp.last_match(2).to_i
+ host = Regexp.last_match(3)
+
+ if status == 200 then
+ times[host] = times.fetch(host, 0) + time - 1
+ else
+ times[host] = times.fetch(host, 0) + 30
+ end
+ end
+ end
+ end
+ end
+
+ # Sort time reports
+ # Strip to best 4 server names
+ times.to_a.sort_by(&:last).take(4).map(&:first)
+ end
+
+ collect_data(:default) do
+ tilecache Mash.new
+
+ tilecache[:tile_siblings] = tile_siblings
+ end
+end