Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env ruby
- require 'json'
- require 'open3'
- home = "/Users/james"
- name = `hostname`.downcase
- server = "walt.local"
- mirror = "#{server}:/storage/mirrors/#{name}"
- mirrors = {
- "Documents" => ["#{home}/Documents", mirror],
- "Pictures" => ["#{home}/Pictures", mirror],
- "Code" => ["#{home}/src", mirror],
- "Music" => ["#{server}:music/", "#{home}/Box Sync/Music"],
- "Podcasts" => ["#{server}:podcasts/", "#{home}/Podcasts"]
- }
- logfile = "#{__FILE__}.log"
- logs = File.exists?(logfile) ? JSON.parse(File.read logfile) : {}
- at_exit do
- File.open(logfile, "w") { |f| f.puts logs.to_json }
- end
- _, status = Open3.capture2e "ping -q -c3 #{server}"
- if status.success?
- mirrors.each do |name, map|
- puts "Starting #{name}" if ENV["VERBOSE"]
- logs[name] ||= {}
- from, to = map
- log, status = Open3.capture2e "rsync -avz --delete '#{from}' '#{to}'"
- puts log if ENV["VERBOSE"]
- logs[name][:last_run] = Time.now if status.success?
- logs[name][:logs] ||= []
- logs[name][:logs].unshift log: log, status: status.to_i
- logs[name][:logs] = logs[name][:logs][0..20]
- end
- end
- days = 24 * 60 * 60
- late = logs.select { |name, data| Time.parse(data["last_run"]) < Time.now - 3 * days }
- if late.any?
- warn "The following mirrors have not run for at least 3 days: #{late.join ', '}"
- warn "Sample log: #{late.first['log']}"
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement