From 10016dc5c3a7c567b22406429cc9efbe335881e3 Mon Sep 17 00:00:00 2001 From: Tom Hughes Date: Sun, 5 Apr 2020 18:28:44 +0100 Subject: [PATCH] Replace fastest-peers script with an ohai plugin to populate siblings --- cookbooks/tilecache/metadata.rb | 1 + cookbooks/tilecache/recipes/default.rb | 11 ++--- .../tilecache/templates/default/ohai.rb.erb | 40 +++++++++++++++++++ .../templates/tilecache-fastest-peers.erb | 16 -------- 4 files changed, 47 insertions(+), 21 deletions(-) create mode 100644 cookbooks/tilecache/templates/default/ohai.rb.erb delete mode 100644 cookbooks/tilecache/templates/tilecache-fastest-peers.erb diff --git a/cookbooks/tilecache/metadata.rb b/cookbooks/tilecache/metadata.rb index b5e65dc1a..38abbe7e2 100644 --- a/cookbooks/tilecache/metadata.rb +++ b/cookbooks/tilecache/metadata.rb @@ -9,5 +9,6 @@ supports "ubuntu" depends "fail2ban" depends "munin" depends "nginx" +depends "ohai" depends "squid" depends "ssl" diff --git a/cookbooks/tilecache/recipes/default.rb b/cookbooks/tilecache/recipes/default.rb index e6e848ce1..16a8af1be 100644 --- a/cookbooks/tilecache/recipes/default.rb +++ b/cookbooks/tilecache/recipes/default.rb @@ -206,9 +206,10 @@ template "/srv/tilecache/tilecache-curl-time" do variables :caches => tilecaches, :renders => tilerenders end -template "/srv/tilecache/tilecache-fastest-peers" do - source "tilecache-fastest-peers.erb" - owner "root" - group "root" - mode 0o755 +file "/srv/tilecache/tilecache-fastest-peers" do + action :delete +end + +ohai_plugin "tilecache" do + template "ohai.rb.erb" end diff --git a/cookbooks/tilecache/templates/default/ohai.rb.erb b/cookbooks/tilecache/templates/default/ohai.rb.erb new file mode 100644 index 000000000..6bf8fc754 --- /dev/null +++ b/cookbooks/tilecache/templates/default/ohai.rb.erb @@ -0,0 +1,40 @@ +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 diff --git a/cookbooks/tilecache/templates/tilecache-fastest-peers.erb b/cookbooks/tilecache/templates/tilecache-fastest-peers.erb deleted file mode 100644 index c6745de3a..000000000 --- a/cookbooks/tilecache/templates/tilecache-fastest-peers.erb +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash - -# 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 -# Sort time reports -# Strip to best 4 server names - -/usr/bin/find /srv/tilecache/data/ -type f -iname 'tilecache-*.txt' -mmin -10 -print0 \ - | /usr/bin/xargs -0 --no-run-if-empty /usr/bin/tail --quiet -n 20 \ - | /usr/bin/awk -F ',' '$2 == 200 {time[$3] += $1; time[$3] -= 1} $2 != 200 {time[$3] +=30} END{for (i in time) print time[i], i}' \ - | /usr/bin/sort -k1n \ - | /usr/bin/cut -d '/' -f 3 \ - | /bin/grep -E '(openstreetmap|localhost)' \ - | /usr/bin/head -n 4 -- 2.43.2