eye 0.7 → 0.8.celluloid15

Sign up to get free protection for your applications and to get access to all the features.
Files changed (107) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +141 -0
  3. data/.travis.yml +5 -3
  4. data/CHANGES.md +9 -1
  5. data/README.md +5 -2
  6. data/Rakefile +6 -6
  7. data/bin/leye +9 -4
  8. data/bin/loader_eye +14 -15
  9. data/examples/custom_check.eye +24 -0
  10. data/examples/custom_trigger.eye +30 -0
  11. data/examples/delayed_job.eye +3 -3
  12. data/examples/dependency.eye +10 -11
  13. data/examples/leye_example/Eyefile +10 -0
  14. data/examples/notify.eye +3 -4
  15. data/examples/plugin/main.eye +5 -5
  16. data/examples/plugin/plugin.rb +10 -2
  17. data/examples/process_thin.rb +8 -8
  18. data/examples/processes/em.rb +18 -12
  19. data/examples/processes/forking.rb +5 -5
  20. data/examples/processes/sample.rb +46 -44
  21. data/examples/puma.eye +9 -8
  22. data/examples/rbenv.eye +5 -5
  23. data/examples/sidekiq.eye +3 -3
  24. data/examples/stress_test.eye +4 -4
  25. data/examples/syslog.eye +1 -1
  26. data/examples/test.eye +1 -2
  27. data/examples/thin-farm.eye +7 -8
  28. data/examples/triggers.eye +13 -15
  29. data/examples/unicorn.eye +12 -13
  30. data/eye.gemspec +16 -14
  31. data/lib/eye.rb +2 -3
  32. data/lib/eye/application.rb +5 -6
  33. data/lib/eye/checker.rb +44 -25
  34. data/lib/eye/checker/children_count.rb +1 -1
  35. data/lib/eye/checker/file_ctime.rb +1 -1
  36. data/lib/eye/checker/http.rb +13 -15
  37. data/lib/eye/checker/nop.rb +1 -0
  38. data/lib/eye/checker/socket.rb +60 -63
  39. data/lib/eye/checker/ssl_socket.rb +5 -5
  40. data/lib/eye/child_process.rb +6 -4
  41. data/lib/eye/cli.rb +74 -46
  42. data/lib/eye/cli/commands.rb +4 -5
  43. data/lib/eye/cli/render.rb +61 -41
  44. data/lib/eye/cli/server.rb +19 -16
  45. data/lib/eye/client.rb +1 -0
  46. data/lib/eye/config.rb +36 -33
  47. data/lib/eye/controller.rb +2 -3
  48. data/lib/eye/controller/commands.rb +1 -1
  49. data/lib/eye/controller/helpers.rb +2 -2
  50. data/lib/eye/controller/load.rb +19 -17
  51. data/lib/eye/controller/options.rb +1 -5
  52. data/lib/eye/controller/send_command.rb +21 -23
  53. data/lib/eye/controller/status.rb +17 -14
  54. data/lib/eye/dsl.rb +6 -1
  55. data/lib/eye/dsl/application_opts.rb +4 -3
  56. data/lib/eye/dsl/chain.rb +2 -2
  57. data/lib/eye/dsl/child_process_opts.rb +3 -3
  58. data/lib/eye/dsl/config_opts.rb +7 -7
  59. data/lib/eye/dsl/group_opts.rb +3 -3
  60. data/lib/eye/dsl/helpers.rb +1 -1
  61. data/lib/eye/dsl/main.rb +4 -3
  62. data/lib/eye/dsl/opts.rb +31 -28
  63. data/lib/eye/dsl/process_opts.rb +13 -7
  64. data/lib/eye/dsl/pure_opts.rb +13 -9
  65. data/lib/eye/dsl/validation.rb +48 -35
  66. data/lib/eye/group.rb +23 -8
  67. data/lib/eye/group/chain.rb +6 -6
  68. data/lib/eye/loader.rb +3 -3
  69. data/lib/eye/local.rb +9 -4
  70. data/lib/eye/logger.rb +11 -4
  71. data/lib/eye/notify.rb +10 -6
  72. data/lib/eye/notify/jabber.rb +1 -1
  73. data/lib/eye/notify/mail.rb +2 -2
  74. data/lib/eye/notify/slack.rb +4 -3
  75. data/lib/eye/process.rb +2 -0
  76. data/lib/eye/process/children.rb +4 -4
  77. data/lib/eye/process/commands.rb +38 -39
  78. data/lib/eye/process/config.rb +22 -16
  79. data/lib/eye/process/controller.rb +5 -19
  80. data/lib/eye/process/data.rb +11 -9
  81. data/lib/eye/process/monitor.rb +86 -76
  82. data/lib/eye/process/notify.rb +10 -10
  83. data/lib/eye/process/scheduler.rb +36 -31
  84. data/lib/eye/process/states.rb +7 -5
  85. data/lib/eye/process/states_history.rb +9 -3
  86. data/lib/eye/process/system.rb +35 -20
  87. data/lib/eye/process/trigger.rb +1 -5
  88. data/lib/eye/process/watchers.rb +12 -9
  89. data/lib/eye/reason.rb +4 -1
  90. data/lib/eye/server.rb +3 -2
  91. data/lib/eye/system.rb +22 -15
  92. data/lib/eye/system_resources.rb +17 -8
  93. data/lib/eye/trigger.rb +18 -16
  94. data/lib/eye/trigger/check_dependency.rb +7 -4
  95. data/lib/eye/trigger/flapping.rb +24 -7
  96. data/lib/eye/trigger/starting_guard.rb +7 -6
  97. data/lib/eye/trigger/stop_children.rb +2 -2
  98. data/lib/eye/trigger/transition.rb +1 -1
  99. data/lib/eye/trigger/wait_dependency.rb +3 -2
  100. data/lib/eye/utils.rb +4 -3
  101. data/lib/eye/utils/alive_array.rb +9 -4
  102. data/lib/eye/utils/celluloid_chain.rb +12 -10
  103. data/lib/eye/utils/mini_active_support.rb +16 -16
  104. data/lib/eye/utils/pmap.rb +2 -0
  105. data/lib/eye/utils/tail.rb +2 -2
  106. metadata +39 -8
  107. data/lib/eye/utils/leak_19.rb +0 -10
@@ -2,7 +2,7 @@ module Eye::Controller::Options
2
2
 
3
3
  def set_opt_logger(logger_args)
4
4
  # do not apply logger, if in stdout state
5
- if !%w{stdout stderr}.include?(Eye::Logger.dev)
5
+ unless %w[stdout stderr].include?(Eye::Logger.dev)
6
6
  Eye::Logger.link_logger(*logger_args)
7
7
  end
8
8
  end
@@ -11,8 +11,4 @@ module Eye::Controller::Options
11
11
  Eye::Logger.log_level = level
12
12
  end
13
13
 
14
- def set_opt_http(opts = {})
15
- warn "Warning, set http options not in reel-eye gem" if opts.present?
16
- end
17
-
18
14
  end
@@ -35,16 +35,16 @@ private
35
35
  def matched_objects(*args, &block)
36
36
  objs = find_objects(*args)
37
37
  res = objs.map(&:full_name)
38
- objs.each{|obj| block[obj] } if block
39
- {:result => res}
38
+ objs.each { |obj| block[obj] } if block
39
+ { result: res }
40
40
 
41
41
  rescue Error => ex
42
42
  log_ex(ex)
43
- {:error => ex.message}
43
+ { error: ex.message }
44
44
 
45
45
  rescue Celluloid::DeadActorError => ex
46
46
  log_ex(ex)
47
- {:error => "'#{ex.message}', try again!"}
47
+ { error: "'#{ex.message}', try again!" }
48
48
  end
49
49
 
50
50
  def remove_object_from_tree(obj)
@@ -56,12 +56,12 @@ private
56
56
  end
57
57
 
58
58
  if klass == Eye::Group
59
- @applications.each{|app| app.groups.delete(obj) }
59
+ @applications.each { |app| app.groups.delete(obj) }
60
60
  @current_config.delete_group(obj.name)
61
61
  end
62
62
 
63
63
  if klass == Eye::Process
64
- @applications.each{|app| app.groups.each{|gr| gr.processes.delete(obj) }}
64
+ @applications.each { |app| app.groups.each { |gr| gr.processes.delete(obj) } }
65
65
  @current_config.delete_process(obj.name)
66
66
  end
67
67
  end
@@ -76,14 +76,14 @@ private
76
76
 
77
77
  if obj_strs.size == 1 && (obj_strs[0].to_s.strip == 'all' || obj_strs[0].to_s.strip == '*')
78
78
  if h[:application]
79
- return @applications.select { |app| app.name == h[:application]}
79
+ return @applications.select { |app| app.name == h[:application] }
80
80
  else
81
81
  return @applications.dup
82
82
  end
83
83
  end
84
84
 
85
85
  res = Eye::Utils::AliveArray.new
86
- obj_strs.map{|c| c.to_s.split(',')}.flatten.each do |mask|
86
+ obj_strs.map { |c| c.to_s.split(',') }.flatten.each do |mask|
87
87
  objs = find_objects_by_mask(mask.to_s.strip)
88
88
  objs.select! { |obj| obj.app_name == h[:application] } if h[:application]
89
89
  res += objs
@@ -110,14 +110,15 @@ private
110
110
 
111
111
  # remove inherited targets
112
112
  res.each do |obj|
113
- sub_object = res.any?{|a| a.sub_object?(obj) }
113
+ sub_object = res.any? { |a| a.sub_object?(obj) }
114
114
  final << obj unless sub_object
115
115
  end
116
116
 
117
117
  res = final
118
118
 
119
119
  # try to remove objects with different applications
120
- apps, objs = Eye::Utils::AliveArray.new, Eye::Utils::AliveArray.new
120
+ apps = Eye::Utils::AliveArray.new
121
+ objs = Eye::Utils::AliveArray.new
121
122
  res.each do |obj|
122
123
  if obj.is_a?(Eye::Application)
123
124
  apps << obj
@@ -141,11 +142,11 @@ private
141
142
  r = left_regexp(mask)
142
143
 
143
144
  # find app
144
- res = @applications.select{|a| a.name =~ r || a.full_name =~ r }
145
+ res = @applications.select { |a| a.name =~ r || a.full_name =~ r }
145
146
 
146
147
  # find group
147
148
  @applications.each do |a|
148
- res += a.groups.select{|gr| gr.name =~ r || gr.full_name =~ r }
149
+ res += a.groups.select { |gr| gr.name =~ r || gr.full_name =~ r }
149
150
  end
150
151
 
151
152
  # find process
@@ -154,16 +155,12 @@ private
154
155
  gr.processes.each do |p|
155
156
  res << p if p.name =~ r || p.full_name =~ r
156
157
 
157
- # child matching
158
- if p.children.present?
159
- children = p.children.values
160
- res += children.select do |ch|
161
- name = ch.name rescue ''
162
- full_name = ch.full_name rescue ''
163
- name =~ r || full_name =~ r
164
- end
158
+ # children matching
159
+ p.children.each_value do |ch|
160
+ name = ch.name rescue ''
161
+ full_name = ch.full_name rescue ''
162
+ res << ch if name =~ r || full_name =~ r
165
163
  end
166
-
167
164
  end
168
165
  end
169
166
  end
@@ -173,11 +170,12 @@ private
173
170
 
174
171
  def left_regexp(mask)
175
172
  str = Regexp.escape(mask).gsub('\*', '.*?')
176
- %r|\A#{str}|
173
+ %r[\A#{str}]
177
174
  end
178
175
 
179
176
  def exact_regexp(mask)
180
177
  str = Regexp.escape(mask).gsub('\*', '.*?')
181
- %r|\A#{str}\z|
178
+ %r[\A#{str}\z]
182
179
  end
180
+
183
181
  end
@@ -2,18 +2,20 @@ module Eye::Controller::Status
2
2
 
3
3
  def debug_data(*args)
4
4
  h = args.extract_options!
5
- actors = Celluloid::Actor.all.map{|actor| actor.wrapped_object.class.to_s }.group_by{|a| a}.map{|k,v| [k, v.size]}.sort_by{ |a| a[1] }.reverse
5
+ actors = Celluloid::Actor.all.map { |actor| actor.wrapped_object.class.to_s }.group_by { |a| a }
6
+ actors = actors.map { |k, v| [k, v.size] }.sort_by { |a| a[1] }.reverse
6
7
 
7
8
  res = {
8
- :about => Eye::ABOUT,
9
- :resources => Eye::SystemResources.resources($$),
10
- :ruby => RUBY_DESCRIPTION,
11
- :gems => %w|Celluloid Celluloid::IO StateMachine NIO Timers Sigar|.map{|c| gem_version(c) },
12
- :logger => Eye::Logger.args.present? ? [Eye::Logger.dev.to_s, *Eye::Logger.args] : Eye::Logger.dev.to_s,
13
- :dir => Eye::Local.dir,
14
- :pid_path => Eye::Local::pid_path,
15
- :sock_path => Eye::Local::socket_path,
16
- :actors => actors
9
+ about: Eye::ABOUT,
10
+ resources: Eye::SystemResources.resources($$),
11
+ ruby: RUBY_DESCRIPTION,
12
+ gems: %w[Celluloid Celluloid::IO StateMachine NIO Timers Sigar].map { |c| gem_version(c) },
13
+ logger: Eye::Logger.args.present? ? [Eye::Logger.dev.to_s, *Eye::Logger.args] : Eye::Logger.dev.to_s,
14
+ home: Eye::Local.home,
15
+ dir: Eye::Local.dir,
16
+ pid_path: Eye::Local.pid_path,
17
+ sock_path: Eye::Local.socket_path,
18
+ actors: actors
17
19
  }
18
20
 
19
21
  res[:config_yaml] = YAML.dump(current_config.to_h) if h[:config].present?
@@ -22,17 +24,18 @@ module Eye::Controller::Status
22
24
  end
23
25
 
24
26
  def info_data(*args)
25
- {:subtree => info_objects(*args).map{|a| a.status_data } }
27
+ h = args.extract_options!
28
+ { subtree: info_objects(*args).map { |a| a.status_data(h) } }
26
29
  end
27
30
 
28
31
  def short_data(*args)
29
- {:subtree => info_objects(*args).select{ |o| o.class == Eye::Application }.map{|a| a.status_data_short } }
32
+ { subtree: info_objects(*args).select { |o| o.class == Eye::Application }.map(&:status_data_short) }
30
33
  end
31
34
 
32
35
  def history_data(*args)
33
36
  res = {}
34
37
  history_objects(*args).each do |process|
35
- res[process.full_name] = process.schedule_history.reject{|c| c[:state] == :check_crash }
38
+ res[process.full_name] = process.schedule_history.reject { |c| c[:state] == :check_crash }
36
39
  end
37
40
  res
38
41
  end
@@ -42,7 +45,7 @@ private
42
45
  def info_objects(*args)
43
46
  res = []
44
47
  return @applications if args.empty?
45
- matched_objects(*args){|obj| res << obj }
48
+ matched_objects(*args) { |obj| res << obj }
46
49
  res
47
50
  end
48
51
 
@@ -18,6 +18,7 @@ class Eye::Dsl
18
18
  class Error < Exception; end
19
19
 
20
20
  class << self
21
+
21
22
  attr_accessor :verbose
22
23
 
23
24
  def debug(msg = '')
@@ -36,7 +37,9 @@ class Eye::Dsl
36
37
 
37
38
  Eye.parsed_config.transform!
38
39
  Eye.parsed_config.validate!
39
- Eye.parsed_config
40
+ parsed_config = Eye.parsed_config
41
+ Eye.parsed_config = nil # remove object for better GC
42
+ parsed_config
40
43
  end
41
44
 
42
45
  def parse_apps(*args)
@@ -46,7 +49,9 @@ class Eye::Dsl
46
49
  def check_name(name)
47
50
  raise Error, "':' is not allowed in name '#{name}'" if name.to_s.include?(':')
48
51
  end
52
+
49
53
  end
54
+
50
55
  end
51
56
 
52
57
  # extend here global module
@@ -30,10 +30,11 @@ class Eye::Dsl::ApplicationOpts < Eye::Dsl::Opts
30
30
 
31
31
  def process(name, &block)
32
32
  res = nil
33
- group('__default__'){ res = process(name.to_s, &block) }
33
+ group('__default__') { res = process(name.to_s, &block) }
34
34
  res
35
35
  end
36
36
 
37
- alias xgroup nop
38
- alias xprocess nop
37
+ alias_method :xgroup, :nop
38
+ alias_method :xprocess, :nop
39
+
39
40
  end
@@ -5,8 +5,8 @@ module Eye::Dsl::Chain
5
5
 
6
6
  acts.each do |act|
7
7
  @config[:chain] ||= {}
8
- @config[:chain][act] = opts.merge(:action => act)
8
+ @config[:chain][act] = opts.merge(action: act)
9
9
  end
10
10
  end
11
11
 
12
- end
12
+ end
@@ -2,12 +2,12 @@ class Eye::Dsl::ChildProcessOpts < Eye::Dsl::Opts
2
2
 
3
3
  def allow_options
4
4
  [:stop_command, :restart_command, :children_update_period,
5
- :stop_signals, :stop_grace, :stop_timeout, :restart_timeout]
5
+ :stop_signals, :stop_grace, :stop_timeout, :restart_timeout]
6
6
  end
7
7
 
8
- def triggers(*args)
8
+ def triggers(*_args)
9
9
  raise Eye::Dsl::Error, 'triggers not allowed in monitor_children'
10
10
  end
11
- alias trigger triggers
11
+ alias_method :trigger, :triggers
12
12
 
13
13
  end
@@ -10,13 +10,13 @@ class Eye::Dsl::ConfigOpts < Eye::Dsl::PureOpts
10
10
  @config[:logger] = args
11
11
  end
12
12
  end
13
- alias logger= logger
13
+ alias_method :logger=, :logger
14
14
 
15
15
  def syslog(name = 'eye', *args)
16
16
  require 'syslog/logger'
17
17
  Syslog::Logger.new(name, *args)
18
18
  rescue LoadError
19
- raise Eye::Dsl::Error, "logger syslog requires Ruby >= 2.0"
19
+ raise Eye::Dsl::Error, 'logger syslog requires Ruby >= 2.0'
20
20
  end
21
21
 
22
22
  # ==== contact options ==============================
@@ -24,7 +24,7 @@ class Eye::Dsl::ConfigOpts < Eye::Dsl::PureOpts
24
24
  create_options_methods([type], Hash)
25
25
 
26
26
  define_method("set_#{type}") do |value|
27
- value = value.merge(:type => type)
27
+ value = value.merge(type: type)
28
28
  super(value)
29
29
  Eye::Notify.validate!(value)
30
30
  end
@@ -36,14 +36,14 @@ class Eye::Dsl::ConfigOpts < Eye::Dsl::PureOpts
36
36
  raise Eye::Dsl::Error, "unknown contact_type #{contact_type}" unless Eye::Notify::TYPES[contact_type]
37
37
  raise Eye::Dsl::Error, 'contact should be a String' unless contact.is_a?(String)
38
38
 
39
- notify_hash = @config[contact_type] || (@parent && @parent.config[contact_type]) || Eye::parsed_config.settings[contact_type] || {}
40
- validate_hash = notify_hash.merge(contact_opts).merge(:type => contact_type)
39
+ notify_hash = @config[contact_type] || (@parent && @parent.config[contact_type]) || Eye.parsed_config.settings[contact_type] || {}
40
+ validate_hash = notify_hash.merge(contact_opts).merge(type: contact_type)
41
41
 
42
42
  Eye::Notify.validate!(validate_hash)
43
43
 
44
44
  @config[:contacts] ||= {}
45
- @config[:contacts][contact_name.to_s] = {name: contact_name.to_s, type: contact_type,
46
- contact: contact, opts: contact_opts}
45
+ @config[:contacts][contact_name.to_s] = { name: contact_name.to_s, type: contact_type,
46
+ contact: contact, opts: contact_opts }
47
47
  end
48
48
 
49
49
  def contact_group(contact_group_name, &block)
@@ -25,8 +25,8 @@ class Eye::Dsl::GroupOpts < Eye::Dsl::Opts
25
25
  opts
26
26
  end
27
27
 
28
- alias xprocess nop
29
- alias application parent
30
- alias app application
28
+ alias_method :xprocess, :nop
29
+ alias_method :application, :parent
30
+ alias_method :app, :application
31
31
 
32
32
  end
@@ -14,7 +14,7 @@ end
14
14
  def example_process(proxy, name)
15
15
  proxy.process(name) do
16
16
  pid_file "/tmp/#{name}.pid"
17
- start_command "sleep 100"
17
+ start_command 'sleep 100'
18
18
  daemonize true
19
19
  end
20
20
  end
@@ -1,4 +1,5 @@
1
1
  module Eye::Dsl::Main
2
+
2
3
  attr_accessor :parsed_config, :parsed_filename, :parsed_default_app
3
4
 
4
5
  def application(name, &block)
@@ -19,8 +20,8 @@ module Eye::Dsl::Main
19
20
  Eye::Dsl.debug { "<= app: #{name}" }
20
21
  end
21
22
 
22
- alias project application
23
- alias app application
23
+ alias_method :project, :application
24
+ alias_method :app, :application
24
25
 
25
26
  def load(glob = '')
26
27
  return if glob.blank?
@@ -53,7 +54,7 @@ module Eye::Dsl::Main
53
54
  Eye::Dsl.debug { '<= config' }
54
55
  end
55
56
 
56
- alias settings config
57
+ alias_method :settings, :config
57
58
 
58
59
  def shared
59
60
  require 'ostruct'
@@ -1,28 +1,28 @@
1
1
  class Eye::Dsl::Opts < Eye::Dsl::PureOpts
2
2
 
3
- STR_OPTIONS = [ :pid_file, :working_dir, :stdout, :stderr, :stdall, :stdin, :start_command,
4
- :stop_command, :restart_command, :uid, :gid ]
3
+ STR_OPTIONS = [:pid_file, :working_dir, :stdout, :stderr, :stdall, :stdin, :start_command,
4
+ :stop_command, :restart_command, :uid, :gid]
5
5
  create_options_methods(STR_OPTIONS, String)
6
6
 
7
- BOOL_OPTIONS = [ :daemonize, :keep_alive, :auto_start, :stop_on_delete, :clear_pid, :preserve_fds, :use_leaf_child, :clear_env ]
7
+ BOOL_OPTIONS = [:daemonize, :keep_alive, :auto_start, :stop_on_delete, :clear_pid, :preserve_fds, :use_leaf_child,
8
+ :clear_env, :check_identity]
8
9
  create_options_methods(BOOL_OPTIONS, [TrueClass, FalseClass])
9
10
 
10
- INTERVAL_OPTIONS = [ :check_alive_period, :start_timeout, :restart_timeout, :stop_timeout, :start_grace,
11
- :restart_grace, :stop_grace, :children_update_period, :restore_in,
12
- :auto_update_pidfile_grace, :revert_fuckup_pidfile_grace ]
11
+ INTERVAL_OPTIONS = [:check_alive_period, :start_timeout, :restart_timeout, :stop_timeout, :start_grace,
12
+ :restart_grace, :stop_grace, :children_update_period, :restore_in,
13
+ :auto_update_pidfile_grace, :revert_fuckup_pidfile_grace, :check_identity_period, :check_identity_grace]
13
14
  create_options_methods(INTERVAL_OPTIONS, [Fixnum, Float])
14
15
 
15
16
  create_options_methods([:environment], Hash)
16
17
  create_options_methods([:umask], Fixnum)
17
18
 
18
-
19
19
  def initialize(name = nil, parent = nil)
20
20
  super(name, parent)
21
21
 
22
22
  @config[:application] = parent.name if parent.is_a?(Eye::Dsl::ApplicationOpts) && parent.name != '__default__'
23
23
  @config[:group] = parent.name if parent.is_a?(Eye::Dsl::GroupOpts)
24
24
 
25
- # hack for full name
25
+ # HACK: for full name
26
26
  @full_name = parent.full_name if @name == '__default__' && parent.respond_to?(:full_name)
27
27
  end
28
28
 
@@ -62,10 +62,10 @@ class Eye::Dsl::Opts < Eye::Dsl::PureOpts
62
62
  @config[:triggers].try :delete, nac[:name]
63
63
  end
64
64
 
65
- alias check checks
66
- alias nocheck nochecks
67
- alias trigger triggers
68
- alias notrigger notriggers
65
+ alias_method :check, :checks
66
+ alias_method :nocheck, :nochecks
67
+ alias_method :trigger, :triggers
68
+ alias_method :notrigger, :notriggers
69
69
 
70
70
  def command(cmd, arg)
71
71
  @config[:user_commands] ||= {}
@@ -95,16 +95,14 @@ class Eye::Dsl::Opts < Eye::Dsl::PureOpts
95
95
  end
96
96
 
97
97
  def set_stop_command(cmd)
98
- raise Eye::Dsl::Error, "cannot use both stop_signals and stop_command" if @config[:stop_signals]
98
+ raise Eye::Dsl::Error, 'cannot use both stop_signals and stop_command' if @config[:stop_signals]
99
99
  super
100
100
  end
101
101
 
102
102
  def stop_signals(*args)
103
- raise Eye::Dsl::Error, "cannot use both stop_signals and stop_command" if @config[:stop_command]
103
+ raise Eye::Dsl::Error, 'cannot use both stop_signals and stop_command' if @config[:stop_command]
104
104
 
105
- if args.count == 0
106
- return @config[:stop_signals]
107
- end
105
+ return @config[:stop_signals] if args.count == 0
108
106
 
109
107
  signals = Array(args).flatten
110
108
  validate_signals(signals)
@@ -121,8 +119,8 @@ class Eye::Dsl::Opts < Eye::Dsl::PureOpts
121
119
  @config[:environment].merge!(value)
122
120
  end
123
121
 
124
- alias dir working_dir
125
- alias env environment
122
+ alias_method :dir, :working_dir
123
+ alias_method :env, :environment
126
124
 
127
125
  def set_stdall(value)
128
126
  super
@@ -150,7 +148,7 @@ class Eye::Dsl::Opts < Eye::Dsl::PureOpts
150
148
  end
151
149
 
152
150
  def scoped(&block)
153
- h = self.class.new(self.name, self)
151
+ h = self.class.new(name, self)
154
152
  h.instance_eval(&block)
155
153
  Eye::Utils.deep_merge!(config, h.config, [:groups, :processes])
156
154
  end
@@ -166,7 +164,7 @@ class Eye::Dsl::Opts < Eye::Dsl::PureOpts
166
164
  host = Eye::Local.host
167
165
 
168
166
  if glob.is_a?(Array)
169
- on_server = !!glob.any?{|elem| elem == host}
167
+ on_server = !!glob.any? { |elem| elem == host }
170
168
  elsif glob.is_a?(Regexp)
171
169
  on_server = !!host.match(glob)
172
170
  elsif glob.is_a?(String) || glob.is_a?(Symbol)
@@ -183,15 +181,15 @@ class Eye::Dsl::Opts < Eye::Dsl::PureOpts
183
181
 
184
182
  def load_env(filename = '~/.env', raise_when_no_file = true)
185
183
  fnames = [File.expand_path(filename, @config[:working_dir]),
186
- File.expand_path(filename)].uniq
184
+ File.expand_path(filename)].uniq
187
185
  filenames = fnames.select { |f| File.exist?(f) }
188
186
 
189
187
  if filenames.size < 1
190
- unless raise_when_no_file
188
+ if raise_when_no_file
189
+ raise Eye::Dsl::Error, "load_env not found in #{fnames}"
190
+ else
191
191
  warn "load_env not found file: '#{filenames.first}'"
192
192
  return
193
- else
194
- raise Eye::Dsl::Error, "load_env not found in #{fnames}"
195
193
  end
196
194
  end
197
195
  raise Eye::Dsl::Error, "load_env conflict filenames: #{filenames}" if filenames.size > 1
@@ -213,13 +211,18 @@ private
213
211
 
214
212
  def validate_signals(signals = nil)
215
213
  return unless signals
216
- raise Eye::Dsl::Error, "signals should be Array" unless signals.is_a?(Array)
214
+ raise Eye::Dsl::Error, 'signals should be Array' unless signals.is_a?(Array)
217
215
  s = signals.clone
218
216
  while s.present?
219
217
  sig = s.shift
220
218
  timeout = s.shift
221
- raise Eye::Dsl::Error, "signal should be String, Symbol, Fixnum, not #{sig.inspect}" if sig && ![String, Symbol, Fixnum].include?(sig.class)
222
- raise Eye::Dsl::Error, "signal sleep should be Numeric, not #{timeout.inspect}" if timeout && ![Fixnum, Float].include?(timeout.class)
219
+ if sig && ![String, Symbol, Fixnum].include?(sig.class)
220
+ raise Eye::Dsl::Error, "signal should be String, Symbol, Fixnum, not #{sig.inspect}"
221
+ end
222
+
223
+ if timeout && ![Fixnum, Float].include?(timeout.class)
224
+ raise Eye::Dsl::Error, "signal sleep should be Numeric, not #{timeout.inspect}"
225
+ end
223
226
  end
224
227
  end
225
228