eye 0.1.11
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +31 -0
- data/.rspec +2 -0
- data/Gemfile +4 -0
- data/LICENSE +22 -0
- data/README.md +132 -0
- data/Rakefile +18 -0
- data/bin/eye +282 -0
- data/bin/loader_eye +56 -0
- data/examples/processes/em.rb +56 -0
- data/examples/processes/forking.rb +20 -0
- data/examples/processes/sample.rb +144 -0
- data/examples/rbenv.eye +11 -0
- data/examples/test.eye +65 -0
- data/examples/unicorn.eye +29 -0
- data/eye.gemspec +37 -0
- data/lib/eye.rb +25 -0
- data/lib/eye/application.rb +65 -0
- data/lib/eye/checker.rb +118 -0
- data/lib/eye/checker/cpu.rb +27 -0
- data/lib/eye/checker/file_ctime.rb +29 -0
- data/lib/eye/checker/file_size.rb +38 -0
- data/lib/eye/checker/http.rb +94 -0
- data/lib/eye/checker/memory.rb +27 -0
- data/lib/eye/checker/socket.rb +148 -0
- data/lib/eye/checker/validation.rb +49 -0
- data/lib/eye/child_process.rb +75 -0
- data/lib/eye/client.rb +32 -0
- data/lib/eye/control.rb +2 -0
- data/lib/eye/controller.rb +43 -0
- data/lib/eye/controller/commands.rb +64 -0
- data/lib/eye/controller/helpers.rb +61 -0
- data/lib/eye/controller/load.rb +224 -0
- data/lib/eye/controller/send_command.rb +88 -0
- data/lib/eye/controller/status.rb +136 -0
- data/lib/eye/dsl.rb +52 -0
- data/lib/eye/dsl/application_opts.rb +33 -0
- data/lib/eye/dsl/chain.rb +12 -0
- data/lib/eye/dsl/child_process_opts.rb +7 -0
- data/lib/eye/dsl/config_opts.rb +11 -0
- data/lib/eye/dsl/group_opts.rb +27 -0
- data/lib/eye/dsl/helpers.rb +12 -0
- data/lib/eye/dsl/main.rb +58 -0
- data/lib/eye/dsl/opts.rb +88 -0
- data/lib/eye/dsl/process_opts.rb +21 -0
- data/lib/eye/dsl/pure_opts.rb +132 -0
- data/lib/eye/dsl/validate.rb +41 -0
- data/lib/eye/group.rb +125 -0
- data/lib/eye/group/chain.rb +68 -0
- data/lib/eye/io/unix_server.rb +44 -0
- data/lib/eye/io/unix_socket.rb +39 -0
- data/lib/eye/loader.rb +13 -0
- data/lib/eye/logger.rb +80 -0
- data/lib/eye/process.rb +83 -0
- data/lib/eye/process/child.rb +61 -0
- data/lib/eye/process/commands.rb +256 -0
- data/lib/eye/process/config.rb +70 -0
- data/lib/eye/process/controller.rb +72 -0
- data/lib/eye/process/data.rb +46 -0
- data/lib/eye/process/monitor.rb +97 -0
- data/lib/eye/process/notify.rb +17 -0
- data/lib/eye/process/scheduler.rb +50 -0
- data/lib/eye/process/states.rb +92 -0
- data/lib/eye/process/states_history.rb +62 -0
- data/lib/eye/process/system.rb +60 -0
- data/lib/eye/process/trigger.rb +32 -0
- data/lib/eye/process/watchers.rb +67 -0
- data/lib/eye/server.rb +51 -0
- data/lib/eye/settings.rb +35 -0
- data/lib/eye/system.rb +145 -0
- data/lib/eye/system_resources.rb +83 -0
- data/lib/eye/trigger.rb +53 -0
- data/lib/eye/trigger/flapping.rb +24 -0
- data/lib/eye/utils.rb +5 -0
- data/lib/eye/utils/alive_array.rb +31 -0
- data/lib/eye/utils/celluloid_chain.rb +51 -0
- data/lib/eye/utils/leak_19.rb +7 -0
- data/lib/eye/utils/tail.rb +20 -0
- data/spec/checker/cpu_spec.rb +58 -0
- data/spec/checker/file_ctime_spec.rb +34 -0
- data/spec/checker/file_size_spec.rb +107 -0
- data/spec/checker/http_spec.rb +109 -0
- data/spec/checker/memory_spec.rb +64 -0
- data/spec/checker/socket_spec.rb +116 -0
- data/spec/checker_spec.rb +188 -0
- data/spec/child_process/child_process_spec.rb +46 -0
- data/spec/client_server_spec.rb +34 -0
- data/spec/controller/commands_spec.rb +92 -0
- data/spec/controller/controller_spec.rb +133 -0
- data/spec/controller/find_objects_spec.rb +150 -0
- data/spec/controller/group_spec.rb +110 -0
- data/spec/controller/intergration_spec.rb +327 -0
- data/spec/controller/load_spec.rb +326 -0
- data/spec/controller/races_spec.rb +70 -0
- data/spec/controller/stop_on_delete_spec.rb +157 -0
- data/spec/dsl/chain_spec.rb +140 -0
- data/spec/dsl/checks_spec.rb +202 -0
- data/spec/dsl/config_spec.rb +44 -0
- data/spec/dsl/dsl_spec.rb +73 -0
- data/spec/dsl/getter_spec.rb +223 -0
- data/spec/dsl/integration_spec.rb +311 -0
- data/spec/dsl/load_spec.rb +52 -0
- data/spec/dsl/process_spec.rb +330 -0
- data/spec/dsl/sub_procs_spec.rb +93 -0
- data/spec/dsl/with_server_spec.rb +104 -0
- data/spec/example/em.rb +57 -0
- data/spec/example/forking.rb +20 -0
- data/spec/example/sample.rb +154 -0
- data/spec/fixtures/dsl/0.rb +8 -0
- data/spec/fixtures/dsl/0a.rb +8 -0
- data/spec/fixtures/dsl/0c.rb +8 -0
- data/spec/fixtures/dsl/1.rb +5 -0
- data/spec/fixtures/dsl/bad.eye +6 -0
- data/spec/fixtures/dsl/configs/1.eye +3 -0
- data/spec/fixtures/dsl/configs/2.eye +1 -0
- data/spec/fixtures/dsl/configs/3.eye +1 -0
- data/spec/fixtures/dsl/configs/4.eye +3 -0
- data/spec/fixtures/dsl/empty.eye +20 -0
- data/spec/fixtures/dsl/include_test.eye +5 -0
- data/spec/fixtures/dsl/include_test/1.rb +6 -0
- data/spec/fixtures/dsl/include_test/ha.rb +4 -0
- data/spec/fixtures/dsl/include_test2.eye +5 -0
- data/spec/fixtures/dsl/integration.eye +30 -0
- data/spec/fixtures/dsl/integration2.eye +32 -0
- data/spec/fixtures/dsl/integration_locks.eye +30 -0
- data/spec/fixtures/dsl/integration_sor.eye +32 -0
- data/spec/fixtures/dsl/integration_sor2.eye +27 -0
- data/spec/fixtures/dsl/integration_sor3.eye +32 -0
- data/spec/fixtures/dsl/load.eye +25 -0
- data/spec/fixtures/dsl/load2.eye +7 -0
- data/spec/fixtures/dsl/load2_dup2.eye +13 -0
- data/spec/fixtures/dsl/load2_dup_pid.eye +7 -0
- data/spec/fixtures/dsl/load3.eye +10 -0
- data/spec/fixtures/dsl/load4.eye +7 -0
- data/spec/fixtures/dsl/load5.eye +8 -0
- data/spec/fixtures/dsl/load6.eye +17 -0
- data/spec/fixtures/dsl/load_dubls.eye +36 -0
- data/spec/fixtures/dsl/load_dup_ex_names.eye +15 -0
- data/spec/fixtures/dsl/load_error.eye +5 -0
- data/spec/fixtures/dsl/load_error_folder/load3.eye +10 -0
- data/spec/fixtures/dsl/load_error_folder/load4.eye +7 -0
- data/spec/fixtures/dsl/load_folder/load3.eye +10 -0
- data/spec/fixtures/dsl/load_folder/load4.eye +7 -0
- data/spec/fixtures/dsl/load_int.eye +8 -0
- data/spec/fixtures/dsl/load_int2.eye +13 -0
- data/spec/fixtures/dsl/load_logger.eye +26 -0
- data/spec/fixtures/dsl/load_logger2.eye +3 -0
- data/spec/fixtures/dsl/long_load.eye +5 -0
- data/spec/fixtures/dsl/subfolder1/proc1.rb +3 -0
- data/spec/fixtures/dsl/subfolder2.eye +9 -0
- data/spec/fixtures/dsl/subfolder2/common.rb +1 -0
- data/spec/fixtures/dsl/subfolder2/proc2.rb +3 -0
- data/spec/fixtures/dsl/subfolder2/sub/proc3.rb +6 -0
- data/spec/fixtures/dsl/subfolder3.eye +8 -0
- data/spec/fixtures/dsl/subfolder3/common.rb +1 -0
- data/spec/fixtures/dsl/subfolder3/proc4.rb +3 -0
- data/spec/fixtures/dsl/subfolder3/sub/proc5.rb +6 -0
- data/spec/fixtures/dsl/subfolder4.eye +6 -0
- data/spec/fixtures/dsl/subfolder4/a.rb +2 -0
- data/spec/fixtures/dsl/subfolder4/b.rb +1 -0
- data/spec/fixtures/dsl/subfolder4/c.rb +1 -0
- data/spec/mock_spec.rb +32 -0
- data/spec/process/checks/child_checks_spec.rb +79 -0
- data/spec/process/checks/cpu_spec.rb +114 -0
- data/spec/process/checks/ctime_spec.rb +43 -0
- data/spec/process/checks/fsize_spec.rb +22 -0
- data/spec/process/checks/http_spec.rb +52 -0
- data/spec/process/checks/intergration_spec.rb +32 -0
- data/spec/process/checks/memory_spec.rb +113 -0
- data/spec/process/child_process_spec.rb +125 -0
- data/spec/process/config_spec.rb +75 -0
- data/spec/process/controller_spec.rb +173 -0
- data/spec/process/monitoring_spec.rb +180 -0
- data/spec/process/restart_spec.rb +174 -0
- data/spec/process/scheduler_spec.rb +150 -0
- data/spec/process/start_spec.rb +261 -0
- data/spec/process/states_history_spec.rb +118 -0
- data/spec/process/stop_spec.rb +150 -0
- data/spec/process/system_spec.rb +100 -0
- data/spec/process/triggers/flapping_spec.rb +81 -0
- data/spec/process/update_config_spec.rb +63 -0
- data/spec/spec_helper.rb +120 -0
- data/spec/support/rr_celluloid.rb +36 -0
- data/spec/support/scheduler_hack.rb +16 -0
- data/spec/support/spec_support.rb +164 -0
- data/spec/system_resources_spec.rb +59 -0
- data/spec/system_spec.rb +170 -0
- data/spec/utils/alive_array_spec.rb +50 -0
- data/spec/utils/celluloid_chain_spec.rb +82 -0
- data/spec/utils/tail_spec.rb +21 -0
- 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
|
data/lib/eye/dsl.rb
ADDED
@@ -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,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
|
data/lib/eye/dsl/main.rb
ADDED
@@ -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
|