summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Buetow <rubyfy@dev.buetow.org>2015-09-29 07:10:05 +0100
committerPaul Buetow <rubyfy@dev.buetow.org>2015-09-29 07:10:05 +0100
commitb36da66f1067c58ea829ba436f770c7bd62085bd (patch)
treec18655ce75d6f89915c4372781e6658f031cecde
parent097b1388b3cdabb8598abebd9d612bb4a1081fe6 (diff)
use a class
-rwxr-xr-xrubyfy.rb165
1 files changed, 88 insertions, 77 deletions
diff --git a/rubyfy.rb b/rubyfy.rb
index 2199249..0548dd0 100755
--- a/rubyfy.rb
+++ b/rubyfy.rb
@@ -9,46 +9,100 @@ require "net/ssh"
require "pp"
require "thread"
-$ARGS = Hash.new
-$LOG_MUTEX = Mutex.new
+class Rubyfy
+ def initialize(opts)
+ @args = Hash.new
+ @log_mutex = Mutex.new
-def log(severity, message)
- return if severity == :VERBOSE and not $ARGS["--verbose"]
- $LOG_MUTEX.synchronize do
- puts "#{severity}::#{message}"
+ opts.each do |opt, arg|
+ @args[opt] = arg
+ end
+
+ log(:DEBUG, @args) if @args["--debug"]
end
-end
-def run_command(server, command="uptime", root=false, user=ENV["USER"])
- log(:VERBOSE,"#{server}::Connecting")
- sudo = root ? "sudo " : ""
- Net::SSH.start(server, user) do |session|
- log(:VERBOSE, "#{server}::Executing #{sudo}#{command}")
- session.exec!("#{sudo}#{command}") do |channel, stream, data|
- log(:OUT, "#{server}::#{data}") unless $ARGS["--silent"]
+ def run
+ servers, jobs = [], []
+ STDIN.read.split("\n").each { |s| servers << s }
+
+ work_q = Queue.new
+ servers.each do |server|
+ job = {
+ :SERVER => server,
+ :COMMAND => @args["--command"],
+ :ROOT => @args["--root"],
+ :STATUS => :NONE,
+ }
+ jobs << job
+ work_q.push(job)
+ end
+
+ parallel = @args["--parallel"].to_i
+
+ threads = (1..parallel).map do
+ Thread.new do
+ begin
+ while job = work_q.pop(true)
+ run_job(job)
+ end
+ rescue ThreadError => e
+ rescue => e
+ log(:ERROR, "#{job[:SERVER]}::#{e.message}")
+ log(:ERROR, "#{job[:SERVER]}::#{e.inspect}")
+ end
+ end
+ end
+
+ threads.map(&:join)
+ log(:INFO, "-::Done processing all servers")
+
+ jobs.each do |job|
+ if job[:STATUS] != :OK
+ log(:WARN,"#{job[:SERVER]}::No job result")
+ end
end
end
-end
-def run_job(job)
- server = job[:SERVER]
- command = job[:COMMAND]
- root = job[:ROOT]
- log(:VERBOSE, "#{server}::Running job #{job}")
- if File.exists?("#{server}.ignore")
- log(:INFO, "#{server}::Ignoring this server")
- else
- run_command server, command, root
+private
+
+ def log(severity, message)
+ return if severity == :VERBOSE and not @args["--verbose"]
+ @log_mutex.synchronize do
+ puts "#{severity}::#{message}"
+ end
+ end
+
+ def run_command(server, command="uptime", root=false, user=ENV["USER"])
+ log(:VERBOSE,"#{server}::Connecting")
+ sudo = root ? "sudo " : ""
+ Net::SSH.start(server, user) do |session|
+ log(:VERBOSE, "#{server}::Executing #{sudo}#{command}")
+ session.exec!("#{sudo}#{command}") do |channel, stream, data|
+ log(:OUT, "#{server}::#{data}") unless @args["--silent"]
+ end
+ end
end
- job[:STATUS] = :OK
-end
-def http_get(uri_str, content_type="application/json")
- uri = URI.parse(uri_str)
- req = Net::HTTP::Get.new(uri.path)
- req.[]=("Accept", content_type)
- http = Net::HTTP.new(uri.host, uri.port)
- http.request(req).body
+ def run_job(job)
+ server = job[:SERVER]
+ command = job[:COMMAND]
+ root = job[:ROOT]
+ log(:VERBOSE, "#{server}::Running job #{job}")
+ if File.exists?("#{server}.ignore")
+ log(:INFO, "#{server}::Ignoring this server")
+ else
+ run_command server, command, root
+ end
+ job[:STATUS] = :OK
+ end
+
+ def http_get(uri_str, content_type="application/json")
+ uri = URI.parse(uri_str)
+ req = Net::HTTP::Get.new(uri.path)
+ req.[]=("Accept", content_type)
+ http = Net::HTTP.new(uri.host, uri.port)
+ http.request(req).body
+ end
end
begin
@@ -61,49 +115,6 @@ begin
[ "--verbose", "-v", GetoptLong::OPTIONAL_ARGUMENT ],
)
- opts.each do |opt, arg|
- $ARGS[opt] = arg
- end
-
- log(:DEBUG, $ARGS) if $ARGS["--debug"]
-
- servers, jobs = [], []
- STDIN.read.split("\n").each { |s| servers << s }
-
- work_q = Queue.new
- servers.each do |server|
- job = {
- :SERVER => server,
- :COMMAND => $ARGS["--command"],
- :ROOT => $ARGS["--root"],
- :STATUS => :NONE,
- }
- jobs << job
- work_q.push(job)
- end
-
- parallel = $ARGS["--parallel"].to_i
-
- threads = (1..parallel).map do
- Thread.new do
- begin
- while job = work_q.pop(true)
- run_job(job)
- end
- rescue ThreadError => e
- rescue => e
- log(:ERROR, "#{job[:SERVER]}::#{e.message}")
- log(:ERROR, "#{job[:SERVER]}::#{e.inspect}")
- end
- end
- end
-
- threads.map(&:join)
- log(:INFO, "-::Done processing all servers")
-
- jobs.each do |job|
- if job[:STATUS] != :OK
- log(:WARN,"#{job[:SERVER]}::No job result")
- end
- end
+ rubyfy = Rubyfy.new(opts)
+ rubyfy.run
end