Module: Nagios::TimedParse
Overview
Keep track of last parsed time and last changed time of the status/cache file to avoid parsing on each HTTP request.
Constant Summary
- TTL =
Set some minimum interval for re-parsing of the status file: even if file changes often, we do not want to parse it more often, then this number of seconds.
::DEFAULT[:ttl] || 0
Instance Attribute Summary (collapse)
-
- (Object) last_parsed
Returns the value of attribute last_parsed.
-
- (Object) parse_interval
Returns the value of attribute parse_interval.
Class Method Summary (collapse)
-
+ (Object) included(base)
Override constructor and parse method from ::Nagios::Objects or ::Nagios::Status classes, add instance variables to handle modification and parseing times of status file.
Instance Method Summary (collapse)
-
- (Boolean) changed?
Return true if file is changed since it was parsed last time.
- - (Object) last_changed
-
- (Boolean) need_parsing?
Check if:
-
file changed?
-
was it parsed recently?.
-
Instance Attribute Details
- (Object) last_parsed
Returns the value of attribute last_parsed
58 59 60 |
# File 'lib/nagira/timed_parse.rb', line 58 def last_parsed @last_parsed end |
- (Object) parse_interval
Returns the value of attribute parse_interval
58 59 60 |
# File 'lib/nagira/timed_parse.rb', line 58 def parse_interval @parse_interval end |
Class Method Details
+ (Object) included(base)
Override constructor and parse method from ::Nagios::Objects or ::Nagios::Status classes, add instance variables to handle modification and parseing times of status file. Original methods are aliased:
-
initialize -> constructor
-
parse -> parse!
See also www.ruby-forum.com/topic/969161
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/nagira/timed_parse.rb', line 22 def self.included(base) base.class_eval do alias_method :parse!, :parse alias_method :constructor, :initialize # @method initialize # Extend current constructor with some additional data to # track file change time # # @param [String] file Path to status file # @param [Fixnum] parse_interval Number of seconds between # re-parsing of the file def initialize(file, parse_interval=TTL) constructor(file) # Time when status file was last time parsed, set it to 0 secs # epoch to make sure it will be parsed @last_parsed = Time.at(0) # Last time file was changed @last_changed = File.mtime(@path) @parse_interval = parse_interval end # Extend original parse method: parse file only if it needs # parsing and set time of parser run to current time. def parse if need_parsing? parse! @last_parsed = Time.now end end end end |
Instance Method Details
- (Boolean) changed?
Return true if file is changed since it was parsed last time
65 66 67 |
# File 'lib/nagira/timed_parse.rb', line 65 def changed? self.last_changed > self.last_parsed end |
- (Object) last_changed
60 61 62 |
# File 'lib/nagira/timed_parse.rb', line 60 def last_changed @last_changed = File.mtime(@path) end |
- (Boolean) need_parsing?
Check if:
-
file changed?
-
was it parsed recently?
72 73 74 |
# File 'lib/nagira/timed_parse.rb', line 72 def need_parsing? changed? && ((Time.now - self.last_parsed) > @parse_interval) end |