eye 0.1.11

Sign up to get free protection for your applications and to get access to all the features.
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