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,62 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
-
|
3
|
-
describe "#update_config" do
|
4
|
-
before :each do
|
5
|
-
@cfg = C.p3.merge(:checks => join(C.check_mem, C.check_cpu), :monitor_children => {})
|
6
|
-
start_ok_process(@cfg)
|
7
|
-
sleep 6
|
8
|
-
end
|
9
|
-
|
10
|
-
after :each do
|
11
|
-
@process.stop if @process
|
12
|
-
end
|
13
|
-
|
14
|
-
it "update only env" do
|
15
|
-
@process.watchers.keys.should == [:check_alive, :check_childs, :check_memory, :check_cpu]
|
16
|
-
@process.childs.keys.size.should == 3
|
17
|
-
child_pids = @process.childs.keys
|
18
|
-
@process[:environment].should == {"ENV1" => "SUPER"}
|
19
|
-
|
20
|
-
@process.update_config(@cfg.merge(:environment => {"ENV2" => "SUPER"}))
|
21
|
-
sleep 5
|
22
|
-
|
23
|
-
@process.state_name.should == :up
|
24
|
-
@process.watchers.keys.should == [:check_alive, :check_childs, :check_memory, :check_cpu]
|
25
|
-
@process.childs.keys.size.should == 3
|
26
|
-
@process.childs.keys.should == child_pids
|
27
|
-
@process[:environment].should == {"ENV2" => "SUPER"}
|
28
|
-
@process.pid.should == @pid
|
29
|
-
end
|
30
|
-
|
31
|
-
it "update watchers" do
|
32
|
-
@process.watchers.keys.should == [:check_alive, :check_childs, :check_memory, :check_cpu]
|
33
|
-
@process.childs.keys.size.should == 3
|
34
|
-
child_pids = @process.childs.keys
|
35
|
-
|
36
|
-
@process.update_config(@cfg.merge(:checks => C.check_mem))
|
37
|
-
sleep 5
|
38
|
-
|
39
|
-
@process.state_name.should == :up
|
40
|
-
@process.watchers.keys.should == [:check_alive, :check_childs, :check_memory]
|
41
|
-
@process.childs.keys.size.should == 3
|
42
|
-
@process.childs.keys.should == child_pids
|
43
|
-
@process.pid.should == @pid
|
44
|
-
end
|
45
|
-
|
46
|
-
it "when disable monitor_children they should remove" do
|
47
|
-
@process.watchers.keys.should == [:check_alive, :check_childs, :check_memory, :check_cpu]
|
48
|
-
@process.childs.keys.size.should == 3
|
49
|
-
child_pids = @process.childs.keys
|
50
|
-
|
51
|
-
@process.update_config(@cfg.merge(:monitor_children => nil))
|
52
|
-
sleep 5
|
53
|
-
|
54
|
-
@process.state_name.should == :up
|
55
|
-
@process.watchers.keys.should == [:check_alive, :check_memory, :check_cpu]
|
56
|
-
@process.childs.keys.size.should == 0
|
57
|
-
@process.pid.should == @pid
|
58
|
-
end
|
59
|
-
|
60
|
-
end
|
61
|
-
|
62
|
-
|
data/spec/spec_helper.rb
DELETED
@@ -1,128 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require "bundler/setup"
|
3
|
-
require 'celluloid'
|
4
|
-
|
5
|
-
if ENV['COV']
|
6
|
-
require 'simplecov'
|
7
|
-
SimpleCov.start do
|
8
|
-
add_filter "/bundle/"
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
Bundler.require :default
|
13
|
-
|
14
|
-
# preload
|
15
|
-
Eye::Control
|
16
|
-
Eye::Controller
|
17
|
-
Eye::Process
|
18
|
-
|
19
|
-
class Eye::Controller
|
20
|
-
public :find_objects, :remove_object_from_tree
|
21
|
-
end
|
22
|
-
|
23
|
-
require 'rspec/mocks'
|
24
|
-
require 'fakeweb'
|
25
|
-
|
26
|
-
require File.join(File.dirname(__FILE__), %w{support spec_support})
|
27
|
-
|
28
|
-
$logger_path = File.join(File.dirname(__FILE__), %w{spec.log})
|
29
|
-
|
30
|
-
def set_glogger
|
31
|
-
Eye::Logger.log_level = Logger::DEBUG
|
32
|
-
Eye::Logger.link_logger($logger_path)
|
33
|
-
end
|
34
|
-
|
35
|
-
set_glogger
|
36
|
-
|
37
|
-
$logger = Eye::Logger.new("spec")
|
38
|
-
Celluloid.logger = $logger
|
39
|
-
STDERR.reopen($logger_path)
|
40
|
-
|
41
|
-
$logger.info "specs started in process #{$$}"
|
42
|
-
|
43
|
-
RSpec.configure do |config|
|
44
|
-
config.mock_with :rr
|
45
|
-
|
46
|
-
config.before(:all) do
|
47
|
-
silence_warnings{ Eye::SystemResources::PsAxActor::UPDATE_INTERVAL = 2 }
|
48
|
-
end
|
49
|
-
|
50
|
-
config.before(:each) do
|
51
|
-
FileUtils.rm(C.p1[:pid_file]) rescue nil
|
52
|
-
FileUtils.rm(C.p2[:pid_file]) rescue nil
|
53
|
-
|
54
|
-
@log = C.base[:stdout]
|
55
|
-
FileUtils.rm(@log) rescue nil
|
56
|
-
|
57
|
-
$logger.info "================== #{ self.class.description} '#{ example.description }'========================"
|
58
|
-
end
|
59
|
-
|
60
|
-
config.after(:each) do
|
61
|
-
# clearing all
|
62
|
-
|
63
|
-
if @pid_file
|
64
|
-
FileUtils.rm(@pid_file) rescue nil
|
65
|
-
end
|
66
|
-
|
67
|
-
force_kill_process(@process)
|
68
|
-
force_kill_pid(@pid)
|
69
|
-
|
70
|
-
FileUtils.rm(C.p1[:pid_file]) rescue nil
|
71
|
-
FileUtils.rm(C.p2[:pid_file]) rescue nil
|
72
|
-
|
73
|
-
GC.start # for kill spawned threads
|
74
|
-
|
75
|
-
terminate_old_actors
|
76
|
-
|
77
|
-
# actors = Celluloid::Actor.all.map(&:class)
|
78
|
-
# $logger.info "Actors: #{actors.inspect}"
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
def terminate_old_actors
|
83
|
-
Celluloid::Actor.all.each do |actor|
|
84
|
-
next unless actor.alive?
|
85
|
-
if [Eye::Process, Eye::Group, Eye::ChildProcess].include?(actor.class)
|
86
|
-
actor.terminate
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
def force_kill_process(process)
|
92
|
-
if process && process.alive?
|
93
|
-
pid = process.pid
|
94
|
-
|
95
|
-
process.terminate
|
96
|
-
|
97
|
-
if pid && Eye::System.pid_alive?(pid)
|
98
|
-
Eye::System.send_signal(pid, 9)
|
99
|
-
end
|
100
|
-
|
101
|
-
process = nil
|
102
|
-
end
|
103
|
-
end
|
104
|
-
|
105
|
-
def force_kill_pid(pid)
|
106
|
-
if pid && Eye::System.pid_alive?(pid)
|
107
|
-
Eye::System.send_signal(pid, 9)
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
def fixture(name)
|
112
|
-
File.expand_path(File.join(File.dirname(__FILE__), 'fixtures', name))
|
113
|
-
end
|
114
|
-
|
115
|
-
def join(*args)
|
116
|
-
result = {}
|
117
|
-
args.each do |a|
|
118
|
-
result.merge!(a)
|
119
|
-
end
|
120
|
-
|
121
|
-
result
|
122
|
-
end
|
123
|
-
|
124
|
-
def should_spend(timeout = 0, delta = 0.05, &block)
|
125
|
-
tm1 = Time.now
|
126
|
-
yield
|
127
|
-
(Time.now - tm1).should be_within(delta).of(timeout)
|
128
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
require 'rr'
|
2
|
-
require 'rspec/core/mocking/with_rr'
|
3
|
-
|
4
|
-
module RR::CelluloidExt
|
5
|
-
%w{mock stub dont_allow proxy strong}.each do |_method|
|
6
|
-
module_eval <<-Q
|
7
|
-
def #{_method}(*args)
|
8
|
-
args[0] = args[0].wrapped_object if args[0].respond_to?(:wrapped_object)
|
9
|
-
super
|
10
|
-
end
|
11
|
-
Q
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
RSpec::Core::MockFrameworkAdapter.send(:include, RR::CelluloidExt)
|
@@ -1,163 +0,0 @@
|
|
1
|
-
module C
|
2
|
-
extend self
|
3
|
-
|
4
|
-
def sample_dir
|
5
|
-
File.expand_path(File.join(File.dirname(__FILE__), %w{.. example}))
|
6
|
-
end
|
7
|
-
|
8
|
-
def pid_name
|
9
|
-
"1.pid"
|
10
|
-
end
|
11
|
-
|
12
|
-
def log_name
|
13
|
-
"1111.log"
|
14
|
-
end
|
15
|
-
|
16
|
-
def base
|
17
|
-
{
|
18
|
-
:environment => {"ENV1" => "SUPER"},
|
19
|
-
:working_dir => sample_dir,
|
20
|
-
:application => "main",
|
21
|
-
:group => "default",
|
22
|
-
:name => "base",
|
23
|
-
:pid_file => sample_dir + "/#{pid_name}",
|
24
|
-
:stdout => sample_dir + "/#{log_name}",
|
25
|
-
:stderr => sample_dir + "/#{log_name}",
|
26
|
-
:check_alive_period => 1.seconds,
|
27
|
-
:start_timeout => 5.seconds,
|
28
|
-
:stop_timeout => 2.seconds,
|
29
|
-
}
|
30
|
-
end
|
31
|
-
|
32
|
-
# eye daemonize process
|
33
|
-
def p1
|
34
|
-
base.merge(
|
35
|
-
:name => "blocking process",
|
36
|
-
:start_command => "ruby sample.rb",
|
37
|
-
:daemonize => true
|
38
|
-
)
|
39
|
-
end
|
40
|
-
|
41
|
-
# self daemonized process
|
42
|
-
def p2
|
43
|
-
base.merge(
|
44
|
-
:name => "self daemonized process",
|
45
|
-
:start_command => "ruby sample.rb -d --pid #{pid_name} --log #{log_name}",
|
46
|
-
)
|
47
|
-
end
|
48
|
-
|
49
|
-
# forking example
|
50
|
-
def p3
|
51
|
-
base.merge(
|
52
|
-
:name => "forking",
|
53
|
-
:start_command => "ruby forking.rb start",
|
54
|
-
:stop_command => "ruby forking.rb stop",
|
55
|
-
:pid_file => "forking.pid",
|
56
|
-
:childs_update_period => Eye::SystemResources::PsAxActor::UPDATE_INTERVAL + 1,
|
57
|
-
:stop_timeout => 5.seconds,
|
58
|
-
:start_timeout => 15.seconds
|
59
|
-
)
|
60
|
-
end
|
61
|
-
|
62
|
-
# event machine
|
63
|
-
def p4
|
64
|
-
base.merge(
|
65
|
-
:pid_file => "em.pid",
|
66
|
-
:name => "em",
|
67
|
-
:start_command => "ruby em.rb",
|
68
|
-
:daemonize => true,
|
69
|
-
:start_grace => 3.5,
|
70
|
-
:stop_grace => 0.5
|
71
|
-
)
|
72
|
-
end
|
73
|
-
|
74
|
-
def check_mem(a = {})
|
75
|
-
{:memory => {:type => :memory, :every => 2.seconds, :below => 100.megabytes, :times => [3,5]}.merge(a)}
|
76
|
-
end
|
77
|
-
|
78
|
-
def check_cpu(a = {})
|
79
|
-
{:cpu => {:type => :cpu, :every => 2.seconds, :below => 80, :times => [4,5]}.merge(a)}
|
80
|
-
end
|
81
|
-
|
82
|
-
def check_ctime(a = {})
|
83
|
-
{:ctime => {:type => :ctime, :every => 2, :file => sample_dir + "/#{log_name}", :times => [3,5]}.merge(a)}
|
84
|
-
end
|
85
|
-
|
86
|
-
def check_fsize(a = {})
|
87
|
-
{:fsize => {:type => :fsize, :every => 2, :file => sample_dir + "/#{log_name}", :times => [3,5]}.merge(a)}
|
88
|
-
end
|
89
|
-
|
90
|
-
def check_http(a = {})
|
91
|
-
{:http => {
|
92
|
-
:type => :http, :every => 2, :times => 1,
|
93
|
-
:url => "http://localhost:3000/bla", :kind => :sucess,
|
94
|
-
:pattern => /OK/, :timeout => 3.seconds
|
95
|
-
}.merge(a)
|
96
|
-
}
|
97
|
-
end
|
98
|
-
|
99
|
-
def flapping(a = {})
|
100
|
-
{:flapping => { :type => :flapping, :times => 2, :within => 10.seconds }.merge(a)}
|
101
|
-
end
|
102
|
-
|
103
|
-
def restart_sync
|
104
|
-
{:restart => {:action => :restart, :type => :sync, :grace => 5}}
|
105
|
-
end
|
106
|
-
|
107
|
-
def restart_async
|
108
|
-
{:restart => {:action => :restart, :type => :async, :grace => 5}}
|
109
|
-
end
|
110
|
-
|
111
|
-
def socket_path
|
112
|
-
File.join(sample_dir, 'sock1')
|
113
|
-
end
|
114
|
-
|
115
|
-
end
|
116
|
-
|
117
|
-
class TrapError
|
118
|
-
include Celluloid
|
119
|
-
|
120
|
-
trap_exit :actor_died
|
121
|
-
|
122
|
-
def actor_died(actor, reason)
|
123
|
-
if reason
|
124
|
-
$logger.error "Actor Died! #{actor.inspect} has died because of a #{reason.inspect}"
|
125
|
-
end
|
126
|
-
#$logger.error "#{reason.message}"
|
127
|
-
#$logger.error "#{reason.backtrace * "\n"}"
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|
131
|
-
def process(cfg)
|
132
|
-
p = Eye::Process.new(cfg)
|
133
|
-
@trap = TrapError.new
|
134
|
-
@trap.link(p)
|
135
|
-
p
|
136
|
-
end
|
137
|
-
|
138
|
-
def start_ok_process(cfg = C.p1)
|
139
|
-
@process = process(cfg)
|
140
|
-
@process.start
|
141
|
-
sleep 0.2
|
142
|
-
|
143
|
-
@process.process_realy_running?.should == true
|
144
|
-
@process.pid.should > 0
|
145
|
-
@process.watchers.keys.should == [:check_alive] if !cfg[:check_alive] == false
|
146
|
-
@process.state_name.should == :up
|
147
|
-
@pid = @process.pid
|
148
|
-
Eye::System.pid_alive?(@pid).should == true
|
149
|
-
|
150
|
-
@process
|
151
|
-
end
|
152
|
-
|
153
|
-
def die_process!(pid, signal = :term, int = 0.2)
|
154
|
-
Eye::System.send_signal(pid, signal)
|
155
|
-
sleep int.to_f
|
156
|
-
Eye::System.pid_alive?(pid).should == false
|
157
|
-
end
|
158
|
-
|
159
|
-
def ensure_kill_samples
|
160
|
-
`ps aux | grep 'ruby sample.rb' | awk '{print $2}' | xargs kill -2 2>/dev/null` rescue nil
|
161
|
-
end
|
162
|
-
|
163
|
-
require_relative 'rr_celluloid'
|
@@ -1,56 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
-
|
3
|
-
describe "Eye::SystemResources" do
|
4
|
-
|
5
|
-
it "should get memory" do
|
6
|
-
x = Eye::SystemResources.memory($$)
|
7
|
-
x.should > 100
|
8
|
-
x.should < 300_000
|
9
|
-
end
|
10
|
-
|
11
|
-
it "should get cpu" do
|
12
|
-
x = Eye::SystemResources.cpu($$)
|
13
|
-
x.should >= 0
|
14
|
-
x.should <= 150
|
15
|
-
end
|
16
|
-
|
17
|
-
it "should get start time" do
|
18
|
-
x = Eye::SystemResources.start_time($$)
|
19
|
-
x.length.should >= 4
|
20
|
-
end
|
21
|
-
|
22
|
-
it "should get childs" do
|
23
|
-
x = Eye::SystemResources.childs($$)
|
24
|
-
x.is_a?(Array).should == true
|
25
|
-
x.first.should > 0
|
26
|
-
x.size.should > 0
|
27
|
-
x.all?{|c| c > 0 }.should == true
|
28
|
-
end
|
29
|
-
|
30
|
-
it "should cache and update when interval" do
|
31
|
-
Eye::SystemResources.send :reset!
|
32
|
-
stub(Eye::System).ps_aux{ {$$ => {:rss => 123}} }
|
33
|
-
|
34
|
-
silence_warnings{ Eye::SystemResources::PsAxActor::UPDATE_INTERVAL = 1 }
|
35
|
-
|
36
|
-
x1 = Eye::SystemResources.memory($$)
|
37
|
-
x2 = Eye::SystemResources.memory($$)
|
38
|
-
x1.should == x2
|
39
|
-
|
40
|
-
sleep 0.5
|
41
|
-
x3 = Eye::SystemResources.memory($$)
|
42
|
-
x1.should == x3
|
43
|
-
|
44
|
-
stub(Eye::System).ps_aux{ {$$ => {:rss => 124}} }
|
45
|
-
|
46
|
-
sleep 0.7
|
47
|
-
x4 = Eye::SystemResources.memory($$)
|
48
|
-
x1.should == x4 # first value is old
|
49
|
-
|
50
|
-
sleep 0.1
|
51
|
-
|
52
|
-
x5 = Eye::SystemResources.memory($$)
|
53
|
-
x1.should_not == x5 # seconds is new
|
54
|
-
end
|
55
|
-
|
56
|
-
end
|
data/spec/system_spec.rb
DELETED
@@ -1,174 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
-
|
3
|
-
describe "Eye::System" do
|
4
|
-
|
5
|
-
it "pid_alive?" do
|
6
|
-
Eye::System.pid_alive?($$).should == true
|
7
|
-
Eye::System.pid_alive?(123456).should == false
|
8
|
-
Eye::System.pid_alive?(-122).should == false
|
9
|
-
Eye::System.pid_alive?(nil).should == false
|
10
|
-
end
|
11
|
-
|
12
|
-
it "check_pid_alive" do
|
13
|
-
Eye::System.check_pid_alive($$).should == {:result => true}
|
14
|
-
Eye::System.check_pid_alive(123456)[:error].class.should == Errno::ESRCH
|
15
|
-
Eye::System.check_pid_alive(-122)[:error].should be
|
16
|
-
Eye::System.check_pid_alive(nil).should == {:result => false}
|
17
|
-
end
|
18
|
-
|
19
|
-
it "ps_aux" do
|
20
|
-
h = Eye::System.ps_aux
|
21
|
-
h.size.should > 10
|
22
|
-
x = h[$$]
|
23
|
-
x.should be
|
24
|
-
x.is_a?(Hash).should be_true
|
25
|
-
x[:ppid].should > 1 # parent pid
|
26
|
-
x[:cpu].should >= 0 # proc
|
27
|
-
x[:rss].should > 1000 # memory
|
28
|
-
x[:start_time].length.should >= 4
|
29
|
-
end
|
30
|
-
|
31
|
-
it "prepare env" do
|
32
|
-
Eye::System.send(:prepare_env, {}).should include({})
|
33
|
-
Eye::System.send(:prepare_env, {:environment => {'A' => 'B'}}).should include({'A' => 'B'})
|
34
|
-
Eye::System.send(:prepare_env, {:environment => {'A' => 'B'}, :working_dir => "/tmp"}).should include({'A' => 'B', 'PWD' => '/tmp'})
|
35
|
-
|
36
|
-
r = Eye::System.send(:prepare_env, {:environment => {'A' => [], 'B' => {}, 'C' => nil, 'D' => 1, 'E' => '2'}})
|
37
|
-
r['A'].should == '[]'
|
38
|
-
r['B'].should == '{}'
|
39
|
-
r['C'].should == nil
|
40
|
-
r['D'].should == '1'
|
41
|
-
r['E'].should == '2'
|
42
|
-
end
|
43
|
-
|
44
|
-
describe "daemonize" do
|
45
|
-
it "daemonize default" do
|
46
|
-
@pid = Eye::System.daemonize("ruby sample.rb", {:environment => {"ENV1" => "SECRET1", 'BLA' => {}},
|
47
|
-
:working_dir => C.p1[:working_dir], :stdout => @log})[:pid]
|
48
|
-
|
49
|
-
@pid.should > 0
|
50
|
-
|
51
|
-
# process should be alive
|
52
|
-
Eye::System.pid_alive?(@pid).should == true
|
53
|
-
|
54
|
-
sleep 4
|
55
|
-
|
56
|
-
# should capture log
|
57
|
-
data = File.read(@log)
|
58
|
-
data.should include("SECRET1")
|
59
|
-
data.should include("- tick")
|
60
|
-
end
|
61
|
-
|
62
|
-
it "daemonize empty" do
|
63
|
-
@pid = Eye::System.daemonize("ruby sample.rb", {:working_dir => C.p1[:working_dir]})[:pid]
|
64
|
-
|
65
|
-
# process should be alive
|
66
|
-
Eye::System.pid_alive?(@pid).should == true
|
67
|
-
end
|
68
|
-
|
69
|
-
it "daemonize empty" do
|
70
|
-
@pid = Eye::System.daemonize("echo 'some'", {:stdout => @log})[:pid]
|
71
|
-
|
72
|
-
sleep 0.3
|
73
|
-
|
74
|
-
data = File.read(@log)
|
75
|
-
data.should == "some\n"
|
76
|
-
end
|
77
|
-
|
78
|
-
it "should add LANG env varible" do
|
79
|
-
mock(Process).spawn({"BLA"=>"1", "LANG"=>ENV_LANG}, 'echo', 'some', anything)
|
80
|
-
stub(Process).detach
|
81
|
-
|
82
|
-
@pid = Eye::System.daemonize("echo 'some'", {:stdout => @log, :environment => {"BLA" => "1"}})[:pid]
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
describe "execute" do
|
87
|
-
it "sleep and exit" do
|
88
|
-
should_spend(1, 0.2) do
|
89
|
-
Eye::System.execute("sleep 1")
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
describe "send signal" do
|
95
|
-
it "send_signal to spec" do
|
96
|
-
Eye::System.send_signal($$, 0)[:result].should == :ok
|
97
|
-
end
|
98
|
-
|
99
|
-
it "send_signal to unexisted process" do
|
100
|
-
res = Eye::System.send_signal(-12234)
|
101
|
-
res[:status].should == nil
|
102
|
-
res[:error].message.should include("No such process")
|
103
|
-
end
|
104
|
-
|
105
|
-
it "send_signal to daemon" do
|
106
|
-
@pid = Eye::System.daemonize("ruby sample.rb", {:working_dir => C.p1[:working_dir]})[:pid]
|
107
|
-
|
108
|
-
# process should be alive
|
109
|
-
Eye::System.pid_alive?(@pid).should == true
|
110
|
-
|
111
|
-
Eye::System.send_signal(@pid, :term)[:result].should == :ok
|
112
|
-
sleep 0.2
|
113
|
-
|
114
|
-
Eye::System.pid_alive?(@pid).should == false
|
115
|
-
end
|
116
|
-
|
117
|
-
it "catch signal in fork" do
|
118
|
-
@pid = Eye::System.daemonize("ruby sample.rb", {:working_dir => C.p1[:working_dir],
|
119
|
-
:stdout => @log})[:pid]
|
120
|
-
|
121
|
-
sleep 4
|
122
|
-
|
123
|
-
Eye::System.send_signal(@pid, :usr1)[:result].should == :ok
|
124
|
-
|
125
|
-
sleep 0.5
|
126
|
-
|
127
|
-
data = File.read(@log)
|
128
|
-
data.should include("USR1 sig")
|
129
|
-
end
|
130
|
-
|
131
|
-
it "signals transformation" do
|
132
|
-
mock(Process).kill('USR1', 123)
|
133
|
-
Eye::System.send_signal(123, :usr1)
|
134
|
-
|
135
|
-
mock(Process).kill('KILL', 123)
|
136
|
-
Eye::System.send_signal(123, :KILL)
|
137
|
-
|
138
|
-
mock(Process).kill('USR1', 123)
|
139
|
-
Eye::System.send_signal(123, 'usr1')
|
140
|
-
|
141
|
-
mock(Process).kill('KILL', 123)
|
142
|
-
Eye::System.send_signal(123, 'KILL')
|
143
|
-
|
144
|
-
mock(Process).kill(9, 123)
|
145
|
-
Eye::System.send_signal(123, 9)
|
146
|
-
|
147
|
-
mock(Process).kill(9, 123)
|
148
|
-
Eye::System.send_signal(123, '9')
|
149
|
-
|
150
|
-
mock(Process).kill(9, 123)
|
151
|
-
Eye::System.send_signal(123, '-9')
|
152
|
-
|
153
|
-
mock(Process).kill(9, 123)
|
154
|
-
Eye::System.send_signal(123, -9)
|
155
|
-
|
156
|
-
mock(Process).kill(0, 123)
|
157
|
-
Eye::System.send_signal(123, '0')
|
158
|
-
end
|
159
|
-
end
|
160
|
-
|
161
|
-
it "normalized_file" do
|
162
|
-
Eye::System.normalized_file("/tmp/1.rb").should == "/tmp/1.rb"
|
163
|
-
Eye::System.normalized_file("/tmp/1.rb", '/usr').should == "/tmp/1.rb"
|
164
|
-
|
165
|
-
Eye::System.normalized_file("tmp/1.rb").should == Dir.getwd + "/tmp/1.rb"
|
166
|
-
Eye::System.normalized_file("tmp/1.rb", '/usr').should == "/usr/tmp/1.rb"
|
167
|
-
|
168
|
-
Eye::System.normalized_file("./tmp/1.rb").should == Dir.getwd + "/tmp/1.rb"
|
169
|
-
Eye::System.normalized_file("./tmp/1.rb", '/usr/').should == "/usr/tmp/1.rb"
|
170
|
-
|
171
|
-
Eye::System.normalized_file("../tmp/1.rb", '/usr/').should == "/tmp/1.rb"
|
172
|
-
end
|
173
|
-
|
174
|
-
end
|