]> git.openstreetmap.org Git - chef.git/blob - cookbooks/tilecache/templates/default/ohai.rb.erb
tilecache: tune peer selection
[chef.git] / cookbooks / tilecache / templates / default / ohai.rb.erb
1 Ohai.plugin(:TileCache) do
2   provides "tilecache"
3
4   def tile_siblings
5     recent = Time.now - 600
6     times = Hash.new
7
8     # Find performance reports for last few minutes
9     # Add up total time taken to download tile grouped by remote server
10     # Remove 1 second per successful time report (de-prioritise new servers)
11     # Add 10 seconds per failed time report request
12     Dir.glob("/srv/tilecache/data/**/tilecache-*.txt").each do |path|
13       if File.mtime(path) > recent
14         IO.readlines(path).reverse.take(20).each do |sample|
15           if sample =~ %r{^(\d+\.\d+),(\d+),https://([^/]+)/} then
16             time = Regexp.last_match(1).to_f
17             status = Regexp.last_match(2).to_i
18             host = Regexp.last_match(3)
19
20             if status == 200 then
21               times[host] = times.fetch(host, 0) + time - 1
22             else
23               times[host] = times.fetch(host, 0) + 10
24             end
25           end
26         end
27       end
28     end
29
30     # Sort time reports
31     # Strip to best 4 server names
32     times.to_a.sort_by(&:last).take(4).map(&:first)
33   end
34
35   collect_data(:default) do
36     tilecache Mash.new
37
38     tilecache[:tile_siblings] = tile_siblings
39   end
40 end