Class: Eye::Checker
Defined Under Namespace
Classes: Cpu, Custom, CustomCell, CustomDefer, Defer, FileCTime, FileSize, Http, Memory, Nop, Socket
Constant Summary
collapse
- TYPES =
{:memory => "Memory", :cpu => "Cpu", :http => "Http",
:ctime => "FileCTime", :fsize => "FileSize", :socket => "Socket",
:nop => "Nop" }
Instance Attribute Summary collapse
#defaults, #should_bes, #validates, #variants
Class Method Summary
collapse
Instance Method Summary
collapse
inherited, param, validate
Constructor Details
#initialize(pid, options = {}, process = nil) ⇒ Checker
Returns a new instance of Checker.
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
# File 'lib/eye/checker.rb', line 52
def initialize(pid, options = {}, process = nil)
@process = process
@pid = pid
@options = options.dup
@type = options[:type]
@full_name = @process.full_name if @process
@initialized_at = Time.now
debug "create checker, with #{options}"
@value = nil
@values = Eye::Utils::Tail.new(max_tries)
@check_count = 0
end
|
Instance Attribute Details
#check_count ⇒ Object
Returns the value of attribute check_count.
15
16
17
|
# File 'lib/eye/checker.rb', line 15
def check_count
@check_count
end
|
#options ⇒ Object
Returns the value of attribute options.
15
16
17
|
# File 'lib/eye/checker.rb', line 15
def options
@options
end
|
#pid ⇒ Object
Returns the value of attribute pid.
15
16
17
|
# File 'lib/eye/checker.rb', line 15
def pid
@pid
end
|
#process ⇒ Object
Returns the value of attribute process.
15
16
17
|
# File 'lib/eye/checker.rb', line 15
def process
@process
end
|
#type ⇒ Object
Returns the value of attribute type.
15
16
17
|
# File 'lib/eye/checker.rb', line 15
def type
@type
end
|
#value ⇒ Object
Returns the value of attribute value.
15
16
17
|
# File 'lib/eye/checker.rb', line 15
def value
@value
end
|
#values ⇒ Object
Returns the value of attribute values.
15
16
17
|
# File 'lib/eye/checker.rb', line 15
def values
@values
end
|
Class Method Details
.create(pid, options = {}, process = nil) ⇒ Object
40
41
42
43
44
45
46
|
# File 'lib/eye/checker.rb', line 40
def self.create(pid, options = {}, process = nil)
get_class(options[:type]).new(pid, options, process)
rescue Exception, Timeout::Error => ex
log_ex(ex)
nil
end
|
.get_class(type) ⇒ Object
34
35
36
37
38
|
# File 'lib/eye/checker.rb', line 34
def self.get_class(type)
klass = eval("Eye::Checker::#{TYPES[type]}") rescue nil
raise "Unknown checker #{type}" unless klass
klass
end
|
.name_and_class(type) ⇒ Object
24
25
26
27
28
29
30
31
32
|
# File 'lib/eye/checker.rb', line 24
def self.name_and_class(type)
type = type.to_sym
return {:name => type, :type => type} if TYPES[type]
if type =~ /\A(.*?)_?[0-9]+\z/
ctype = $1.to_sym
return {:name => type, :type => ctype} if TYPES[ctype]
end
end
|
.register(base) ⇒ Object
187
188
189
190
191
192
|
# File 'lib/eye/checker.rb', line 187
def self.register(base)
name = base.to_s.gsub("Eye::Checker::", '')
type = name.underscore.to_sym
Eye::Checker::TYPES[type] = name
Eye::Checker.const_set(name, base)
end
|
.validate!(options) ⇒ Object
48
49
50
|
# File 'lib/eye/checker.rb', line 48
def self.validate!(options)
get_class(options[:type]).validate(options)
end
|
Instance Method Details
#check ⇒ Object
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
# File 'lib/eye/checker.rb', line 88
def check
if initial_grace && (Time.now - @initialized_at < initial_grace)
debug 'skipped initial grace'
return true
else
@options[:initial_grace] = nil
end
@value = get_value_safe
@good_value = good?(value)
@values << {:value => @value, :good => @good_value}
result = true
@check_count += 1
if @values.size == max_tries
bad_count = @values.count{|v| !v[:good] }
result = false if bad_count >= min_tries
end
if skip_initial_fails
if @good_value
@options[:skip_initial_fails] = nil
else
result = true
end
end
info "#{last_human_values} => #{result ? 'OK' : 'Fail'}"
result
rescue Exception, Timeout::Error => ex
log_ex(ex)
end
|
#check_name ⇒ Object
141
142
143
|
# File 'lib/eye/checker.rb', line 141
def check_name
@check_name ||= @type.to_s
end
|
#defer(&block) ⇒ Object
177
178
179
|
# File 'lib/eye/checker.rb', line 177
def defer(&block)
Celluloid::Future.new(&block).value
end
|
#get_value ⇒ Object
127
128
129
|
# File 'lib/eye/checker.rb', line 127
def get_value
raise 'Realize me'
end
|
#get_value_safe ⇒ Object
123
124
125
|
# File 'lib/eye/checker.rb', line 123
def get_value_safe
get_value
end
|
#good?(value) ⇒ Boolean
true if check ok false if check bad
137
138
139
|
# File 'lib/eye/checker.rb', line 137
def good?(value)
value
end
|
#human_value(value) ⇒ Object
131
132
133
|
# File 'lib/eye/checker.rb', line 131
def human_value(value)
value.to_s
end
|
#inspect ⇒ Object
67
68
69
|
# File 'lib/eye/checker.rb', line 67
def inspect
"<#{self.class} @process='#{@full_name}' @options=#{@options} @pid=#{@pid}>"
end
|
#last_human_values ⇒ Object
79
80
81
82
83
84
85
86
|
# File 'lib/eye/checker.rb', line 79
def last_human_values
h_values = @values.map do |v|
sign = v[:good] ? '' : '*'
sign + human_value(v[:value]).to_s
end
'[' + h_values * ', ' + ']'
end
|
#logger_sub_tag ⇒ Object
75
76
77
|
# File 'lib/eye/checker.rb', line 75
def logger_sub_tag
"check:#{check_name}"
end
|
#logger_tag ⇒ Object
71
72
73
|
# File 'lib/eye/checker.rb', line 71
def logger_tag
@process.logger.prefix
end
|
#max_tries ⇒ Object
145
146
147
148
149
150
151
152
153
154
155
|
# File 'lib/eye/checker.rb', line 145
def max_tries
@max_tries ||= if times
if times.is_a?(Array)
times[-1].to_i
else
times.to_i
end
else
1
end
end
|
#min_tries ⇒ Object
157
158
159
160
161
162
163
164
165
166
167
|
# File 'lib/eye/checker.rb', line 157
def min_tries
@min_tries ||= if times
if times.is_a?(Array)
times[0].to_i
else
max_tries
end
else
max_tries
end
end
|
#previous_value ⇒ Object
169
170
171
|
# File 'lib/eye/checker.rb', line 169
def previous_value
@values[-1][:value] if @values.present?
end
|
#run_in_process_context(p) ⇒ Object
173
174
175
|
# File 'lib/eye/checker.rb', line 173
def run_in_process_context(p)
process.instance_exec(&p) if process.alive?
end
|