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,15 +0,0 @@
1
- Eye.application "app1" do
2
-
3
- group "p1" do
4
- process "server" do
5
- pid_file "server1.pid"
6
- end
7
- end
8
-
9
- group "p2" do
10
- process "server" do
11
- pid_file "server2.pid"
12
- end
13
- end
14
-
15
- end
@@ -1,5 +0,0 @@
1
- #bad logger
2
- Eye.logger = "/asd/fasd/fas/df/asd/fas/df/d"
3
-
4
- Eye.application "app1" do
5
- end
@@ -1,10 +0,0 @@
1
- Eye.application "app3" do
2
- working_diasdf asdf asdf asd fasd fr "/tmp"
3
-
4
- group("wow") {
5
- process "e1" do
6
- daemonize true
7
- pid_file "app3-e1.pid"
8
- end
9
- }
10
- end
@@ -1,7 +0,0 @@
1
- Eye.application "app4" do
2
- working_dir "/tmp"
3
-
4
- process "e1" do
5
- pid_file "app3-e1.pid"
6
- end
7
- end
@@ -1,10 +0,0 @@
1
- Eye.application "app3" do
2
- working_dir "/tmp"
3
-
4
- group("wow") {
5
- process "e1" do
6
- daemonize true
7
- pid_file "app3-e1.pid"
8
- end
9
- }
10
- end
@@ -1,7 +0,0 @@
1
- Eye.application "app4" do
2
- working_dir "/tmp"
3
-
4
- process "e2" do
5
- pid_file "app4-e2.pid"
6
- end
7
- end
@@ -1,8 +0,0 @@
1
- Eye.application "app1" do
2
- group "gr1" do
3
- process("p1"){ pid_file "app1-gr1-p1.pid" }
4
- process("p2"){ pid_file "app1-gr1-p2.pid" }
5
- end
6
-
7
- process("p0"){ pid_file "app1-p0.pid" }
8
- end
@@ -1,13 +0,0 @@
1
- Eye.application "app1" do
2
- group "gr1" do
3
- process("p2"){ pid_file "app1-gr1-p2.pid" }
4
- process("p3"){ pid_file "app1-gr1-p3.pid" }
5
- end
6
-
7
- group "gr2" do
8
- process("p4"){ pid_file "app1-gr2-p4.pid" }
9
- process("p5"){ pid_file "app1-gr2-p5.pid" }
10
- end
11
-
12
- process("p0-1"){ pid_file "app1-p0-1.pid" }
13
- end
@@ -1,26 +0,0 @@
1
- Eye.logger = "/tmp/1.log"
2
-
3
- Eye.application "app1" do
4
- working_dir "/tmp"
5
-
6
- group "gr1" do
7
- process("p1"){ pid_file "app1-gr1-p1.pid" }
8
- process("p2"){ pid_file "app1-gr1-p2.pid" }
9
- end
10
-
11
- group "gr2" do
12
- process("q3"){ pid_file "app1-gr2-q3.pid" }
13
- end
14
-
15
- process("g4"){ pid_file "app1-g4.pid" }
16
- process("g5"){ pid_file "app1-g5.pid" }
17
-
18
- end
19
-
20
- Eye.application "app2" do
21
- working_dir "/tmp"
22
-
23
- process "z1" do
24
- pid_file "app2-z1.pid"
25
- end
26
- end
@@ -1,3 +0,0 @@
1
- Eye.application "app4" do
2
- working_dir "/tmp"
3
- end
@@ -1,5 +0,0 @@
1
- Eye.info "haha"
2
-
3
- Eye.application "long_load" do
4
- sleep 1
5
- end
@@ -1,3 +0,0 @@
1
- def proc1(proxy, name)
2
- proxy.process(name){ pid_file "#{name}.pid" }
3
- end
@@ -1,9 +0,0 @@
1
- Eye.load("./subfolder2/sub/*.rb")
2
- Eye.load("subfolder2/*.rb")
3
-
4
- Eye.application "subfolder2" do
5
- working_dir "/tmp"
6
-
7
- proc2 self, "e3"
8
- proc3 self, "e4"
9
- end
@@ -1 +0,0 @@
1
- ROOT = 'sub2'
@@ -1,3 +0,0 @@
1
- def proc2(proxy, name)
2
- proxy.process(name){ pid_file "#{name}.pid2" }
3
- end
@@ -1,6 +0,0 @@
1
- def proc3(proxy, name)
2
- proxy.process(name){
3
- working_dir ROOT
4
- pid_file "#{name}.pid3"
5
- }
6
- end
@@ -1,8 +0,0 @@
1
- Eye.load("./subfolder3/**/*.rb")
2
-
3
- Eye.application "subfolder3" do
4
- working_dir "/tmp"
5
-
6
- proc4 self, "e1"
7
- proc5 self, "e2"
8
- end
@@ -1 +0,0 @@
1
- ROOT = 'sub3'
@@ -1,3 +0,0 @@
1
- def proc4(proxy, name)
2
- proxy.process(name){ pid_file "#{name}.pid4" }
3
- end
@@ -1,6 +0,0 @@
1
- def proc5(proxy, name)
2
- proxy.process(name){
3
- working_dir ROOT
4
- pid_file "#{name}.pid5"
5
- }
6
- end
@@ -1,6 +0,0 @@
1
- Eye.load("./subfolder4/a.rb")
2
- Eye.load("./subfolder4/c.rb")
3
-
4
- Eye.application "subfolder4" do
5
- env 'a' => A, 'b' => B, 'c' => D
6
- end
@@ -1,2 +0,0 @@
1
- A = 1
2
- Eye.load("b.rb")
@@ -1 +0,0 @@
1
- B=2
@@ -1 +0,0 @@
1
- D=3
@@ -1,31 +0,0 @@
1
- require File.dirname(__FILE__) + '/spec_helper'
2
-
3
- class Aaa
4
- include Celluloid
5
-
6
- def int
7
- 1
8
- end
9
-
10
- def ext
11
- int
12
- end
13
-
14
- end
15
-
16
- describe "Actor mocking" do
17
- before :each do
18
- @a = Aaa.new
19
- end
20
-
21
- it "int" do
22
- mock(@a).int{2}
23
- @a.int.should == 2
24
- end
25
-
26
- it "ext" do
27
- mock(@a).int{2}
28
- @a.ext.should == 2
29
- end
30
-
31
- end
@@ -1,25 +0,0 @@
1
- require File.dirname(__FILE__) + '/../spec_helper'
2
-
3
- describe "Eye::Notify::Jabber" do
4
- before :each do
5
- @message = {:message=>"something", :name=>"blocking process",
6
- :full_name=>"main:default:blocking process", :pid=>123,
7
- :host=>'host1', :level=>:crit, :at => Time.now}
8
- @h = {:host=>"mx.some.host.ru", :type=>:mail, :port=>25, :contact=>"vasya@mail.ru", :password => "123"}
9
- end
10
-
11
- it "should send jabber" do
12
- require 'xmpp4r'
13
-
14
- @m = Eye::Notify::Jabber.new(@h, @message)
15
-
16
- ob = ""
17
- mock(Jabber::Client).new(anything){ ob }
18
- mock(ob).connect('mx.some.host.ru', 25)
19
- mock(ob).auth('123')
20
- mock(ob).send(is_a(Jabber::Message))
21
- mock(ob).close
22
-
23
- @m.execute
24
- end
25
- end
@@ -1,26 +0,0 @@
1
- require File.dirname(__FILE__) + '/../spec_helper'
2
-
3
- describe "Eye::Notify::Mail" do
4
- before :each do
5
- @message = {:message=>"something", :name=>"blocking process",
6
- :full_name=>"main:default:blocking process", :pid=>123,
7
- :host=>'host1', :level=>:crit, :at => Time.now}
8
- @h = {:host=>"mx.some.host.ru", :type=>:mail, :port=>25, :domain=>"some.host", :contact=>"vasya@mail.ru"}
9
- end
10
-
11
- it "should send mail" do
12
- @m = Eye::Notify::Mail.new(@h, @message)
13
-
14
- ob = ""
15
- mock(Net::SMTP).start('mx.some.host.ru', 25, 'some.host', nil, nil, nil){ ob }
16
-
17
- @m.execute
18
-
19
- @m.message_subject.should == "[host1] [main:default:blocking process] something"
20
- @m.contact.should == "vasya@mail.ru"
21
-
22
- m = @m.message.split("\n")
23
- m.should include("To: <vasya@mail.ru>")
24
- m.should include("Subject: [host1] [main:default:blocking process] something")
25
- end
26
- end
@@ -1,90 +0,0 @@
1
- require File.dirname(__FILE__) + '/spec_helper'
2
-
3
- class Not1 < Eye::Notify
4
- param :port, Fixnum
5
-
6
- def execute
7
- end
8
- end
9
-
10
- describe "Eye::Notify" do
11
- before :each do
12
- @message = {:message=>"something", :name=>"blocking process",
13
- :full_name=>"main:default:blocking process", :pid=>123,
14
- :host=>'host1', :level=>:crit, :at => Time.now}
15
-
16
- end
17
-
18
- context "create notify class" do
19
- before :each do
20
- @config = {
21
- :mail=>{:host=>"mx.some.host.ru", :type => :mail, :port => 25, :domain => "some.host"},
22
- :contacts=>{
23
- "vasya"=>{:name=>"vasya", :type=>:mail, :contact=>"vasya@mail.ru", :opts=>{}},
24
- "petya"=>{:name=>"petya", :type=>:mail, :contact=>"petya@mail.ru", :opts=>{:port=>1111}},
25
- 'idiots'=>[{:name=>"idiot1", :type=>:mail, :contact=>"idiot1@mail.ru", :opts=>{}}, {:name=>"idiot2", :type=>:mail, :contact=>"idiot2@mail.ru", :opts=>{:port=>1111}}],
26
- "idiot1"=>{:name=>"idiot1", :type=>:mail, :contact=>"idiot1@mail.ru", :opts=>{}},
27
- "idiot2"=>{:name=>"idiot2", :type=>:mail, :contact=>"idiot2@mail.ru", :opts=>{:port=>1111}},
28
- "idiot3"=>{:name=>"idiot3", :type=>:jabber, :contact=>"idiot3@mail.ru", :opts=>{:host => "jabber.some.host", :port=>1111, :user => "some_user"}}}}
29
-
30
- stub(Eye::Control).current_config{ {:config => @config} }
31
- end
32
-
33
- it "should create right class" do
34
- h = {:host=>"mx.some.host.ru", :type=>:mail, :port=>25, :domain=>"some.host", :contact=>"vasya@mail.ru"}
35
- mock(Eye::Notify::Mail).new(h, @message)
36
- Eye::Notify.notify('vasya', @message)
37
- end
38
-
39
- it "should create right class with additional options" do
40
- h = {:host=>"mx.some.host.ru", :type=>:mail, :port=>1111, :domain=>"some.host", :contact=>"petya@mail.ru"}
41
- mock(Eye::Notify::Mail).new(h, @message)
42
- Eye::Notify.notify('petya', @message)
43
- end
44
-
45
- it "should create right class with group of contacts" do
46
- h1 = {:host=>"mx.some.host.ru", :type=>:mail, :port=>25, :domain=>"some.host", :contact=>"idiot1@mail.ru"}
47
- h2 = {:host=>"mx.some.host.ru", :type=>:mail, :port=>1111, :domain=>"some.host", :contact=>"idiot2@mail.ru"}
48
- mock(Eye::Notify::Mail).new(h1, @message)
49
- mock(Eye::Notify::Mail).new(h2, @message)
50
- Eye::Notify.notify('idiots', @message)
51
- end
52
-
53
- it "without contact should do nothing" do
54
- dont_allow(Eye::Notify::Mail).new
55
- Eye::Notify.notify('noperson', @message)
56
- end
57
-
58
- it "should also notify to jabber" do
59
- h = {:host=>"jabber.some.host", :port=>1111, :user=>"some_user", :contact=>"idiot3@mail.ru"}
60
- mock(Eye::Notify::Jabber).new(h, @message)
61
- Eye::Notify.notify('idiot3', @message)
62
- end
63
- end
64
-
65
- context "initialize" do
66
- before :each do
67
- @h = {:host=>"mx.some.host.ru", :type=>:mail, :port=>25, :domain=>"some.host", :contact=>"vasya@mail.ru"}
68
- end
69
-
70
- it "create and intall async task" do
71
- n = Eye::Notify::Not1.new(@h, @message)
72
-
73
- $wo = nil
74
- mock(n).execute do
75
- $wo = n.wrapped_object
76
- end
77
-
78
- n.async_notify
79
- sleep 0.5
80
- n.alive?.should == false
81
-
82
- $wo.contact.should == 'vasya@mail.ru'
83
- $wo.port.should == 25
84
-
85
- $wo.message_subject.should == '[host1] [main:default:blocking process] something'
86
- $wo.message_body.should start_with('[host1] [main:default:blocking process] something at')
87
- end
88
- end
89
-
90
- end
@@ -1,79 +0,0 @@
1
- require File.dirname(__FILE__) + '/../../spec_helper'
2
-
3
- describe "ChildProcess" do
4
-
5
- describe "starting, monitoring" do
6
- after :each do
7
- @process.stop if @process
8
- end
9
-
10
- it "should just monitoring, and do nothin" do
11
- start_ok_process(C.p3.merge(:monitor_children => {:checks => join(C.check_mem, C.check_cpu)}))
12
- sleep 6
13
-
14
- @process.state_name.should == :up
15
- @process.childs.keys.should_not == []
16
- @process.childs.keys.size.should == 3
17
- @process.watchers.keys.should == [:check_alive, :check_childs]
18
-
19
- @childs = @process.childs.values
20
- @childs.each do |child|
21
- child.watchers.keys.should == [:check_memory, :check_cpu]
22
- dont_allow(child).schedule :restart
23
- end
24
-
25
- sleep 7
26
- end
27
-
28
- it "should check childs even when one of them respawned" do
29
- start_ok_process(C.p3.merge(:monitor_children => {:checks => join(C.check_mem, C.check_cpu)}, :childs_update_period => Eye::SystemResources::PsAxActor::UPDATE_INTERVAL + 1))
30
- @process.watchers.keys.should == [:check_alive, :check_childs]
31
-
32
- sleep 6 # ensure that childs finds
33
-
34
- @process.childs.size.should == 3
35
-
36
- # now restarting
37
- died = @process.childs.keys.sample
38
- die_process!(died, 9)
39
-
40
- # sleep enought for update list
41
- sleep (Eye::SystemResources::PsAxActor::UPDATE_INTERVAL * 2 + 3).seconds
42
-
43
- @process.childs.size.should == 3
44
- @process.childs.keys.should_not include(died)
45
-
46
- @childs = @process.childs.values
47
- @childs.each do |child|
48
- child.watchers.keys.should == [:check_memory, :check_cpu]
49
- dont_allow(child).schedule :restart
50
- end
51
- end
52
-
53
- it "some child get condition" do
54
- start_ok_process(C.p3.merge(:monitor_children => {:checks =>
55
- join(C.check_mem, C.check_cpu(:below => 50, :times => 2))}))
56
- sleep 6
57
-
58
- @process.childs.size.should == 3
59
-
60
- @childs = @process.childs.values
61
- crazy = @childs.shift
62
-
63
- @childs.each do |child|
64
- child.watchers.keys.should == [:check_memory, :check_cpu]
65
- dont_allow(child).schedule :restart
66
- end
67
-
68
- stub(Eye::SystemResources).cpu(crazy.pid){ 55 }
69
- stub(Eye::SystemResources).cpu(anything){ 5 }
70
-
71
-
72
- crazy.watchers.keys.should == [:check_memory, :check_cpu]
73
- mock(crazy).notify(:crit, "Bounded cpu(50%): [*55%, *55%] send to :restart")
74
- mock(crazy).schedule :restart, anything
75
-
76
- sleep 4
77
- end
78
- end
79
- end