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.
Files changed (143) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -3
  3. data/bin/eye +7 -0
  4. data/bin/loader_eye +7 -5
  5. data/examples/notify.eye +1 -1
  6. data/eye.gemspec +4 -4
  7. data/lib/eye.rb +1 -3
  8. data/lib/eye/controller.rb +4 -0
  9. data/lib/eye/controller/status.rb +1 -1
  10. data/lib/eye/dsl.rb +1 -1
  11. data/lib/eye/dsl/main.rb +0 -13
  12. data/lib/eye/dsl/opts.rb +4 -2
  13. data/lib/eye/loader.rb +2 -3
  14. data/lib/eye/notify.rb +3 -3
  15. data/lib/eye/process/monitor.rb +5 -3
  16. data/lib/eye/process/notify.rb +5 -5
  17. data/lib/eye/process/scheduler.rb +4 -4
  18. data/lib/eye/process/system.rb +3 -10
  19. data/lib/eye/process/trigger.rb +1 -1
  20. data/lib/eye/process/watchers.rb +1 -1
  21. data/lib/eye/server.rb +9 -8
  22. data/lib/eye/system.rb +2 -7
  23. data/lib/eye/system_resources.rb +3 -3
  24. data/lib/eye/utils/celluloid_chain.rb +2 -2
  25. metadata +7 -241
  26. data/lib/eye/io/unix_server.rb +0 -44
  27. data/lib/eye/io/unix_socket.rb +0 -39
  28. data/spec/checker/cpu_spec.rb +0 -58
  29. data/spec/checker/file_ctime_spec.rb +0 -34
  30. data/spec/checker/file_size_spec.rb +0 -107
  31. data/spec/checker/http_spec.rb +0 -114
  32. data/spec/checker/memory_spec.rb +0 -64
  33. data/spec/checker/socket_spec.rb +0 -116
  34. data/spec/checker_spec.rb +0 -187
  35. data/spec/child_process/child_process_spec.rb +0 -46
  36. data/spec/client_server_spec.rb +0 -33
  37. data/spec/controller/commands_spec.rb +0 -92
  38. data/spec/controller/controller_spec.rb +0 -157
  39. data/spec/controller/find_objects_spec.rb +0 -176
  40. data/spec/controller/group_spec.rb +0 -110
  41. data/spec/controller/intergration_spec.rb +0 -366
  42. data/spec/controller/load_spec.rb +0 -371
  43. data/spec/controller/races_spec.rb +0 -70
  44. data/spec/controller/stop_on_delete_spec.rb +0 -157
  45. data/spec/dsl/chain_spec.rb +0 -146
  46. data/spec/dsl/checks_spec.rb +0 -219
  47. data/spec/dsl/config_spec.rb +0 -44
  48. data/spec/dsl/dsl_spec.rb +0 -73
  49. data/spec/dsl/getter_spec.rb +0 -223
  50. data/spec/dsl/integration_spec.rb +0 -376
  51. data/spec/dsl/load_spec.rb +0 -52
  52. data/spec/dsl/notify_spec.rb +0 -114
  53. data/spec/dsl/process_spec.rb +0 -380
  54. data/spec/dsl/sub_procs_spec.rb +0 -93
  55. data/spec/dsl/with_server_spec.rb +0 -128
  56. data/spec/example/em.rb +0 -57
  57. data/spec/example/forking.rb +0 -20
  58. data/spec/example/sample.rb +0 -154
  59. data/spec/fixtures/dsl/0.rb +0 -8
  60. data/spec/fixtures/dsl/0a.rb +0 -8
  61. data/spec/fixtures/dsl/0c.rb +0 -8
  62. data/spec/fixtures/dsl/1.rb +0 -5
  63. data/spec/fixtures/dsl/bad.eye +0 -6
  64. data/spec/fixtures/dsl/configs/1.eye +0 -3
  65. data/spec/fixtures/dsl/configs/2.eye +0 -1
  66. data/spec/fixtures/dsl/configs/3.eye +0 -1
  67. data/spec/fixtures/dsl/configs/4.eye +0 -3
  68. data/spec/fixtures/dsl/empty.eye +0 -20
  69. data/spec/fixtures/dsl/include_test.eye +0 -5
  70. data/spec/fixtures/dsl/include_test/1.rb +0 -6
  71. data/spec/fixtures/dsl/include_test/ha.rb +0 -4
  72. data/spec/fixtures/dsl/include_test2.eye +0 -5
  73. data/spec/fixtures/dsl/integration.eye +0 -30
  74. data/spec/fixtures/dsl/integration2.eye +0 -32
  75. data/spec/fixtures/dsl/integration_locks.eye +0 -30
  76. data/spec/fixtures/dsl/integration_sor.eye +0 -32
  77. data/spec/fixtures/dsl/integration_sor2.eye +0 -27
  78. data/spec/fixtures/dsl/integration_sor3.eye +0 -32
  79. data/spec/fixtures/dsl/load.eye +0 -25
  80. data/spec/fixtures/dsl/load2.eye +0 -7
  81. data/spec/fixtures/dsl/load2_dup2.eye +0 -13
  82. data/spec/fixtures/dsl/load2_dup_pid.eye +0 -7
  83. data/spec/fixtures/dsl/load3.eye +0 -10
  84. data/spec/fixtures/dsl/load4.eye +0 -7
  85. data/spec/fixtures/dsl/load5.eye +0 -8
  86. data/spec/fixtures/dsl/load6.eye +0 -17
  87. data/spec/fixtures/dsl/load_dubls.eye +0 -36
  88. data/spec/fixtures/dsl/load_dup_ex_names.eye +0 -15
  89. data/spec/fixtures/dsl/load_error.eye +0 -5
  90. data/spec/fixtures/dsl/load_error_folder/load3.eye +0 -10
  91. data/spec/fixtures/dsl/load_error_folder/load4.eye +0 -7
  92. data/spec/fixtures/dsl/load_folder/load3.eye +0 -10
  93. data/spec/fixtures/dsl/load_folder/load4.eye +0 -7
  94. data/spec/fixtures/dsl/load_int.eye +0 -8
  95. data/spec/fixtures/dsl/load_int2.eye +0 -13
  96. data/spec/fixtures/dsl/load_logger.eye +0 -26
  97. data/spec/fixtures/dsl/load_logger2.eye +0 -3
  98. data/spec/fixtures/dsl/long_load.eye +0 -5
  99. data/spec/fixtures/dsl/subfolder1/proc1.rb +0 -3
  100. data/spec/fixtures/dsl/subfolder2.eye +0 -9
  101. data/spec/fixtures/dsl/subfolder2/common.rb +0 -1
  102. data/spec/fixtures/dsl/subfolder2/proc2.rb +0 -3
  103. data/spec/fixtures/dsl/subfolder2/sub/proc3.rb +0 -6
  104. data/spec/fixtures/dsl/subfolder3.eye +0 -8
  105. data/spec/fixtures/dsl/subfolder3/common.rb +0 -1
  106. data/spec/fixtures/dsl/subfolder3/proc4.rb +0 -3
  107. data/spec/fixtures/dsl/subfolder3/sub/proc5.rb +0 -6
  108. data/spec/fixtures/dsl/subfolder4.eye +0 -6
  109. data/spec/fixtures/dsl/subfolder4/a.rb +0 -2
  110. data/spec/fixtures/dsl/subfolder4/b.rb +0 -1
  111. data/spec/fixtures/dsl/subfolder4/c.rb +0 -1
  112. data/spec/mock_spec.rb +0 -31
  113. data/spec/notify/jabber_spec.rb +0 -25
  114. data/spec/notify/mail_spec.rb +0 -26
  115. data/spec/notify_spec.rb +0 -90
  116. data/spec/process/checks/child_checks_spec.rb +0 -79
  117. data/spec/process/checks/cpu_spec.rb +0 -114
  118. data/spec/process/checks/ctime_spec.rb +0 -43
  119. data/spec/process/checks/fsize_spec.rb +0 -22
  120. data/spec/process/checks/http_spec.rb +0 -52
  121. data/spec/process/checks/intergration_spec.rb +0 -32
  122. data/spec/process/checks/memory_spec.rb +0 -127
  123. data/spec/process/child_process_spec.rb +0 -125
  124. data/spec/process/config_spec.rb +0 -74
  125. data/spec/process/controller_spec.rb +0 -173
  126. data/spec/process/monitoring_spec.rb +0 -180
  127. data/spec/process/notify_spec.rb +0 -27
  128. data/spec/process/restart_spec.rb +0 -186
  129. data/spec/process/scheduler_spec.rb +0 -178
  130. data/spec/process/start_spec.rb +0 -261
  131. data/spec/process/states_history_spec.rb +0 -123
  132. data/spec/process/stop_spec.rb +0 -156
  133. data/spec/process/system_spec.rb +0 -136
  134. data/spec/process/triggers/flapping_spec.rb +0 -242
  135. data/spec/process/update_config_spec.rb +0 -62
  136. data/spec/spec_helper.rb +0 -128
  137. data/spec/support/rr_celluloid.rb +0 -15
  138. data/spec/support/spec_support.rb +0 -163
  139. data/spec/system_resources_spec.rb +0 -56
  140. data/spec/system_spec.rb +0 -174
  141. data/spec/utils/alive_array_spec.rb +0 -49
  142. data/spec/utils/celluloid_chain_spec.rb +0 -89
  143. 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
@@ -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
@@ -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