prometheus-splash 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7065fa547ec467bcde47fcb52c57a05fa0abc5e902e3ce1f9ed3c1ac0f64b0d6
4
- data.tar.gz: 73cb3e469d7c32adaeebf39987c8c767e2579889bcea5101cdf1492101ffffe6
3
+ metadata.gz: 6036da9aa1ce8abf1bc28d87c034152654cd75518d46b95bd683f9642b01186c
4
+ data.tar.gz: ac742574fd569bed467ac95fc33029339335beef8e596717444f6fe74c3bc446
5
5
  SHA512:
6
- metadata.gz: c390147005809aa6d3fe5aa9975e4f8ca4787fb1a3c359c53e33d21cb50d9329aae48946fcbb8168ee5fbadeba05cf43ca4b2d761435a9b50e60098f30debd2a
7
- data.tar.gz: e241c29c18a58c9dbd095323b2d2600fe9e30aacd20096e276d508920124b0419c5e7ee24a0bca5b6f34e5eb8424f79739f57443f980972d7e67e94a75e41b88
6
+ metadata.gz: af38c990376f81466c893c140946b22ad492cdda47cd0c9fb874ce90dcf543151cee2d8a7f8b285b537d1dd909551839efce6e988256fa5131fe52feac6e77db
7
+ data.tar.gz: 07742cabe62fa85017c35a1d29e1804060f43113313a071777db977b423ea7668f9bdbe5cd1b78b7af68fd9cd8401540f80a010e5f25803858bca18ef5c5992a
@@ -78,6 +78,16 @@
78
78
  :echo3:
79
79
  :desc: echo 'been'
80
80
  :command: echo been
81
+ :rand_sleep_5:
82
+ :desc: sleep on a rand 5
83
+ :command: ruby -e 'sleep rand(5)'
84
+ :schedule:
85
+ :every: "10s"
86
+ :test_remote_call:
87
+ :desc: remote call test
88
+ :delegate_to:
89
+ :host: omicron
90
+ :remote_command: :echo2
81
91
 
82
92
 
83
93
  ### configuration of monitored logs
@@ -27,6 +27,7 @@ module CLISplash
27
27
  def execute(name)
28
28
  if is_root? then
29
29
  if options[:hostname] then
30
+ splash_exit({ :case => :options_incompatibility, :more => '--hostname forbidden with delagate commands'}) if get_config.commands[name.to_sym][:delegate_to]
30
31
  puts "Remote Splash configured commands on #{options[:hostname]}:"
31
32
  puts "ctrl+c for interrupt"
32
33
  begin
@@ -122,6 +123,10 @@ module CLISplash
122
123
  puts " - command description : '#{list[command][:desc]}'"
123
124
  puts " - command failure callback : '#{list[command.to_sym][:on_failure]}'" if list[command.to_sym][:on_failure]
124
125
  puts " - command success callback : '#{list[command.to_sym][:on_success]}'" if list[command.to_sym][:on_success]
126
+ if list[command.to_sym][:schedule]
127
+ sched,val = list[command.to_sym][:schedule].flatten
128
+ puts " - command scheduled : #{sched} #{val}."
129
+ end
125
130
  end
126
131
  end
127
132
  splash_exit case: :quiet_exit
@@ -8,13 +8,13 @@ module CLISplash
8
8
 
9
9
 
10
10
  option :foreground, :type => :boolean
11
- option :purge, :type => :boolean
11
+ option :purge, :type => :boolean, default: true
12
12
  option :scheduling, :type => :boolean, default: true
13
13
  long_desc <<-LONGDESC
14
14
  Starting Splash Daemon\n
15
15
  With --foreground, run Splash in foreground\n
16
16
  With --no-scheduling, inhibit commands scheduling\n
17
- With --purge, Purge Input Queue for Splash Daemon
17
+ With --no-purge, inhibit purge Input Queue for Splash Daemon
18
18
  LONGDESC
19
19
  desc "start", "Starting Splash Daemon"
20
20
  def start
@@ -26,7 +26,6 @@ module CLISplash
26
26
  queue = "splash.#{Socket.gethostname}.input"
27
27
  transport.purge queue: queue
28
28
  puts " * Queue : #{queue} purged"
29
- splash_exit case: :quiet_exit
30
29
  end
31
30
  end
32
31
  acase = run_as_root :startdaemon, options
@@ -6,6 +6,7 @@ module Splash
6
6
  include Splash::Helpers
7
7
  include Splash::Backends
8
8
  include Splash::Exiter
9
+ include Splash::Transports
9
10
 
10
11
 
11
12
  @@registry = Prometheus::Client.registry
@@ -42,58 +43,78 @@ module Splash
42
43
 
43
44
 
44
45
  def call_and_notify(options)
45
- puts "Executing command : '#{@name}' "
46
46
  acase = { :case => :quiet_exit }
47
- start = Time.now
48
- start_date = DateTime.now.to_s
49
- unless options[:trace] then
50
- puts " * Traceless execution"
51
- if @config.commands[@name.to_sym][:user] then
52
- puts " * Execute with user : #{@config.commands[@name.to_sym][:user]}."
53
- system("sudo -u #{@config.commands[@name.to_sym][:user]} #{@config.commands[@name.to_sym][:command]} > /dev/null 2>&1")
54
- else
55
- system("#{@config.commands[@name.to_sym][:command]} > /dev/null 2>&1")
47
+ exit_code = 0
48
+ if @config.commands[@name.to_sym][:delegate_to] then
49
+ return { :case => :options_incompatibility, :more => '--hostname forbidden with delagate commands'} if options[:hostname]
50
+ 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]}"
51
+ begin
52
+ transport = get_default_client
53
+ if transport.class == Hash and transport.include? :case then
54
+ return transport
55
+ else
56
+ res = transport.execute({ :verb => :execute_command,
57
+ payload: {:name => @config.commands[@name.to_sym][:delegate_to][:remote_command].to_s},
58
+ :return_to => "splash.#{Socket.gethostname}.return",
59
+ :queue => "splash.#{@config.commands[@name.to_sym][:delegate_to][:host]}.input" })
60
+ exit_code = res[:exit_code]
61
+ puts " => exitcode #{exit_code}"
62
+
63
+ end
56
64
  end
57
- time = Time.now - start
58
- exit_code = $?.exitstatus
59
65
  else
60
- puts " * Tracefull execution"
61
- if @config.commands[@name.to_sym][:user] then
62
- puts " * Execute with user : #{@config.commands[@name.to_sym][:user]}."
63
- stdout, stderr, status = Open3.capture3("sudo -u #{@config.commands[@name.to_sym][:user]} #{@config.commands[@name.to_sym][:command]}")
66
+ puts "Executing command : '#{@name}' "
67
+ start = Time.now
68
+ start_date = DateTime.now.to_s
69
+ unless options[:trace] then
70
+ puts " * Traceless execution"
71
+ if @config.commands[@name.to_sym][:user] then
72
+ puts " * Execute with user : #{@config.commands[@name.to_sym][:user]}."
73
+ system("sudo -u #{@config.commands[@name.to_sym][:user]} #{@config.commands[@name.to_sym][:command]} > /dev/null 2>&1")
74
+ else
75
+ system("#{@config.commands[@name.to_sym][:command]} > /dev/null 2>&1")
76
+ end
77
+ time = Time.now - start
78
+ exit_code = $?.exitstatus
64
79
  else
65
- stdout, stderr, status = Open3.capture3(@config.commands[@name.to_sym][:command])
66
- end
67
- time = Time.now - start
68
- tp = Template::new(
80
+ puts " * Tracefull execution"
81
+ if @config.commands[@name.to_sym][:user] then
82
+ puts " * Execute with user : #{@config.commands[@name.to_sym][:user]}."
83
+ stdout, stderr, status = Open3.capture3("sudo -u #{@config.commands[@name.to_sym][:user]} #{@config.commands[@name.to_sym][:command]}")
84
+ else
85
+ stdout, stderr, status = Open3.capture3(@config.commands[@name.to_sym][:command])
86
+ end
87
+ time = Time.now - start
88
+ tp = Template::new(
69
89
  list_token: @config.execution_template_tokens,
70
90
  template_file: @config.execution_template_path)
71
- data = Hash::new
72
- data[:start_date] = start_date
73
- data[:end_date] = DateTime.now.to_s
74
- data[:cmd_name] = @name
75
- data[:cmd_line] = @config.commands[@name.to_sym][:command]
76
- data[:desc] = @config.commands[@name.to_sym][:desc]
77
- data[:status] = status.to_s
78
- data[:stdout] = stdout
79
- data[:stderr] = stderr
80
- data[:exec_time] = time.to_s
81
- backend = get_backend :execution_trace
82
- key = @name
83
- backend.put key: key, value: data.to_yaml
84
- exit_code = status.exitstatus
85
- end
91
+ data = Hash::new
92
+ data[:start_date] = start_date
93
+ data[:end_date] = DateTime.now.to_s
94
+ data[:cmd_name] = @name
95
+ data[:cmd_line] = @config.commands[@name.to_sym][:command]
96
+ data[:desc] = @config.commands[@name.to_sym][:desc]
97
+ data[:status] = status.to_s
98
+ data[:stdout] = stdout
99
+ data[:stderr] = stderr
100
+ data[:exec_time] = time.to_s
101
+ backend = get_backend :execution_trace
102
+ key = @name
103
+ backend.put key: key, value: data.to_yaml
104
+ exit_code = status.exitstatus
105
+ end
86
106
 
87
- puts " => exitcode #{exit_code}"
88
- if options[:notify] then
89
- acase = notify(exit_code,time.to_i)
90
- else
91
- puts " * Without Prometheus notification"
107
+ puts " => exitcode #{exit_code}"
108
+ if options[:notify] then
109
+ acase = notify(exit_code,time.to_i)
110
+ else
111
+ puts " * Without Prometheus notification"
112
+ end
92
113
  end
114
+
93
115
  if options[:callback] then
94
116
  on_failure = (@config.commands[@name.to_sym][:on_failure])? @config.commands[@name.to_sym][:on_failure] : false
95
117
  on_success = (@config.commands[@name.to_sym][:on_success])? @config.commands[@name.to_sym][:on_success] : false
96
-
97
118
  if on_failure and exit_code > 0 then
98
119
  puts " * On failure callback : #{on_failure}"
99
120
  if @config.commands.keys.include? on_failure then
@@ -115,6 +136,7 @@ module Splash
115
136
  else
116
137
  puts " * Without callbacks sequences"
117
138
  end
139
+ acase[:exit_code] = exit_code
118
140
  return acase
119
141
  end
120
142
  end
@@ -8,7 +8,7 @@ module Splash
8
8
  include Splash::Helpers
9
9
  # Setup action method for installing Splash
10
10
  # @return [Integer] an errorcode value
11
- def setupsplash
11
+ def setupsplash(options = {})
12
12
  conf_in_path = search_file_in_gem "prometheus-splash", "config/splash.yml"
13
13
  full_res = 0
14
14
  puts "Splash -> setup : "
@@ -1,7 +1,7 @@
1
1
  # coding: utf-8
2
2
  module Splash
3
3
  module Constants
4
- VERSION = "0.2.0"
4
+ VERSION = "0.3.0"
5
5
 
6
6
  # the path to th config file, not overridable by config
7
7
  CONFIG_FILE = "/etc/splash.yml"
@@ -1,6 +1,8 @@
1
1
  # coding: utf-8
2
2
  Dir[File.dirname(__FILE__) + '/orchestrator/*.rb'].each {|file| require file }
3
3
 
4
+
5
+
4
6
  module Splash
5
7
  module Orchestrator
6
8
 
@@ -77,7 +79,7 @@ module Splash
77
79
  if options[:ack] then
78
80
  command.ack
79
81
  else
80
- command.call_and_notify trace: true, notify: true, callback: true
82
+ return command.call_and_notify trace: true, notify: true, callback: true
81
83
  end
82
84
  end
83
85
 
@@ -15,7 +15,7 @@ module Splash
15
15
  return get_config.commands
16
16
  end
17
17
 
18
- def ack_command
18
+ def ack_command(payload)
19
19
  return self.execute command: payload[:name], ack: true
20
20
  end
21
21
 
@@ -27,15 +27,18 @@ module Splash
27
27
  end
28
28
  if payload.include? :schedule then
29
29
  sched,value = payload[:schedule].flatten
30
+ puts " * Schedule remote call command #{payload[:name]}, scheduling : #{sched.to_s} #{value}"
31
+ @server.send sched,value do
32
+ self.execute command: payload[:name]
33
+ end
34
+ return { :case => :quiet_exit }
30
35
  else
31
- sched = :in
32
- value = '1s'
36
+ puts " * Execute direct command"
37
+ puts payload[:name]
38
+ res = self.execute command: payload[:name]
39
+ puts res.inspect
40
+ return res
33
41
  end
34
- puts " * Schedule remote call command #{payload[:name]}, scheduling : #{sched.to_s} #{value}"
35
- @server.send sched,value do
36
- self.execute command: payload[:name]
37
- end
38
- return { :case => :quiet_exit }
39
42
  end
40
43
 
41
44
  end
@@ -64,8 +64,9 @@ module Splash
64
64
  lock = Mutex.new
65
65
  res = nil
66
66
  condition = ConditionVariable.new
67
- get_default_subscriber(queue: queue).subscribe(timeout: 5) do |delivery_info, properties, payload|
67
+ get_default_subscriber(queue: queue).subscribe do |delivery_info, properties, payload|
68
68
  res = YAML::load(payload)
69
+
69
70
  lock.synchronize { condition.signal }
70
71
  end
71
72
  get_default_client.publish queue: order[:queue], message: order.to_yaml
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prometheus-splash
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Romain GEORGES