eye 0.2.4 → 0.3
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.
- checksums.yaml +4 -4
- data/README.md +1 -3
- data/bin/eye +7 -0
- data/bin/loader_eye +7 -5
- data/examples/notify.eye +1 -1
- data/eye.gemspec +4 -4
- data/lib/eye.rb +1 -3
- data/lib/eye/controller.rb +4 -0
- data/lib/eye/controller/status.rb +1 -1
- data/lib/eye/dsl.rb +1 -1
- data/lib/eye/dsl/main.rb +0 -13
- data/lib/eye/dsl/opts.rb +4 -2
- data/lib/eye/loader.rb +2 -3
- data/lib/eye/notify.rb +3 -3
- data/lib/eye/process/monitor.rb +5 -3
- data/lib/eye/process/notify.rb +5 -5
- data/lib/eye/process/scheduler.rb +4 -4
- data/lib/eye/process/system.rb +3 -10
- data/lib/eye/process/trigger.rb +1 -1
- data/lib/eye/process/watchers.rb +1 -1
- data/lib/eye/server.rb +9 -8
- data/lib/eye/system.rb +2 -7
- data/lib/eye/system_resources.rb +3 -3
- data/lib/eye/utils/celluloid_chain.rb +2 -2
- metadata +7 -241
- data/lib/eye/io/unix_server.rb +0 -44
- data/lib/eye/io/unix_socket.rb +0 -39
- data/spec/checker/cpu_spec.rb +0 -58
- data/spec/checker/file_ctime_spec.rb +0 -34
- data/spec/checker/file_size_spec.rb +0 -107
- data/spec/checker/http_spec.rb +0 -114
- data/spec/checker/memory_spec.rb +0 -64
- data/spec/checker/socket_spec.rb +0 -116
- data/spec/checker_spec.rb +0 -187
- data/spec/child_process/child_process_spec.rb +0 -46
- data/spec/client_server_spec.rb +0 -33
- data/spec/controller/commands_spec.rb +0 -92
- data/spec/controller/controller_spec.rb +0 -157
- data/spec/controller/find_objects_spec.rb +0 -176
- data/spec/controller/group_spec.rb +0 -110
- data/spec/controller/intergration_spec.rb +0 -366
- data/spec/controller/load_spec.rb +0 -371
- data/spec/controller/races_spec.rb +0 -70
- data/spec/controller/stop_on_delete_spec.rb +0 -157
- data/spec/dsl/chain_spec.rb +0 -146
- data/spec/dsl/checks_spec.rb +0 -219
- data/spec/dsl/config_spec.rb +0 -44
- data/spec/dsl/dsl_spec.rb +0 -73
- data/spec/dsl/getter_spec.rb +0 -223
- data/spec/dsl/integration_spec.rb +0 -376
- data/spec/dsl/load_spec.rb +0 -52
- data/spec/dsl/notify_spec.rb +0 -114
- data/spec/dsl/process_spec.rb +0 -380
- data/spec/dsl/sub_procs_spec.rb +0 -93
- data/spec/dsl/with_server_spec.rb +0 -128
- data/spec/example/em.rb +0 -57
- data/spec/example/forking.rb +0 -20
- data/spec/example/sample.rb +0 -154
- data/spec/fixtures/dsl/0.rb +0 -8
- data/spec/fixtures/dsl/0a.rb +0 -8
- data/spec/fixtures/dsl/0c.rb +0 -8
- data/spec/fixtures/dsl/1.rb +0 -5
- data/spec/fixtures/dsl/bad.eye +0 -6
- data/spec/fixtures/dsl/configs/1.eye +0 -3
- data/spec/fixtures/dsl/configs/2.eye +0 -1
- data/spec/fixtures/dsl/configs/3.eye +0 -1
- data/spec/fixtures/dsl/configs/4.eye +0 -3
- data/spec/fixtures/dsl/empty.eye +0 -20
- data/spec/fixtures/dsl/include_test.eye +0 -5
- data/spec/fixtures/dsl/include_test/1.rb +0 -6
- data/spec/fixtures/dsl/include_test/ha.rb +0 -4
- data/spec/fixtures/dsl/include_test2.eye +0 -5
- data/spec/fixtures/dsl/integration.eye +0 -30
- data/spec/fixtures/dsl/integration2.eye +0 -32
- data/spec/fixtures/dsl/integration_locks.eye +0 -30
- data/spec/fixtures/dsl/integration_sor.eye +0 -32
- data/spec/fixtures/dsl/integration_sor2.eye +0 -27
- data/spec/fixtures/dsl/integration_sor3.eye +0 -32
- data/spec/fixtures/dsl/load.eye +0 -25
- data/spec/fixtures/dsl/load2.eye +0 -7
- data/spec/fixtures/dsl/load2_dup2.eye +0 -13
- data/spec/fixtures/dsl/load2_dup_pid.eye +0 -7
- data/spec/fixtures/dsl/load3.eye +0 -10
- data/spec/fixtures/dsl/load4.eye +0 -7
- data/spec/fixtures/dsl/load5.eye +0 -8
- data/spec/fixtures/dsl/load6.eye +0 -17
- data/spec/fixtures/dsl/load_dubls.eye +0 -36
- data/spec/fixtures/dsl/load_dup_ex_names.eye +0 -15
- data/spec/fixtures/dsl/load_error.eye +0 -5
- data/spec/fixtures/dsl/load_error_folder/load3.eye +0 -10
- data/spec/fixtures/dsl/load_error_folder/load4.eye +0 -7
- data/spec/fixtures/dsl/load_folder/load3.eye +0 -10
- data/spec/fixtures/dsl/load_folder/load4.eye +0 -7
- data/spec/fixtures/dsl/load_int.eye +0 -8
- data/spec/fixtures/dsl/load_int2.eye +0 -13
- data/spec/fixtures/dsl/load_logger.eye +0 -26
- data/spec/fixtures/dsl/load_logger2.eye +0 -3
- data/spec/fixtures/dsl/long_load.eye +0 -5
- data/spec/fixtures/dsl/subfolder1/proc1.rb +0 -3
- data/spec/fixtures/dsl/subfolder2.eye +0 -9
- data/spec/fixtures/dsl/subfolder2/common.rb +0 -1
- data/spec/fixtures/dsl/subfolder2/proc2.rb +0 -3
- data/spec/fixtures/dsl/subfolder2/sub/proc3.rb +0 -6
- data/spec/fixtures/dsl/subfolder3.eye +0 -8
- data/spec/fixtures/dsl/subfolder3/common.rb +0 -1
- data/spec/fixtures/dsl/subfolder3/proc4.rb +0 -3
- data/spec/fixtures/dsl/subfolder3/sub/proc5.rb +0 -6
- data/spec/fixtures/dsl/subfolder4.eye +0 -6
- data/spec/fixtures/dsl/subfolder4/a.rb +0 -2
- data/spec/fixtures/dsl/subfolder4/b.rb +0 -1
- data/spec/fixtures/dsl/subfolder4/c.rb +0 -1
- data/spec/mock_spec.rb +0 -31
- data/spec/notify/jabber_spec.rb +0 -25
- data/spec/notify/mail_spec.rb +0 -26
- data/spec/notify_spec.rb +0 -90
- data/spec/process/checks/child_checks_spec.rb +0 -79
- data/spec/process/checks/cpu_spec.rb +0 -114
- data/spec/process/checks/ctime_spec.rb +0 -43
- data/spec/process/checks/fsize_spec.rb +0 -22
- data/spec/process/checks/http_spec.rb +0 -52
- data/spec/process/checks/intergration_spec.rb +0 -32
- data/spec/process/checks/memory_spec.rb +0 -127
- data/spec/process/child_process_spec.rb +0 -125
- data/spec/process/config_spec.rb +0 -74
- data/spec/process/controller_spec.rb +0 -173
- data/spec/process/monitoring_spec.rb +0 -180
- data/spec/process/notify_spec.rb +0 -27
- data/spec/process/restart_spec.rb +0 -186
- data/spec/process/scheduler_spec.rb +0 -178
- data/spec/process/start_spec.rb +0 -261
- data/spec/process/states_history_spec.rb +0 -123
- data/spec/process/stop_spec.rb +0 -156
- data/spec/process/system_spec.rb +0 -136
- data/spec/process/triggers/flapping_spec.rb +0 -242
- data/spec/process/update_config_spec.rb +0 -62
- data/spec/spec_helper.rb +0 -128
- data/spec/support/rr_celluloid.rb +0 -15
- data/spec/support/spec_support.rb +0 -163
- data/spec/system_resources_spec.rb +0 -56
- data/spec/system_spec.rb +0 -174
- data/spec/utils/alive_array_spec.rb +0 -49
- data/spec/utils/celluloid_chain_spec.rb +0 -89
- data/spec/utils/tail_spec.rb +0 -20
@@ -1,123 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
-
|
3
|
-
describe "Eye::Process::StatesHistory" do
|
4
|
-
before :each do
|
5
|
-
@h = Eye::Process::StatesHistory.new
|
6
|
-
end
|
7
|
-
|
8
|
-
it "should work" do
|
9
|
-
@h << :up
|
10
|
-
@h.push :down, 'bla'
|
11
|
-
|
12
|
-
@h.states.should == [:up, :down]
|
13
|
-
@h.last_state.should == :down
|
14
|
-
@h.last_state_changed_at.should be_within(2.seconds).of(Time.now)
|
15
|
-
@h.last[:reason].should == 'bla'
|
16
|
-
end
|
17
|
-
|
18
|
-
it "states for period" do
|
19
|
-
@h.push :up, nil, 5.minutes.ago
|
20
|
-
@h.push :down, nil, 4.minutes.ago
|
21
|
-
@h.push :start, nil, 3.minutes.ago
|
22
|
-
@h.push :stop, nil, 2.minutes.ago
|
23
|
-
@h.push :up, nil, 1.minutes.ago
|
24
|
-
@h.push :down, nil, 0.minutes.ago
|
25
|
-
|
26
|
-
@h.states_for_period(1.5.minutes).should == [:up, :down]
|
27
|
-
@h.states_for_period(2.5.minutes).should == [:stop, :up, :down]
|
28
|
-
@h.states_for_period(6.minutes).should == [:up, :down, :start, :stop, :up, :down]
|
29
|
-
|
30
|
-
# with start_point
|
31
|
-
@h.states_for_period(2.5.minutes, 5.minutes.ago).should == [:stop, :up, :down]
|
32
|
-
@h.states_for_period(2.5.minutes, nil).should == [:stop, :up, :down]
|
33
|
-
@h.states_for_period(2.5.minutes, 1.5.minutes.ago).should == [:up, :down]
|
34
|
-
@h.states_for_period(2.5.minutes, Time.now).should == []
|
35
|
-
end
|
36
|
-
|
37
|
-
it "seq?" do
|
38
|
-
@h << :unmonitored
|
39
|
-
@h << :starting
|
40
|
-
@h << :down
|
41
|
-
@h << :starting
|
42
|
-
|
43
|
-
@h.seq?([:starting, :down, :starting]).should == true
|
44
|
-
@h.seq?(:starting, :down, :starting).should == true
|
45
|
-
@h.seq?([:starting, :down]).should == true
|
46
|
-
|
47
|
-
@h.seq?([:starting, :up]).should == false
|
48
|
-
@h.seq?([:starting, :starting]).should == false
|
49
|
-
@h.seq?(:starting, :starting).should == false
|
50
|
-
|
51
|
-
@h.seq?(:down).should == true
|
52
|
-
@h.seq?(:up).should == false
|
53
|
-
end
|
54
|
-
|
55
|
-
it "any?" do
|
56
|
-
@h << :unmonitored
|
57
|
-
@h << :starting
|
58
|
-
@h << :down
|
59
|
-
@h << :starting
|
60
|
-
|
61
|
-
@h.any?([:starting, :down, :starting]).should == true
|
62
|
-
@h.any?(:starting, :down, :starting).should == true
|
63
|
-
@h.any?(:up).should == false
|
64
|
-
@h.any?(:up, :stopping).should == false
|
65
|
-
@h.any?(:up, :down).should == true
|
66
|
-
@h.any?(:down).should == true
|
67
|
-
end
|
68
|
-
|
69
|
-
it "noone?" do
|
70
|
-
@h << :unmonitored
|
71
|
-
@h << :starting
|
72
|
-
@h << :down
|
73
|
-
@h << :starting
|
74
|
-
|
75
|
-
@h.noone?(:up, :stopping).should == true
|
76
|
-
@h.noone?(:up, :down).should == true
|
77
|
-
end
|
78
|
-
|
79
|
-
it "end?" do
|
80
|
-
@h << :unmonitored
|
81
|
-
@h << :starting
|
82
|
-
@h << :down
|
83
|
-
@h << :starting
|
84
|
-
|
85
|
-
@h.end?(:down, :starting).should == true
|
86
|
-
@h.end?(:starting, :down).should == false
|
87
|
-
|
88
|
-
@h.end?(:starting).should == true
|
89
|
-
@h.end?(:down).should == false
|
90
|
-
|
91
|
-
@h.end?(:starting, :down, :starting).should == true
|
92
|
-
@h.end?(:unmonitored, :starting, :down, :starting).should == true
|
93
|
-
end
|
94
|
-
|
95
|
-
it "all?" do
|
96
|
-
@h << :unmonitored
|
97
|
-
@h << :starting
|
98
|
-
@h << :down
|
99
|
-
@h << :starting
|
100
|
-
|
101
|
-
@h.all?([:starting, :down, :starting]).should == false
|
102
|
-
@h.all?(:starting, :down, :starting).should == false
|
103
|
-
@h.all?(:starting, :down, :starting, :unmonitored).should == true
|
104
|
-
@h.all?(:down, :starting, :unmonitored).should == true
|
105
|
-
|
106
|
-
@h.all?(:up).should == false
|
107
|
-
@h.all?(:up, :stopping).should == false
|
108
|
-
@h.all?(:up, :down).should == false
|
109
|
-
@h.all?(:down).should == false
|
110
|
-
end
|
111
|
-
|
112
|
-
it "state_count" do
|
113
|
-
@h << :unmonitored
|
114
|
-
@h << :starting
|
115
|
-
@h << :down
|
116
|
-
@h << :starting
|
117
|
-
|
118
|
-
@h.state_count(:down).should == 1
|
119
|
-
@h.state_count(:starting).should == 2
|
120
|
-
@h.state_count(:up).should == 0
|
121
|
-
end
|
122
|
-
|
123
|
-
end
|
data/spec/process/stop_spec.rb
DELETED
@@ -1,156 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
-
|
3
|
-
describe "Process Stop" do
|
4
|
-
|
5
|
-
describe "clear_pid_file" do
|
6
|
-
it "stop should clear pid by default for daemonize" do
|
7
|
-
start_ok_process(C.p1)
|
8
|
-
|
9
|
-
@process.stop_process
|
10
|
-
|
11
|
-
Eye::System.pid_alive?(@pid).should == false
|
12
|
-
@process.state_name.should == :down
|
13
|
-
|
14
|
-
@process.load_pid_from_file.should == nil
|
15
|
-
end
|
16
|
-
|
17
|
-
it "stop should not clear pid by default for not daemonize" do
|
18
|
-
start_ok_process(C.p2)
|
19
|
-
|
20
|
-
@process.stop_process
|
21
|
-
|
22
|
-
Eye::System.pid_alive?(@pid).should == false
|
23
|
-
@process.state_name.should == :down
|
24
|
-
|
25
|
-
@process.load_pid_from_file.should == @pid
|
26
|
-
end
|
27
|
-
|
28
|
-
it "for not daemonize, but option enabled by manual" do
|
29
|
-
start_ok_process(C.p2.merge(:control_pid => true))
|
30
|
-
|
31
|
-
@process.stop_process
|
32
|
-
|
33
|
-
Eye::System.pid_alive?(@pid).should == false
|
34
|
-
@process.state_name.should == :down
|
35
|
-
|
36
|
-
@process.load_pid_from_file.should == nil
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
it "stop process by default command" do
|
41
|
-
start_ok_process
|
42
|
-
|
43
|
-
dont_allow(@process).check_crash
|
44
|
-
@process.stop_process
|
45
|
-
|
46
|
-
Eye::System.pid_alive?(@pid).should == false
|
47
|
-
@process.pid.should == @pid
|
48
|
-
@process.state_name.should == :down
|
49
|
-
@process.states_history.end?(:up, :stopping, :down).should == true
|
50
|
-
@process.watchers.keys.should == []
|
51
|
-
end
|
52
|
-
|
53
|
-
it "stop process by default command, and its not die by TERM, should stop anyway" do
|
54
|
-
start_ok_process(C.p2.merge(:start_command => C.p2[:start_command] + " -T"))
|
55
|
-
Eye::System.pid_alive?(@pid).should == true
|
56
|
-
|
57
|
-
dont_allow(@process).check_crash
|
58
|
-
@process.stop_process
|
59
|
-
|
60
|
-
Eye::System.pid_alive?(@pid).should == false
|
61
|
-
@process.pid.should == @pid
|
62
|
-
@process.state_name.should == :down
|
63
|
-
@process.states_history.end?(:up, :stopping, :down).should == true
|
64
|
-
@process.watchers.keys.should == []
|
65
|
-
end
|
66
|
-
|
67
|
-
it "stop process by specific command" do
|
68
|
-
start_ok_process(C.p1.merge(:stop_command => "kill -9 {{PID}}"))
|
69
|
-
|
70
|
-
dont_allow(@process).check_crash
|
71
|
-
@process.stop_process
|
72
|
-
|
73
|
-
Eye::System.pid_alive?(@pid).should == false
|
74
|
-
@process.state_name.should == :down
|
75
|
-
end
|
76
|
-
|
77
|
-
it "bad command" do
|
78
|
-
start_ok_process(C.p1.merge(:stop_command => "kill -0 {{PID}}"))
|
79
|
-
|
80
|
-
@process.stop_process
|
81
|
-
|
82
|
-
Eye::System.pid_alive?(@pid).should == true
|
83
|
-
@process.state_name.should == :unmonitored # cant stop with this command, so :unmonitored
|
84
|
-
end
|
85
|
-
|
86
|
-
it "watch_file" do
|
87
|
-
wf = File.join(C.p1[:working_dir], %w{1111.stop})
|
88
|
-
start_ok_process(C.p1.merge(:stop_command => "touch #{wf}",
|
89
|
-
:start_command => C.p1[:start_command] + " -w #{wf}"))
|
90
|
-
|
91
|
-
@process.stop_process
|
92
|
-
|
93
|
-
Eye::System.pid_alive?(@pid).should == false
|
94
|
-
@process.state_name.should == :down
|
95
|
-
|
96
|
-
File.exists?(wf).should == false
|
97
|
-
|
98
|
-
data = File.read(@log)
|
99
|
-
data.should include("watch file finded")
|
100
|
-
end
|
101
|
-
|
102
|
-
it "stop process by stop_signals" do
|
103
|
-
start_ok_process(C.p1.merge(:stop_signals => [9, 2.seconds]))
|
104
|
-
|
105
|
-
@process.stop_process!
|
106
|
-
sleep 1
|
107
|
-
Eye::System.pid_alive?(@pid).should == false
|
108
|
-
end
|
109
|
-
|
110
|
-
it "stop process by stop_signals" do
|
111
|
-
start_ok_process(C.p1.merge(:stop_signals => ['usr1', 3.seconds, :TERM, 2.seconds]))
|
112
|
-
|
113
|
-
@process.stop_process!
|
114
|
-
sleep 1.5
|
115
|
-
|
116
|
-
# not blocking actor
|
117
|
-
should_spend(0) do
|
118
|
-
@process.name.should == 'blocking process'
|
119
|
-
end
|
120
|
-
|
121
|
-
Eye::System.pid_alive?(@pid).should == true
|
122
|
-
sleep 1.5
|
123
|
-
Eye::System.pid_alive?(@pid).should == true
|
124
|
-
sleep 1
|
125
|
-
Eye::System.pid_alive?(@pid).should == false
|
126
|
-
|
127
|
-
# should capture log
|
128
|
-
data = File.read(@log)
|
129
|
-
data.should include("USR1 signal")
|
130
|
-
end
|
131
|
-
|
132
|
-
it "long stop" do
|
133
|
-
start_ok_process(C.p3)
|
134
|
-
pid = @process.pid
|
135
|
-
|
136
|
-
@process.stop_process
|
137
|
-
@process.state_name.should == :down
|
138
|
-
|
139
|
-
Eye::System.pid_alive?(pid).should == false
|
140
|
-
end
|
141
|
-
|
142
|
-
it "stop process by stop_signals and commands"
|
143
|
-
|
144
|
-
[:unmonitored, :down, :starting, :stopping].each do |st|
|
145
|
-
it "no stop from #{st}" do
|
146
|
-
@process = process(C.p1)
|
147
|
-
@process.state = st.to_s # force set state
|
148
|
-
|
149
|
-
dont_allow(@process).kill_process
|
150
|
-
|
151
|
-
@process.stop_process
|
152
|
-
@process.state_name.should == st
|
153
|
-
end
|
154
|
-
end
|
155
|
-
|
156
|
-
end
|
data/spec/process/system_spec.rb
DELETED
@@ -1,136 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
-
|
3
|
-
describe "Eye::Process::System" do
|
4
|
-
before :each do
|
5
|
-
@process = Eye::Process.new(C.p1)
|
6
|
-
end
|
7
|
-
|
8
|
-
it "load_pid_from_file" do
|
9
|
-
File.open(@process[:pid_file_ex], 'w'){|f| f.write("asdf") }
|
10
|
-
@process.load_pid_from_file.should == nil
|
11
|
-
|
12
|
-
File.open(@process[:pid_file_ex], 'w'){|f| f.write(12345) }
|
13
|
-
@process.load_pid_from_file.should == 12345
|
14
|
-
|
15
|
-
FileUtils.rm(@process[:pid_file_ex]) rescue nil
|
16
|
-
@process.load_pid_from_file.should == nil
|
17
|
-
end
|
18
|
-
|
19
|
-
it "failsafe_load_pid" do
|
20
|
-
File.open(@process[:pid_file_ex], 'w'){|f| f.write("asdf") }
|
21
|
-
@process.failsafe_load_pid.should == nil
|
22
|
-
|
23
|
-
File.open(@process[:pid_file_ex], 'w'){|f| f.write(12345) }
|
24
|
-
@process.failsafe_load_pid.should == 12345
|
25
|
-
|
26
|
-
FileUtils.rm(@process[:pid_file_ex]) rescue nil
|
27
|
-
@process.failsafe_load_pid.should == nil
|
28
|
-
end
|
29
|
-
|
30
|
-
it "set_pid_from_file" do
|
31
|
-
File.open(@process[:pid_file_ex], 'w'){|f| f.write(12345) }
|
32
|
-
@process.set_pid_from_file
|
33
|
-
@process.pid.should == 12345
|
34
|
-
@process.pid = nil
|
35
|
-
end
|
36
|
-
|
37
|
-
it "save_pid_to_file" do
|
38
|
-
@process.pid = 123456789
|
39
|
-
@process.save_pid_to_file
|
40
|
-
File.read(@process[:pid_file_ex]).to_i.should == 123456789
|
41
|
-
end
|
42
|
-
|
43
|
-
it "failsafe_save_pid ok case" do
|
44
|
-
@process.pid = 123456789
|
45
|
-
@process.failsafe_save_pid.should == true
|
46
|
-
File.read(@process[:pid_file_ex]).to_i.should == 123456789
|
47
|
-
end
|
48
|
-
|
49
|
-
it "failsafe_save_pid bad case" do
|
50
|
-
@process.config[:pid_file_ex] = "/asdf/adf/asd/fs/dfs/das/df.1"
|
51
|
-
@process.pid = 123456789
|
52
|
-
@process.failsafe_save_pid.should == false
|
53
|
-
end
|
54
|
-
|
55
|
-
it "clear_pid_file" do
|
56
|
-
@process.pid = 123456789
|
57
|
-
@process.save_pid_to_file
|
58
|
-
File.read(@process[:pid_file_ex]).to_i.should == 123456789
|
59
|
-
|
60
|
-
@process.clear_pid_file.should == true
|
61
|
-
File.exists?(@process[:pid_file_ex]).should == false
|
62
|
-
end
|
63
|
-
|
64
|
-
it "process_realy_running?" do
|
65
|
-
@process.pid = $$
|
66
|
-
@process.process_realy_running?.should == true
|
67
|
-
|
68
|
-
@process.pid = nil
|
69
|
-
@process.process_realy_running?.should == nil
|
70
|
-
|
71
|
-
@process.pid = -123434
|
72
|
-
@process.process_realy_running?.should == nil
|
73
|
-
end
|
74
|
-
|
75
|
-
it "send_signal ok" do
|
76
|
-
mock(Eye::System).send_signal(@process.pid, :TERM){ {:result => :ok} }
|
77
|
-
@process.send_signal(:TERM).should == true
|
78
|
-
end
|
79
|
-
|
80
|
-
it "send_signal not ok" do
|
81
|
-
mock(Eye::System).send_signal(@process.pid, :TERM){ {:error => Exception.new('bla')} }
|
82
|
-
@process.send_signal(:TERM).should == false
|
83
|
-
end
|
84
|
-
|
85
|
-
it "pid_file_ctime" do
|
86
|
-
File.open(@process[:pid_file_ex], 'w'){|f| f.write("asdf") }
|
87
|
-
sleep 1
|
88
|
-
(Time.now - @process.pid_file_ctime).should > 1.second
|
89
|
-
|
90
|
-
@process.clear_pid_file
|
91
|
-
(Time.now - @process.pid_file_ctime).should < 0.1.second
|
92
|
-
end
|
93
|
-
|
94
|
-
[C.p1, C.p2].each do |cfg|
|
95
|
-
it "blocking execute should not block process actor mailbox #{cfg[:name]}" do
|
96
|
-
@process = Eye::Process.new(cfg.merge(:start_command => "sleep 5", :start_timeout => 10.seconds))
|
97
|
-
should_spend(1) do
|
98
|
-
@process.start!
|
99
|
-
sleep 1
|
100
|
-
|
101
|
-
# here mailbox should anwser without blocks
|
102
|
-
@process.name.should == cfg[:name]
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
|
-
context "#wait_for_condition" do
|
108
|
-
subject{ Eye::Process.new(C.p1) }
|
109
|
-
|
110
|
-
it "success" do
|
111
|
-
should_spend(0) do
|
112
|
-
subject.wait_for_condition(1){ 15 }.should == 15
|
113
|
-
end
|
114
|
-
end
|
115
|
-
|
116
|
-
it "success with sleep" do
|
117
|
-
should_spend(0.3) do
|
118
|
-
subject.wait_for_condition(1){ sleep 0.3; :a }.should == :a
|
119
|
-
end
|
120
|
-
end
|
121
|
-
|
122
|
-
it "fail by timeout" do
|
123
|
-
should_spend(1) do
|
124
|
-
subject.wait_for_condition(1){ sleep 4; true }.should == false
|
125
|
-
end
|
126
|
-
end
|
127
|
-
|
128
|
-
it "fail with bad result" do
|
129
|
-
should_spend(1) do
|
130
|
-
subject.wait_for_condition(1){ nil }.should == false
|
131
|
-
end
|
132
|
-
end
|
133
|
-
end
|
134
|
-
|
135
|
-
|
136
|
-
end
|
@@ -1,242 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/../../spec_helper'
|
2
|
-
|
3
|
-
describe "Flapping" do
|
4
|
-
before :each do
|
5
|
-
@c = C.p1.merge(
|
6
|
-
:triggers => C.flapping(:times => 4, :within => 10)
|
7
|
-
)
|
8
|
-
end
|
9
|
-
|
10
|
-
it "should create trigger from config" do
|
11
|
-
start_ok_process(@c)
|
12
|
-
|
13
|
-
triggers = @process.triggers
|
14
|
-
triggers.size.should == 1
|
15
|
-
|
16
|
-
triggers.first.class.should == Eye::Trigger::Flapping
|
17
|
-
triggers.first.within.should == 10
|
18
|
-
triggers.first.times.should == 4
|
19
|
-
end
|
20
|
-
|
21
|
-
it "should check speedy flapping by default" do
|
22
|
-
start_ok_process(C.p1)
|
23
|
-
|
24
|
-
triggers = @process.triggers
|
25
|
-
triggers.size.should == 1
|
26
|
-
|
27
|
-
triggers.first.class.should == Eye::Trigger::Flapping
|
28
|
-
triggers.first.within.should == 10
|
29
|
-
triggers.first.times.should == 10
|
30
|
-
end
|
31
|
-
|
32
|
-
it "process flapping" do
|
33
|
-
@process = process(@c.merge(:start_command => @c[:start_command] + " -r"))
|
34
|
-
@process.start!
|
35
|
-
|
36
|
-
stub(@process).notify(:warn, anything)
|
37
|
-
mock(@process).notify(:crit, anything)
|
38
|
-
|
39
|
-
sleep 13
|
40
|
-
|
41
|
-
# check flapping happens here
|
42
|
-
|
43
|
-
@process.state_name.should == :unmonitored
|
44
|
-
@process.watchers.keys.should == []
|
45
|
-
@process.states_history.states.last(2).should == [:down, :unmonitored]
|
46
|
-
end
|
47
|
-
|
48
|
-
it "process flapping emulate with kill" do
|
49
|
-
@process = process(@c.merge(:triggers => C.flapping(:times => 3, :within => 7)))
|
50
|
-
|
51
|
-
@process.start
|
52
|
-
|
53
|
-
3.times do
|
54
|
-
die_process!(@process.pid)
|
55
|
-
sleep 3
|
56
|
-
end
|
57
|
-
|
58
|
-
@process.state_name.should == :unmonitored
|
59
|
-
@process.watchers.keys.should == []
|
60
|
-
|
61
|
-
# ! should switched to unmonitored from down status
|
62
|
-
@process.states_history.states.last(2).should == [:down, :unmonitored]
|
63
|
-
end
|
64
|
-
|
65
|
-
it "process flapping, and then send to start and fast kill, should ok started" do
|
66
|
-
@process = process(@c.merge(:triggers => C.flapping(:times => 3, :within => 15)))
|
67
|
-
|
68
|
-
@process.start
|
69
|
-
|
70
|
-
3.times do
|
71
|
-
die_process!(@process.pid)
|
72
|
-
sleep 3
|
73
|
-
end
|
74
|
-
|
75
|
-
@process.state_name.should == :unmonitored
|
76
|
-
@process.watchers.keys.should == []
|
77
|
-
|
78
|
-
@process.start
|
79
|
-
@process.state_name.should == :up
|
80
|
-
|
81
|
-
die_process!(@process.pid)
|
82
|
-
sleep 4
|
83
|
-
@process.state_name.should == :up
|
84
|
-
end
|
85
|
-
|
86
|
-
it "flapping not happens" do
|
87
|
-
@process = process(@c)
|
88
|
-
@process.start!
|
89
|
-
|
90
|
-
proxy(@process).schedule(:start, anything)
|
91
|
-
proxy(@process).schedule(:check_crash, anything)
|
92
|
-
dont_allow(@process).schedule(:unmonitor)
|
93
|
-
|
94
|
-
sleep 2
|
95
|
-
|
96
|
-
2.times do
|
97
|
-
die_process!(@process.pid)
|
98
|
-
sleep 3
|
99
|
-
end
|
100
|
-
|
101
|
-
sleep 2
|
102
|
-
|
103
|
-
@process.state_name.should == :up
|
104
|
-
end
|
105
|
-
|
106
|
-
describe "retry_in, retry_times" do
|
107
|
-
before :each do
|
108
|
-
@c = C.p1.merge(
|
109
|
-
:triggers => C.flapping(:times => 2, :within => 3),
|
110
|
-
:start_grace => 0.1, # for fast flapping
|
111
|
-
:stop_grace => 0,
|
112
|
-
:start_command => @c[:start_command] + " -r"
|
113
|
-
)
|
114
|
-
end
|
115
|
-
|
116
|
-
it "flapping than wait for interval and try again" do
|
117
|
-
@process = process(@c.merge(:triggers => C.flapping(:times => 2, :within => 3,
|
118
|
-
:retry_in => 5.seconds)))
|
119
|
-
@process.start!
|
120
|
-
|
121
|
-
sleep 18
|
122
|
-
|
123
|
-
h = @process.states_history
|
124
|
-
|
125
|
-
# был в unmonitored
|
126
|
-
h.shift[:state].should == :unmonitored
|
127
|
-
|
128
|
-
# должен попытаться подняться два раза,
|
129
|
-
h.shift(6)
|
130
|
-
|
131
|
-
# затем перейти в unmonitored с причиной flapping
|
132
|
-
flapp1 = h.shift
|
133
|
-
flapp1[:state].should == :unmonitored
|
134
|
-
flapp1[:reason].should == 'flapping'
|
135
|
-
|
136
|
-
# затем снова попыться подняться два раза
|
137
|
-
h.shift(6)
|
138
|
-
|
139
|
-
# и снова перейти в unmonitored с причиной flapping
|
140
|
-
flapp2 = h.shift
|
141
|
-
flapp2[:state].should == :unmonitored
|
142
|
-
flapp2[:reason].should == 'flapping'
|
143
|
-
|
144
|
-
# интервал между переходами во flapping должен быть больше 8 сек
|
145
|
-
(flapp2[:at] - flapp1[:at]).should > 5.seconds
|
146
|
-
|
147
|
-
# тут снова должен пытаться подниматься так как нет лимитов
|
148
|
-
h.should_not be_blank
|
149
|
-
end
|
150
|
-
|
151
|
-
it "flapping retry 1 times with retry_times = 1" do
|
152
|
-
@process = process(@c.merge(:triggers => C.flapping(:times => 2, :within => 3,
|
153
|
-
:retry_in => 5.seconds, :retry_times => 1)))
|
154
|
-
@process.start!
|
155
|
-
|
156
|
-
sleep 18
|
157
|
-
|
158
|
-
h = @process.states_history
|
159
|
-
|
160
|
-
# был в unmonitored
|
161
|
-
h.shift[:state].should == :unmonitored
|
162
|
-
|
163
|
-
# должен попытаться подняться два раза,
|
164
|
-
h.shift(6)
|
165
|
-
|
166
|
-
# затем перейти в unmonitored с причиной flapping
|
167
|
-
flapp1 = h.shift
|
168
|
-
flapp1[:state].should == :unmonitored
|
169
|
-
flapp1[:reason].should == 'flapping'
|
170
|
-
|
171
|
-
# затем снова попыться подняться два раза
|
172
|
-
h.shift(6)
|
173
|
-
|
174
|
-
# и снова перейти в unmonitored с причиной flapping
|
175
|
-
flapp2 = h.shift
|
176
|
-
flapp2[:state].should == :unmonitored
|
177
|
-
flapp2[:reason].should == 'flapping'
|
178
|
-
|
179
|
-
# интервал между переходами во flapping должен быть больше 8 сек
|
180
|
-
(flapp2[:at] - flapp1[:at]).should > 5.seconds
|
181
|
-
|
182
|
-
# все финал
|
183
|
-
h.should be_blank
|
184
|
-
end
|
185
|
-
|
186
|
-
it "flapping than manually doing something, should not retry" do
|
187
|
-
@process = process(@c.merge(:triggers => C.flapping(:times => 2, :within => 3,
|
188
|
-
:retry_in => 5.seconds)))
|
189
|
-
@process.start!
|
190
|
-
|
191
|
-
sleep 6
|
192
|
-
@process.send_command :unmonitor
|
193
|
-
sleep 9
|
194
|
-
|
195
|
-
h = @process.states_history
|
196
|
-
|
197
|
-
# был в unmonitored
|
198
|
-
h.shift[:state].should == :unmonitored
|
199
|
-
|
200
|
-
# должен попытаться подняться два раза,
|
201
|
-
h.shift(6)
|
202
|
-
|
203
|
-
# затем перейти в unmonitored с причиной flapping
|
204
|
-
flapp1 = h.shift
|
205
|
-
flapp1[:state].should == :unmonitored
|
206
|
-
flapp1[:reason].should == 'flapping'
|
207
|
-
|
208
|
-
# затем его руками переводят в unmonitored
|
209
|
-
unm = h.shift
|
210
|
-
unm[:state].should == :unmonitored
|
211
|
-
unm[:reason].should == 'unmonitor by user'
|
212
|
-
|
213
|
-
# все финал
|
214
|
-
h.should be_blank
|
215
|
-
end
|
216
|
-
|
217
|
-
it "without retry_in" do
|
218
|
-
@process = process(@c.merge(:triggers => C.flapping(:times => 2, :within => 3)))
|
219
|
-
@process.start!
|
220
|
-
|
221
|
-
sleep 10
|
222
|
-
|
223
|
-
h = @process.states_history
|
224
|
-
|
225
|
-
# был в unmonitored
|
226
|
-
h.shift[:state].should == :unmonitored
|
227
|
-
|
228
|
-
# должен попытаться подняться два раза,
|
229
|
-
h.shift(6)
|
230
|
-
|
231
|
-
# затем перейти в unmonitored с причиной flapping
|
232
|
-
flapp1 = h.shift
|
233
|
-
flapp1[:state].should == :unmonitored
|
234
|
-
flapp1[:reason].should == 'flapping'
|
235
|
-
|
236
|
-
# все финал
|
237
|
-
h.should be_blank
|
238
|
-
end
|
239
|
-
|
240
|
-
end
|
241
|
-
|
242
|
-
end
|