Class: God::Conditions::MemoryUsage
- Inherits:
-
PollCondition
- Object
- Behavior
- God::Condition
- PollCondition
- God::Conditions::MemoryUsage
- Defined in:
- lib/god/conditions/memory_usage.rb
Overview
Condition Symbol :memory_usage Type: Poll
Trigger when the resident memory of a process is above a specified limit.
Paramaters
Required
pid_file is the pid file of the process in question. Automatically
populated for Watches.
above is the amount of resident memory (in kilobytes) above which
the condition should trigger. You can also use the sugar
methods #kilobytes, #megabytes, and #gigabytes to clarify
this amount (see examples).
Examples
Trigger if the process is using more than 100 megabytes of resident memory (from a Watch):
on.condition(:memory_usage) do |c|
c.above = 100.megabytes
end
Non-Watch Tasks must specify a PID file:
on.condition(:memory_usage) do |c|
c.above = 100.megabytes
c.pid_file = "/var/run/mongrel.3000.pid"
end
Instance Attribute Summary collapse
-
#above ⇒ Object
Returns the value of attribute above.
-
#pid_file ⇒ Object
Returns the value of attribute pid_file.
-
#times ⇒ Object
Returns the value of attribute times.
Attributes inherited from PollCondition
Attributes inherited from God::Condition
#info, #notify, #phase, #transition
Attributes inherited from Behavior
Instance Method Summary collapse
-
#initialize ⇒ MemoryUsage
constructor
A new instance of MemoryUsage.
- #pid ⇒ Object
- #prepare ⇒ Object
- #reset ⇒ Object
- #test ⇒ Object
- #valid? ⇒ Boolean
Methods inherited from PollCondition
Methods inherited from God::Condition
#friendly_name, generate, valid?
Methods inherited from Behavior
#after_restart, #after_start, #after_stop, #before_restart, #before_start, #before_stop, #friendly_name, generate
Methods included from God::Configurable
#base_name, complain, #complain, #friendly_name
Constructor Details
#initialize ⇒ MemoryUsage
Returns a new instance of MemoryUsage.
36 37 38 39 40 |
# File 'lib/god/conditions/memory_usage.rb', line 36 def initialize super self.above = nil self.times = [1, 1] end |
Instance Attribute Details
#above ⇒ Object
Returns the value of attribute above.
34 35 36 |
# File 'lib/god/conditions/memory_usage.rb', line 34 def above @above end |
#pid_file ⇒ Object
Returns the value of attribute pid_file.
34 35 36 |
# File 'lib/god/conditions/memory_usage.rb', line 34 def pid_file @pid_file end |
#times ⇒ Object
Returns the value of attribute times.
34 35 36 |
# File 'lib/god/conditions/memory_usage.rb', line 34 def times @times end |
Instance Method Details
#pid ⇒ Object
54 55 56 |
# File 'lib/god/conditions/memory_usage.rb', line 54 def pid self.pid_file ? File.read(self.pid_file).strip.to_i : self.watch.pid end |
#prepare ⇒ Object
42 43 44 45 46 47 48 |
# File 'lib/god/conditions/memory_usage.rb', line 42 def prepare if self.times.kind_of?(Integer) self.times = [self.times, self.times] end @timeline = Timeline.new(self.times[1]) end |
#reset ⇒ Object
50 51 52 |
# File 'lib/god/conditions/memory_usage.rb', line 50 def reset @timeline.clear end |
#test ⇒ Object
65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/god/conditions/memory_usage.rb', line 65 def test process = System::Process.new(self.pid) @timeline.push(process.memory) history = "[" + @timeline.map { |x| "#{x > self.above ? '*' : ''}#{x}kb" }.join(", ") + "]" if @timeline.select { |x| x > self.above }.size >= self.times.first self.info = "memory out of bounds #{history}" return true else self.info = "memory within bounds #{history}" return false end end |
#valid? ⇒ Boolean
58 59 60 61 62 63 |
# File 'lib/god/conditions/memory_usage.rb', line 58 def valid? valid = true valid &= complain("Attribute 'pid_file' must be specified", self) if self.pid_file.nil? && self.watch.pid_file.nil? valid &= complain("Attribute 'above' must be specified", self) if self.above.nil? valid end |