eye 0.1.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (190) hide show
  1. data/.gitignore +31 -0
  2. data/.rspec +2 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE +22 -0
  5. data/README.md +132 -0
  6. data/Rakefile +18 -0
  7. data/bin/eye +282 -0
  8. data/bin/loader_eye +56 -0
  9. data/examples/processes/em.rb +56 -0
  10. data/examples/processes/forking.rb +20 -0
  11. data/examples/processes/sample.rb +144 -0
  12. data/examples/rbenv.eye +11 -0
  13. data/examples/test.eye +65 -0
  14. data/examples/unicorn.eye +29 -0
  15. data/eye.gemspec +37 -0
  16. data/lib/eye.rb +25 -0
  17. data/lib/eye/application.rb +65 -0
  18. data/lib/eye/checker.rb +118 -0
  19. data/lib/eye/checker/cpu.rb +27 -0
  20. data/lib/eye/checker/file_ctime.rb +29 -0
  21. data/lib/eye/checker/file_size.rb +38 -0
  22. data/lib/eye/checker/http.rb +94 -0
  23. data/lib/eye/checker/memory.rb +27 -0
  24. data/lib/eye/checker/socket.rb +148 -0
  25. data/lib/eye/checker/validation.rb +49 -0
  26. data/lib/eye/child_process.rb +75 -0
  27. data/lib/eye/client.rb +32 -0
  28. data/lib/eye/control.rb +2 -0
  29. data/lib/eye/controller.rb +43 -0
  30. data/lib/eye/controller/commands.rb +64 -0
  31. data/lib/eye/controller/helpers.rb +61 -0
  32. data/lib/eye/controller/load.rb +224 -0
  33. data/lib/eye/controller/send_command.rb +88 -0
  34. data/lib/eye/controller/status.rb +136 -0
  35. data/lib/eye/dsl.rb +52 -0
  36. data/lib/eye/dsl/application_opts.rb +33 -0
  37. data/lib/eye/dsl/chain.rb +12 -0
  38. data/lib/eye/dsl/child_process_opts.rb +7 -0
  39. data/lib/eye/dsl/config_opts.rb +11 -0
  40. data/lib/eye/dsl/group_opts.rb +27 -0
  41. data/lib/eye/dsl/helpers.rb +12 -0
  42. data/lib/eye/dsl/main.rb +58 -0
  43. data/lib/eye/dsl/opts.rb +88 -0
  44. data/lib/eye/dsl/process_opts.rb +21 -0
  45. data/lib/eye/dsl/pure_opts.rb +132 -0
  46. data/lib/eye/dsl/validate.rb +41 -0
  47. data/lib/eye/group.rb +125 -0
  48. data/lib/eye/group/chain.rb +68 -0
  49. data/lib/eye/io/unix_server.rb +44 -0
  50. data/lib/eye/io/unix_socket.rb +39 -0
  51. data/lib/eye/loader.rb +13 -0
  52. data/lib/eye/logger.rb +80 -0
  53. data/lib/eye/process.rb +83 -0
  54. data/lib/eye/process/child.rb +61 -0
  55. data/lib/eye/process/commands.rb +256 -0
  56. data/lib/eye/process/config.rb +70 -0
  57. data/lib/eye/process/controller.rb +72 -0
  58. data/lib/eye/process/data.rb +46 -0
  59. data/lib/eye/process/monitor.rb +97 -0
  60. data/lib/eye/process/notify.rb +17 -0
  61. data/lib/eye/process/scheduler.rb +50 -0
  62. data/lib/eye/process/states.rb +92 -0
  63. data/lib/eye/process/states_history.rb +62 -0
  64. data/lib/eye/process/system.rb +60 -0
  65. data/lib/eye/process/trigger.rb +32 -0
  66. data/lib/eye/process/watchers.rb +67 -0
  67. data/lib/eye/server.rb +51 -0
  68. data/lib/eye/settings.rb +35 -0
  69. data/lib/eye/system.rb +145 -0
  70. data/lib/eye/system_resources.rb +83 -0
  71. data/lib/eye/trigger.rb +53 -0
  72. data/lib/eye/trigger/flapping.rb +24 -0
  73. data/lib/eye/utils.rb +5 -0
  74. data/lib/eye/utils/alive_array.rb +31 -0
  75. data/lib/eye/utils/celluloid_chain.rb +51 -0
  76. data/lib/eye/utils/leak_19.rb +7 -0
  77. data/lib/eye/utils/tail.rb +20 -0
  78. data/spec/checker/cpu_spec.rb +58 -0
  79. data/spec/checker/file_ctime_spec.rb +34 -0
  80. data/spec/checker/file_size_spec.rb +107 -0
  81. data/spec/checker/http_spec.rb +109 -0
  82. data/spec/checker/memory_spec.rb +64 -0
  83. data/spec/checker/socket_spec.rb +116 -0
  84. data/spec/checker_spec.rb +188 -0
  85. data/spec/child_process/child_process_spec.rb +46 -0
  86. data/spec/client_server_spec.rb +34 -0
  87. data/spec/controller/commands_spec.rb +92 -0
  88. data/spec/controller/controller_spec.rb +133 -0
  89. data/spec/controller/find_objects_spec.rb +150 -0
  90. data/spec/controller/group_spec.rb +110 -0
  91. data/spec/controller/intergration_spec.rb +327 -0
  92. data/spec/controller/load_spec.rb +326 -0
  93. data/spec/controller/races_spec.rb +70 -0
  94. data/spec/controller/stop_on_delete_spec.rb +157 -0
  95. data/spec/dsl/chain_spec.rb +140 -0
  96. data/spec/dsl/checks_spec.rb +202 -0
  97. data/spec/dsl/config_spec.rb +44 -0
  98. data/spec/dsl/dsl_spec.rb +73 -0
  99. data/spec/dsl/getter_spec.rb +223 -0
  100. data/spec/dsl/integration_spec.rb +311 -0
  101. data/spec/dsl/load_spec.rb +52 -0
  102. data/spec/dsl/process_spec.rb +330 -0
  103. data/spec/dsl/sub_procs_spec.rb +93 -0
  104. data/spec/dsl/with_server_spec.rb +104 -0
  105. data/spec/example/em.rb +57 -0
  106. data/spec/example/forking.rb +20 -0
  107. data/spec/example/sample.rb +154 -0
  108. data/spec/fixtures/dsl/0.rb +8 -0
  109. data/spec/fixtures/dsl/0a.rb +8 -0
  110. data/spec/fixtures/dsl/0c.rb +8 -0
  111. data/spec/fixtures/dsl/1.rb +5 -0
  112. data/spec/fixtures/dsl/bad.eye +6 -0
  113. data/spec/fixtures/dsl/configs/1.eye +3 -0
  114. data/spec/fixtures/dsl/configs/2.eye +1 -0
  115. data/spec/fixtures/dsl/configs/3.eye +1 -0
  116. data/spec/fixtures/dsl/configs/4.eye +3 -0
  117. data/spec/fixtures/dsl/empty.eye +20 -0
  118. data/spec/fixtures/dsl/include_test.eye +5 -0
  119. data/spec/fixtures/dsl/include_test/1.rb +6 -0
  120. data/spec/fixtures/dsl/include_test/ha.rb +4 -0
  121. data/spec/fixtures/dsl/include_test2.eye +5 -0
  122. data/spec/fixtures/dsl/integration.eye +30 -0
  123. data/spec/fixtures/dsl/integration2.eye +32 -0
  124. data/spec/fixtures/dsl/integration_locks.eye +30 -0
  125. data/spec/fixtures/dsl/integration_sor.eye +32 -0
  126. data/spec/fixtures/dsl/integration_sor2.eye +27 -0
  127. data/spec/fixtures/dsl/integration_sor3.eye +32 -0
  128. data/spec/fixtures/dsl/load.eye +25 -0
  129. data/spec/fixtures/dsl/load2.eye +7 -0
  130. data/spec/fixtures/dsl/load2_dup2.eye +13 -0
  131. data/spec/fixtures/dsl/load2_dup_pid.eye +7 -0
  132. data/spec/fixtures/dsl/load3.eye +10 -0
  133. data/spec/fixtures/dsl/load4.eye +7 -0
  134. data/spec/fixtures/dsl/load5.eye +8 -0
  135. data/spec/fixtures/dsl/load6.eye +17 -0
  136. data/spec/fixtures/dsl/load_dubls.eye +36 -0
  137. data/spec/fixtures/dsl/load_dup_ex_names.eye +15 -0
  138. data/spec/fixtures/dsl/load_error.eye +5 -0
  139. data/spec/fixtures/dsl/load_error_folder/load3.eye +10 -0
  140. data/spec/fixtures/dsl/load_error_folder/load4.eye +7 -0
  141. data/spec/fixtures/dsl/load_folder/load3.eye +10 -0
  142. data/spec/fixtures/dsl/load_folder/load4.eye +7 -0
  143. data/spec/fixtures/dsl/load_int.eye +8 -0
  144. data/spec/fixtures/dsl/load_int2.eye +13 -0
  145. data/spec/fixtures/dsl/load_logger.eye +26 -0
  146. data/spec/fixtures/dsl/load_logger2.eye +3 -0
  147. data/spec/fixtures/dsl/long_load.eye +5 -0
  148. data/spec/fixtures/dsl/subfolder1/proc1.rb +3 -0
  149. data/spec/fixtures/dsl/subfolder2.eye +9 -0
  150. data/spec/fixtures/dsl/subfolder2/common.rb +1 -0
  151. data/spec/fixtures/dsl/subfolder2/proc2.rb +3 -0
  152. data/spec/fixtures/dsl/subfolder2/sub/proc3.rb +6 -0
  153. data/spec/fixtures/dsl/subfolder3.eye +8 -0
  154. data/spec/fixtures/dsl/subfolder3/common.rb +1 -0
  155. data/spec/fixtures/dsl/subfolder3/proc4.rb +3 -0
  156. data/spec/fixtures/dsl/subfolder3/sub/proc5.rb +6 -0
  157. data/spec/fixtures/dsl/subfolder4.eye +6 -0
  158. data/spec/fixtures/dsl/subfolder4/a.rb +2 -0
  159. data/spec/fixtures/dsl/subfolder4/b.rb +1 -0
  160. data/spec/fixtures/dsl/subfolder4/c.rb +1 -0
  161. data/spec/mock_spec.rb +32 -0
  162. data/spec/process/checks/child_checks_spec.rb +79 -0
  163. data/spec/process/checks/cpu_spec.rb +114 -0
  164. data/spec/process/checks/ctime_spec.rb +43 -0
  165. data/spec/process/checks/fsize_spec.rb +22 -0
  166. data/spec/process/checks/http_spec.rb +52 -0
  167. data/spec/process/checks/intergration_spec.rb +32 -0
  168. data/spec/process/checks/memory_spec.rb +113 -0
  169. data/spec/process/child_process_spec.rb +125 -0
  170. data/spec/process/config_spec.rb +75 -0
  171. data/spec/process/controller_spec.rb +173 -0
  172. data/spec/process/monitoring_spec.rb +180 -0
  173. data/spec/process/restart_spec.rb +174 -0
  174. data/spec/process/scheduler_spec.rb +150 -0
  175. data/spec/process/start_spec.rb +261 -0
  176. data/spec/process/states_history_spec.rb +118 -0
  177. data/spec/process/stop_spec.rb +150 -0
  178. data/spec/process/system_spec.rb +100 -0
  179. data/spec/process/triggers/flapping_spec.rb +81 -0
  180. data/spec/process/update_config_spec.rb +63 -0
  181. data/spec/spec_helper.rb +120 -0
  182. data/spec/support/rr_celluloid.rb +36 -0
  183. data/spec/support/scheduler_hack.rb +16 -0
  184. data/spec/support/spec_support.rb +164 -0
  185. data/spec/system_resources_spec.rb +59 -0
  186. data/spec/system_spec.rb +170 -0
  187. data/spec/utils/alive_array_spec.rb +50 -0
  188. data/spec/utils/celluloid_chain_spec.rb +82 -0
  189. data/spec/utils/tail_spec.rb +21 -0
  190. metadata +558 -0
@@ -0,0 +1,88 @@
1
+ module Eye::Controller::SendCommand
2
+
3
+ def send_command(command, *obj_strs)
4
+ matched_objects(*obj_strs) do |obj|
5
+ obj.send_command(command)
6
+
7
+ if command.to_sym == :delete
8
+ remove_object_from_tree(obj)
9
+ set_proc_line # to sync proc line if was delete application
10
+ GC.start
11
+ end
12
+ end
13
+ end
14
+
15
+ def match(*obj_strs)
16
+ matched_objects(*obj_strs)
17
+ end
18
+
19
+ def signal(sig, *obj_strs)
20
+ matched_objects(*obj_strs) do |obj|
21
+ obj.send_command :signal, sig || 0
22
+ end
23
+ end
24
+
25
+ private
26
+
27
+ def matched_objects(*obj_strs, &block)
28
+ objs = find_objects(*obj_strs)
29
+ res = objs.map(&:full_name)
30
+ objs.each{|obj| block[obj] } if block
31
+ res
32
+ end
33
+
34
+ def remove_object_from_tree(obj)
35
+ @applications.delete(obj)
36
+ @applications.each{|app| app.groups.delete(obj) }
37
+ @applications.each{|app| app.groups.each{|gr| gr.processes.delete(obj) }}
38
+ end
39
+
40
+ # find object to action, restart ... (app, group or process)
41
+ # nil if not found
42
+ def find_objects(*obj_strs)
43
+ return [] if obj_strs.blank?
44
+ return @applications if obj_strs.size == 1 && obj_strs[0].strip == 'all'
45
+
46
+ res = obj_strs.map{|c| c.split(",").map{|mask| find_objects_by_mask(mask) }}.flatten
47
+
48
+ if res.size > 1
49
+ # remove inherited targets
50
+
51
+ final = []
52
+ res.each do |obj|
53
+ sub_object = res.any?{|a| a.sub_object?(obj) }
54
+ final << obj unless sub_object
55
+ end
56
+
57
+ res = final
58
+ end
59
+
60
+ res.present? ? Eye::Utils::AliveArray.new(res) : res
61
+ end
62
+
63
+ def find_objects_by_mask(mask)
64
+ mask.strip!
65
+
66
+ res = []
67
+ str = Regexp.escape(mask).gsub('\*', '.*?')
68
+ r = %r{\A#{str}\z}
69
+
70
+ # find app
71
+ res = @applications.select{|a| a.name =~ r || a.full_name =~ r }
72
+
73
+ # find group
74
+ @applications.each do |a|
75
+ res += a.groups.select{|gr| gr.name =~ r || gr.full_name =~ r }
76
+ end
77
+
78
+ # find process
79
+ @applications.each do |a|
80
+ a.groups.each do |gr|
81
+ res += gr.processes.select{|p| p.name =~ r || p.full_name =~ r }
82
+ end
83
+ end
84
+
85
+ res
86
+ end
87
+
88
+ end
@@ -0,0 +1,136 @@
1
+ module Eye::Controller::Status
2
+
3
+ def info_objects(mask = nil)
4
+ res = []
5
+ return @applications unless mask
6
+ matched_objects(mask){|obj| res << obj }
7
+ res
8
+ end
9
+
10
+ def info_data(mask = nil)
11
+ {:subtree => info_objects(mask).map{|a| a.status_data } }
12
+ end
13
+
14
+ def info_data_debug(mask = nil)
15
+ {:subtree => info_objects(mask).map{|a| a.status_data(true) } }
16
+ end
17
+
18
+ def info_string(mask = nil)
19
+ make_str(info_data(mask)).to_s
20
+ end
21
+
22
+ def info_string_short
23
+ make_str({:subtree => @applications.map{|a| a.status_data_short } }).to_s
24
+ end
25
+
26
+ def info_string_debug(show_config = false)
27
+ actors = Celluloid::Actor.all.map{|actor| actor.instance_variable_get(:@klass) }.group_by{|a| a}.map{|k,v| [k, v.size]}.sort_by{|a|a[1]}.reverse
28
+
29
+ str = <<-S
30
+ About: #{Eye::ABOUT}
31
+ Info: #{resources_str(Eye::SystemResources.resources($$), false)}
32
+ Logger: #{Eye::Logger.dev}
33
+ Socket: #{Eye::Settings::socket_path}
34
+ PidPath: #{Eye::Settings::pid_path}
35
+ Actors: #{actors.inspect}
36
+
37
+ #{make_str(info_data_debug)}
38
+ S
39
+
40
+ if show_config
41
+ str += "\nCurrent config: \n"
42
+ str += YAML.dump(current_config)
43
+ end
44
+
45
+ GC.start
46
+ str
47
+ end
48
+
49
+ private
50
+
51
+ def make_str(data, level = -1)
52
+ return nil if data.blank?
53
+
54
+ if data.is_a?(Array)
55
+ data.map{|el| make_str(el, level) }.compact * "\n"
56
+ else
57
+ str = nil
58
+
59
+ if data[:name]
60
+ return make_str(data[:subtree], level) if data[:name] == '__default__'
61
+
62
+ off = level * 2
63
+ off_str = ' ' * off
64
+ name = (data[:type] == :application && data[:state].blank?) ? "\033[1m#{data[:name]}\033[0m" : data[:name].to_s
65
+ off_len = (data[:type] == :application && !data[:state].blank?) ? 20 : 35
66
+ str = off_str + (name + ' ').ljust(off_len - off, data[:state] ? '.' : ' ')
67
+
68
+ if data[:debug]
69
+ str += ' | ' + debug_str(data[:debug])
70
+
71
+ # for group show chain data
72
+ if data[:debug][:chain]
73
+ str += " (chain: #{data[:debug][:chain].map(&:to_i)})"
74
+ end
75
+ elsif data[:state]
76
+ str += ' ' + data[:state].to_s
77
+ str += ' (' + resources_str(data[:resources]) + ')' if data[:resources].present? && data[:state].to_sym == :up
78
+ str += " (#{data[:state_reason]} at #{data[:state_changed_at].to_s(:short)})" if data[:state_reason] && data[:state] == 'unmonitored'
79
+ elsif data[:current_command]
80
+ chain_progress = if data[:chain_progress]
81
+ " #{data[:chain_progress][0]} of #{data[:chain_progress][1]}" rescue ''
82
+ end
83
+ str += " \e[1;33m[#{data[:current_command]}#{chain_progress}]\033[0m"
84
+ str += " (#{data[:chain_commands] * ', '})" if data[:chain_commands]
85
+ end
86
+
87
+ end
88
+
89
+ if data[:subtree].nil?
90
+ str
91
+ elsif data[:subtree].blank?
92
+ nil
93
+ else
94
+ [str, make_str(data[:subtree], level + 1)].compact * "\n"
95
+ end
96
+ end
97
+ end
98
+
99
+ REV_REGX = /r:([a-z0-9]{5,})/i
100
+
101
+ def resources_str(r, mb = true)
102
+ return '' if r.blank?
103
+
104
+ res = "#{r[:start_time]}, #{r[:cpu]}%"
105
+
106
+ if r[:memory]
107
+ mem = mb ? "#{r[:memory] / 1024}Mb" : "#{r[:memory]}Kb"
108
+ res += ", #{mem}"
109
+ end
110
+
111
+ # show process revision, as parse from procline part: 'r:12345678'
112
+ if r[:cmd] && r[:cmd].to_s =~ REV_REGX
113
+ res += ", #{$1.to_s[0..5]}"
114
+ end
115
+
116
+ res += ", <#{r[:pid]}>"
117
+
118
+ res
119
+ end
120
+
121
+ def debug_str(debug)
122
+ return '' unless debug
123
+
124
+ q = 'q(' + (debug[:queue] || []) * ',' + ')'
125
+ w = 'w(' + (debug[:watchers] || []) * ',' + ')'
126
+
127
+ [w, q] * '; '
128
+ end
129
+
130
+ def status_applications(app = nil)
131
+ apps = app.present? ? @applications.select{|a| a.name == app} : nil
132
+ apps = @applications unless apps
133
+ apps
134
+ end
135
+
136
+ end
@@ -0,0 +1,52 @@
1
+ require_relative 'dsl/helpers'
2
+
3
+ class Eye::Dsl
4
+
5
+ autoload :Main, 'eye/dsl/main'
6
+ autoload :ApplicationOpts, 'eye/dsl/application_opts'
7
+ autoload :GroupOpts, 'eye/dsl/group_opts'
8
+ autoload :ProcessOpts, 'eye/dsl/process_opts'
9
+ autoload :ChildProcessOpts, 'eye/dsl/child_process_opts'
10
+ autoload :Opts, 'eye/dsl/opts'
11
+ autoload :PureOpts, 'eye/dsl/pure_opts'
12
+ autoload :Validate, 'eye/dsl/validate'
13
+ autoload :Chain, 'eye/dsl/chain'
14
+ autoload :ConfigOpts, 'eye/dsl/config_opts'
15
+
16
+ class Error < Exception; end
17
+ extend Eye::Dsl::Validate
18
+
19
+ class << self
20
+ attr_accessor :verbose
21
+
22
+ def debug(msg = "")
23
+ puts msg if verbose
24
+ end
25
+
26
+ def initial_config
27
+ {:config => {}, :applications => {}}
28
+ end
29
+
30
+ def parse(content = nil, filename = nil)
31
+ Eye.parsed_config = initial_config
32
+ Eye.parsed_filename = filename
33
+
34
+ content = File.read(filename) if content.blank?
35
+
36
+ silence_warnings do
37
+ Kernel.eval(content, ROOT_BINDING, filename.to_s)
38
+ end
39
+
40
+ validate(Eye.parsed_config)
41
+
42
+ Eye.parsed_config
43
+ end
44
+
45
+ def parse_apps(*args)
46
+ parse(*args)[:applications] || {}
47
+ end
48
+ end
49
+ end
50
+
51
+ # extend here global module
52
+ Eye.send(:extend, Eye::Dsl::Main)
@@ -0,0 +1,33 @@
1
+ class Eye::Dsl::ApplicationOpts < Eye::Dsl::Opts
2
+
3
+ include Eye::Dsl::Chain
4
+
5
+ def disallow_options
6
+ [:pid_file, :start_command]
7
+ end
8
+
9
+ def group(name, &block)
10
+ Eye::Dsl.debug "=> group #{name}"
11
+
12
+ opts = Eye::Dsl::GroupOpts.new(name, self)
13
+ opts.instance_eval(&block)
14
+ if cfg = opts.config
15
+ @config[:groups] ||= {}
16
+
17
+ processes = cfg.delete(:processes) || {}
18
+ @config[:groups][name.to_s] ||= {}
19
+ @config[:groups][name.to_s].merge!(cfg)
20
+ @config[:groups][name.to_s][:processes] ||= {}
21
+ @config[:groups][name.to_s][:processes].merge!(processes)
22
+ end
23
+
24
+ Eye::Dsl.debug "<= group #{name}"
25
+ end
26
+
27
+ def process(name, &block)
28
+ group("__default__"){ process(name.to_s, &block) }
29
+ end
30
+
31
+ def xgroup(name, &block); end
32
+ def xprocess(name, &block); end
33
+ end
@@ -0,0 +1,12 @@
1
+ module Eye::Dsl::Chain
2
+
3
+ def chain(opts = {})
4
+ acts = Array(opts[:action] || opts[:actions] || [:start, :restart])
5
+
6
+ acts.each do |act|
7
+ @config[:chain] ||= {}
8
+ @config[:chain][act] = opts.merge(:action => act)
9
+ end
10
+ end
11
+
12
+ end
@@ -0,0 +1,7 @@
1
+ class Eye::Dsl::ChildProcessOpts < Eye::Dsl::Opts
2
+
3
+ def allow_options
4
+ [:stop_command, :restart_command, :childs_update_period]
5
+ end
6
+
7
+ end
@@ -0,0 +1,11 @@
1
+ class Eye::Dsl::ConfigOpts < Eye::Dsl::PureOpts
2
+
3
+ create_options_methods([:logger], String)
4
+ create_options_methods([:logger_level], Fixnum)
5
+ create_options_methods([:http], Hash)
6
+
7
+ def set_logger(logger)
8
+ logger.blank? ? super('') : super
9
+ end
10
+
11
+ end
@@ -0,0 +1,27 @@
1
+ class Eye::Dsl::GroupOpts < Eye::Dsl::Opts
2
+
3
+ include Eye::Dsl::Chain
4
+
5
+ def disallow_options
6
+ [:pid_file, :start_command]
7
+ end
8
+
9
+ def process(name, &block)
10
+ Eye::Dsl.debug "=> process #{name}"
11
+
12
+ opts = Eye::Dsl::ProcessOpts.new(name, self)
13
+ opts.instance_eval(&block)
14
+ @config[:processes] ||= {}
15
+ @config[:processes][name.to_s] = opts.config if opts.config
16
+
17
+ Eye::Dsl.debug "<= process #{name}"
18
+ end
19
+
20
+ def xprocess(name, &block); end
21
+
22
+ def application
23
+ parent
24
+ end
25
+ alias :app :application
26
+
27
+ end
@@ -0,0 +1,12 @@
1
+
2
+ # Dsl Helpers
3
+
4
+ # current eye parsed config path
5
+ def current_config_path
6
+ Eye.parsed_filename && File.symlink?(Eye.parsed_filename) ? File.readlink(Eye.parsed_filename) : Eye.parsed_filename
7
+ end
8
+
9
+ # host name
10
+ def hostname
11
+ Eye::System.host
12
+ end
@@ -0,0 +1,58 @@
1
+ module Eye::Dsl::Main
2
+ attr_accessor :parsed_config, :parsed_filename
3
+
4
+ def application(name, &block)
5
+ Eye::Dsl.debug "=> app: #{name}"
6
+ opts = Eye::Dsl::ApplicationOpts.new(name)
7
+ opts.instance_eval(&block)
8
+
9
+ @parsed_config ||= {}
10
+ @parsed_config[:applications] ||= {}
11
+ @parsed_config[:applications][name.to_s] = opts.config if opts.config
12
+
13
+ Eye::Dsl.debug "<= app: #{name}"
14
+ end
15
+
16
+ alias :app :application
17
+
18
+ def load(glob = '')
19
+ return if glob.blank?
20
+
21
+ Eye::Dsl::Opts.with_parsed_file(glob) do |mask|
22
+ Dir[mask].each do |path|
23
+ Eye::Dsl.debug "=> load #{path}"
24
+ Eye.parsed_filename = path
25
+ res = Kernel.load(path)
26
+ Eye.info "load: subload #{path} (#{res})"
27
+ Eye::Dsl.debug "<= load #{path}"
28
+ end
29
+ end
30
+ end
31
+
32
+ def config(&block)
33
+ Eye::Dsl.debug "=> config"
34
+
35
+ @parsed_config ||= {}
36
+ @parsed_config[:config] ||= {}
37
+
38
+ opts = Eye::Dsl::ConfigOpts.new
39
+ opts.instance_eval(&block)
40
+ @parsed_config[:config].merge!(opts.config)
41
+
42
+ Eye::Dsl.debug "<= config"
43
+ end
44
+
45
+ def logger=(log_path)
46
+ STDERR.puts "Eye.logger= is deprecated!"
47
+ @parsed_config ||= {}
48
+ @parsed_config[:config] ||= {}
49
+ @parsed_config[:config][:logger] = log_path
50
+ end
51
+
52
+ def logger_level=(log_level)
53
+ STDERR.puts "Eye.logger_level= is deprecated!"
54
+ @parsed_config ||= {}
55
+ @parsed_config[:config] ||= {}
56
+ @parsed_config[:config][:logger_level] = log_level
57
+ end
58
+ end