]> git.openstreetmap.org Git - chef.git/commitdiff
Replace fastest-peers script with an ohai plugin to populate siblings
authorTom Hughes <tom@compton.nu>
Sun, 5 Apr 2020 17:28:44 +0000 (18:28 +0100)
committerTom Hughes <tom@compton.nu>
Sun, 5 Apr 2020 17:30:41 +0000 (18:30 +0100)
cookbooks/tilecache/metadata.rb
cookbooks/tilecache/recipes/default.rb
cookbooks/tilecache/templates/default/ohai.rb.erb [new file with mode: 0644]
cookbooks/tilecache/templates/tilecache-fastest-peers.erb [deleted file]

index b5e65dc1a4f1c45cf9898fb4d7c36665c2fdfa57..38abbe7e2825cc988d18ba09a7e045ef841437c8 100644 (file)
@@ -9,5 +9,6 @@ supports          "ubuntu"
 depends           "fail2ban"
 depends           "munin"
 depends           "nginx"
+depends           "ohai"
 depends           "squid"
 depends           "ssl"
index e6e848ce175884fedfc506fe770cbf5e213a20ce..16a8af1be66f1f547e97a98307d048e8b0ca45c8 100644 (file)
@@ -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 (file)
index 0000000..6bf8fc7
--- /dev/null
@@ -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 (file)
index c6745de..0000000
+++ /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