lib/splash/commands.rb in prometheus-splash-0.2.0 vs lib/splash/commands.rb in prometheus-splash-0.3.0
- old
+ new
@@ -4,10 +4,11 @@
include Splash::Templates
include Splash::Config
include Splash::Helpers
include Splash::Backends
include Splash::Exiter
+ include Splash::Transports
@@registry = Prometheus::Client.registry
@@metric_exitcode = Prometheus::Client::Gauge.new(:errorcode, docstring: 'SPLASH metric batch errorcode')
@@metric_time = Prometheus::Client::Gauge.new(:exectime, docstring: 'SPLASH metric batch execution time')
@@ -40,62 +41,82 @@
return { :case => :quiet_exit}
end
def call_and_notify(options)
- puts "Executing command : '#{@name}' "
acase = { :case => :quiet_exit }
- start = Time.now
- start_date = DateTime.now.to_s
- unless options[:trace] then
- puts " * Traceless execution"
- if @config.commands[@name.to_sym][:user] then
- puts " * Execute with user : #{@config.commands[@name.to_sym][:user]}."
- system("sudo -u #{@config.commands[@name.to_sym][:user]} #{@config.commands[@name.to_sym][:command]} > /dev/null 2>&1")
- else
- system("#{@config.commands[@name.to_sym][:command]} > /dev/null 2>&1")
+ exit_code = 0
+ if @config.commands[@name.to_sym][:delegate_to] then
+ return { :case => :options_incompatibility, :more => '--hostname forbidden with delagate commands'} if options[:hostname]
+ puts "Remote command : #{@name} execution delegate to : #{@config.commands[@name.to_sym][:delegate_to][:host]} as : #{@config.commands[@name.to_sym][:delegate_to][:remote_command]}"
+ begin
+ transport = get_default_client
+ if transport.class == Hash and transport.include? :case then
+ return transport
+ else
+ res = transport.execute({ :verb => :execute_command,
+ payload: {:name => @config.commands[@name.to_sym][:delegate_to][:remote_command].to_s},
+ :return_to => "splash.#{Socket.gethostname}.return",
+ :queue => "splash.#{@config.commands[@name.to_sym][:delegate_to][:host]}.input" })
+ exit_code = res[:exit_code]
+ puts " => exitcode #{exit_code}"
+
+ end
end
- time = Time.now - start
- exit_code = $?.exitstatus
else
- puts " * Tracefull execution"
- if @config.commands[@name.to_sym][:user] then
- puts " * Execute with user : #{@config.commands[@name.to_sym][:user]}."
- stdout, stderr, status = Open3.capture3("sudo -u #{@config.commands[@name.to_sym][:user]} #{@config.commands[@name.to_sym][:command]}")
+ puts "Executing command : '#{@name}' "
+ start = Time.now
+ start_date = DateTime.now.to_s
+ unless options[:trace] then
+ puts " * Traceless execution"
+ if @config.commands[@name.to_sym][:user] then
+ puts " * Execute with user : #{@config.commands[@name.to_sym][:user]}."
+ system("sudo -u #{@config.commands[@name.to_sym][:user]} #{@config.commands[@name.to_sym][:command]} > /dev/null 2>&1")
+ else
+ system("#{@config.commands[@name.to_sym][:command]} > /dev/null 2>&1")
+ end
+ time = Time.now - start
+ exit_code = $?.exitstatus
else
- stdout, stderr, status = Open3.capture3(@config.commands[@name.to_sym][:command])
- end
- time = Time.now - start
- tp = Template::new(
+ puts " * Tracefull execution"
+ if @config.commands[@name.to_sym][:user] then
+ puts " * Execute with user : #{@config.commands[@name.to_sym][:user]}."
+ stdout, stderr, status = Open3.capture3("sudo -u #{@config.commands[@name.to_sym][:user]} #{@config.commands[@name.to_sym][:command]}")
+ else
+ stdout, stderr, status = Open3.capture3(@config.commands[@name.to_sym][:command])
+ end
+ time = Time.now - start
+ tp = Template::new(
list_token: @config.execution_template_tokens,
template_file: @config.execution_template_path)
- data = Hash::new
- data[:start_date] = start_date
- data[:end_date] = DateTime.now.to_s
- data[:cmd_name] = @name
- data[:cmd_line] = @config.commands[@name.to_sym][:command]
- data[:desc] = @config.commands[@name.to_sym][:desc]
- data[:status] = status.to_s
- data[:stdout] = stdout
- data[:stderr] = stderr
- data[:exec_time] = time.to_s
- backend = get_backend :execution_trace
- key = @name
- backend.put key: key, value: data.to_yaml
- exit_code = status.exitstatus
- end
+ data = Hash::new
+ data[:start_date] = start_date
+ data[:end_date] = DateTime.now.to_s
+ data[:cmd_name] = @name
+ data[:cmd_line] = @config.commands[@name.to_sym][:command]
+ data[:desc] = @config.commands[@name.to_sym][:desc]
+ data[:status] = status.to_s
+ data[:stdout] = stdout
+ data[:stderr] = stderr
+ data[:exec_time] = time.to_s
+ backend = get_backend :execution_trace
+ key = @name
+ backend.put key: key, value: data.to_yaml
+ exit_code = status.exitstatus
+ end
- puts " => exitcode #{exit_code}"
- if options[:notify] then
- acase = notify(exit_code,time.to_i)
- else
- puts " * Without Prometheus notification"
+ puts " => exitcode #{exit_code}"
+ if options[:notify] then
+ acase = notify(exit_code,time.to_i)
+ else
+ puts " * Without Prometheus notification"
+ end
end
+
if options[:callback] then
on_failure = (@config.commands[@name.to_sym][:on_failure])? @config.commands[@name.to_sym][:on_failure] : false
on_success = (@config.commands[@name.to_sym][:on_success])? @config.commands[@name.to_sym][:on_success] : false
-
if on_failure and exit_code > 0 then
puts " * On failure callback : #{on_failure}"
if @config.commands.keys.include? on_failure then
@name = on_failure.to_s
call_and_notify options
@@ -113,9 +134,10 @@
end
end
else
puts " * Without callbacks sequences"
end
+ acase[:exit_code] = exit_code
return acase
end
end
end