lib/splash/commands.rb in prometheus-splash-0.8.4 vs lib/splash/commands.rb in prometheus-splash-0.8.5
- old
+ new
@@ -46,10 +46,15 @@
def initialize(name)
@name = name
@backend = get_backend :execution_trace
end
+
+ def clear
+ @backend.del({:key => @name}) if @backend.exist?({key: @name})
+ end
+
def purge(retention)
retention = {} if retention.nil?
if retention.include? :hours then
adjusted_datetime = DateTime.now - retention[:hours].to_f / 24
elsif retention.include? :hours then
@@ -94,11 +99,11 @@
# @param [String] name the name of the command
def initialize(name)
@config = get_config
@url = @config.prometheus_pushgateway_url
@name = name
- unless @config.commands.keys.include? @name.to_sym then
+ unless @config.commands.select{|cmd| cmd[:name] == @name.to_sym }.count > 0 then
splash_exit case: :not_found, more: "command #{@name} is not defined in configuration"
end
end
# wrapper for ack command ( return 0 to prometheus via notify)
@@ -137,22 +142,24 @@
def call_and_notify(options)
log = get_logger
session = (options[:session])? options[:session] : get_session
acase = { :case => :quiet_exit }
exit_code = 0
- if @config.commands[@name.to_sym][:delegate_to] then
+ command = @config.commands.select{|command| command[:name] == @name.to_sym}.first
+ if command[:delegate_to] then
return { :case => :options_incompatibility, :more => '--hostname forbidden with delagate commands'} if options[:hostname]
- log.send "Remote command : #{@name} execution delegate to : #{@config.commands[@name.to_sym][:delegate_to][:host]} as : #{@config.commands[@name.to_sym][:delegate_to][:remote_command]}", session
+ log.send "Remote command : #{@name} execution delegate to : #{command[:delegate_to][:host]} as : #{command[:delegate_to][:remote_command]}", session
+ log.warn "Local command : #{command[:command]} defined but ignored, because delegate have the priority"
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},
+ payload: {:name => command[:delegate_to][:remote_command].to_s},
:return_to => "splash.#{Socket.gethostname}.return",
- :queue => "splash.#{@config.commands[@name.to_sym][:delegate_to][:host]}.input" })
+ :queue => "splash.#{command[:delegate_to][:host]}.input" })
exit_code = res[:exit_code]
log.receive "return with exitcode #{exit_code}", session
end
rescue Interrupt
@@ -162,39 +169,39 @@
log.info "Executing command : '#{@name}' ", session
start = Time.now
start_date = DateTime.now.to_s
unless options[:trace] then
log.item "Traceless execution", session
- if @config.commands[@name.to_sym][:user] then
- log.item "Execute with user : #{@config.commands[@name.to_sym][:user]}.", session
- system("sudo -u #{@config.commands[@name.to_sym][:user]} #{@config.commands[@name.to_sym][:command]} > /dev/null 2>&1")
+ if command[:user] then
+ log.item "Execute with user : #{command[:user]}.", session
+ system("sudo -u #{command[:user]} #{command[:command]} > /dev/null 2>&1")
else
- system("#{@config.commands[@name.to_sym][:command]} > /dev/null 2>&1")
+ system("#{command[:command]} > /dev/null 2>&1")
end
time = Time.now - start
exit_code = $?.exitstatus
else
log.item "Tracefull execution", session
- if @config.commands[@name.to_sym][:user] then
- log.item "Execute with user : #{@config.commands[@name.to_sym][:user]}.", session
- stdout, stderr, status = Open3.capture3("sudo -u #{@config.commands[@name.to_sym][:user]} #{@config.commands[@name.to_sym][:command]}")
+ if command[:user] then
+ log.item "Execute with user : #{command[:user]}.", session
+ stdout, stderr, status = Open3.capture3("sudo -u #{command[:user]} #{command[:command]}")
else
- stdout, stderr, status = Open3.capture3(@config.commands[@name.to_sym][:command])
+ stdout, stderr, status = Open3.capture3(command[:command])
end
time = Time.now - start
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[:cmd_line] = command[:command]
+ data[:desc] = command[:desc]
data[:status] = status.to_s
data[:stdout] = stdout
data[:stderr] = stderr
data[:exec_time] = time.to_s
cmdrec = CmdRecords::new @name
- cmdrec.purge(@config.commands[@name.to_sym][:retention])
+ cmdrec.purge(command[:retention])
cmdrec.add_record data
exit_code = status.exitstatus
end
log.ok "Command executed", session
log.arrow "exitcode #{exit_code}", session
@@ -203,27 +210,29 @@
else
log.item "Without Prometheus notification", session
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
+ on_failure = (command[:on_failure])? command[:on_failure] : false
+ on_success = (command[:on_success])? command[:on_success] : false
if on_failure and exit_code > 0 then
log.item "On failure callback : #{on_failure}", session
- if @config.commands.keys.include? on_failure then
+ if @config.commands.select {|item| item[:name] == on_failure}.count > 0 then
@name = on_failure.to_s
call_and_notify options
else
- acase = { :case => :configuration_error , :more => "on_failure call error : #{on_failure} command inexistant."}
+ log.error "on_failure call error : #{on_failure.to_s} command inexistant.", session
+ acase = { :case => :configuration_error , :more => "Command #{command[:name]} callback coniguration error"}
end
end
if on_success and exit_code == 0 then
log.item "On success callback : #{on_success}", session
- if @config.commands.keys.include? on_success then
+ if @config.commands.select {|item| item[:name] == on_success}.count > 0 then
@name = on_success.to_s
call_and_notify options
else
- acase = { :case => :configuration_error , :more => "on_success call error : #{on_failure} command inexistant."}
+ log.error "on_success call error : #{on_success.to_s} command inexistant."
+ acase = { :case => :configuration_error , :more => "Command #{command[:name]} callback coniguration error"}
end
end
else
log.item "Without callbacks sequences", session
end