Advertisement
Guest User

Untitled

a guest
Feb 1st, 2015
204
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.36 KB | None | 0 0
  1. #!/usr/bin/env ruby
  2.  
  3. require 'json'
  4. require 'open3'
  5.  
  6. home = "/Users/james"
  7. name = `hostname`.downcase
  8. server = "walt.local"
  9. mirror = "#{server}:/storage/mirrors/#{name}"
  10.  
  11. mirrors = {
  12. "Documents" => ["#{home}/Documents", mirror],
  13. "Pictures" => ["#{home}/Pictures", mirror],
  14. "Code" => ["#{home}/src", mirror],
  15. "Music" => ["#{server}:music/", "#{home}/Box Sync/Music"],
  16. "Podcasts" => ["#{server}:podcasts/", "#{home}/Podcasts"]
  17. }
  18.  
  19. logfile = "#{__FILE__}.log"
  20. logs = File.exists?(logfile) ? JSON.parse(File.read logfile) : {}
  21.  
  22. at_exit do
  23. File.open(logfile, "w") { |f| f.puts logs.to_json }
  24. end
  25.  
  26. _, status = Open3.capture2e "ping -q -c3 #{server}"
  27. if status.success?
  28. mirrors.each do |name, map|
  29. puts "Starting #{name}" if ENV["VERBOSE"]
  30.  
  31. logs[name] ||= {}
  32.  
  33. from, to = map
  34. log, status = Open3.capture2e "rsync -avz --delete '#{from}' '#{to}'"
  35.  
  36. puts log if ENV["VERBOSE"]
  37.  
  38. logs[name][:last_run] = Time.now if status.success?
  39.  
  40. logs[name][:logs] ||= []
  41. logs[name][:logs].unshift log: log, status: status.to_i
  42. logs[name][:logs] = logs[name][:logs][0..20]
  43. end
  44. end
  45.  
  46. days = 24 * 60 * 60
  47. late = logs.select { |name, data| Time.parse(data["last_run"]) < Time.now - 3 * days }
  48. if late.any?
  49. warn "The following mirrors have not run for at least 3 days: #{late.join ', '}"
  50. warn "Sample log: #{late.first['log']}"
  51. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement