Class: FileMonitoring::FileStat
- Inherits:
-
Object
- Object
- FileMonitoring::FileStat
- Defined in:
- lib/file_monitoring/monitor_path.rb
Overview
This class holds current state of file and methods to control and report changes
Direct Known Subclasses
Constant Summary collapse
- DEFAULT_STABLE_STATE =
10
- @@log =
nil
Instance Attribute Summary collapse
-
#cycles ⇒ Object
readonly
Returns the value of attribute cycles.
-
#modification_time ⇒ Object
readonly
Returns the value of attribute modification_time.
-
#path ⇒ Object
readonly
Returns the value of attribute path.
-
#size ⇒ Object
readonly
Returns the value of attribute size.
-
#stable_state ⇒ Object
readonly
Returns the value of attribute stable_state.
-
#state ⇒ Object
Returns the value of attribute state.
Class Method Summary collapse
- .finalize(id) ⇒ Object
-
.set_log(log) ⇒ Object
Sets a log file to report changes ==== Arguments:.
Instance Method Summary collapse
-
#==(other) ⇒ Object
Checks whether path and state are the same as of the argument.
-
#changed?(file_stats) ⇒ Boolean
Checks that stored file attributes are the same as file attributes taken from file system.
-
#initialize(path, stable_state = DEFAULT_STABLE_STATE) ⇒ FileStat
constructor
Initializes new file monitoring object ==== Arguments:.
-
#monitor ⇒ Object
Checks whether file was changed from the last iteration.
- #set_event_queue(queue) ⇒ Object
- #set_output_queue(event_queue) ⇒ Object
-
#to_s(indent = 0) ⇒ Object
Returns path and state of the file with indentation.
Constructor Details
#initialize(path, stable_state = DEFAULT_STABLE_STATE) ⇒ FileStat
Initializes new file monitoring object
Arguments:
-
path
- File location -
stable_state
- Number of iterations to move unchanged file to stable state
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/file_monitoring/monitor_path.rb', line 34 def initialize(path, stable_state = DEFAULT_STABLE_STATE) ObjectSpace.define_finalizer(self, self.class.method(:finalize).to_proc) if Params['enable_monitoring'] Params['process_vars'].inc('obj add FileStat') end @path ||= path @size = nil @creation_time = nil @modification_time = nil @cycles = 0 # number of iterations from the last file modification @state = FileStatEnum::NON_EXISTING @stable_state = stable_state # number of iteration to move unchanged file to stable state end |
Instance Attribute Details
#cycles ⇒ Object (readonly)
Returns the value of attribute cycles.
23 24 25 |
# File 'lib/file_monitoring/monitor_path.rb', line 23 def cycles @cycles end |
#modification_time ⇒ Object (readonly)
Returns the value of attribute modification_time.
23 24 25 |
# File 'lib/file_monitoring/monitor_path.rb', line 23 def modification_time @modification_time end |
#path ⇒ Object (readonly)
Returns the value of attribute path.
23 24 25 |
# File 'lib/file_monitoring/monitor_path.rb', line 23 def path @path end |
#size ⇒ Object (readonly)
Returns the value of attribute size.
23 24 25 |
# File 'lib/file_monitoring/monitor_path.rb', line 23 def size @size end |
#stable_state ⇒ Object (readonly)
Returns the value of attribute stable_state.
23 24 25 |
# File 'lib/file_monitoring/monitor_path.rb', line 23 def stable_state @stable_state end |
#state ⇒ Object
Returns the value of attribute state.
23 24 25 |
# File 'lib/file_monitoring/monitor_path.rb', line 23 def state @state end |
Class Method Details
.finalize(id) ⇒ Object
50 51 52 53 54 |
# File 'lib/file_monitoring/monitor_path.rb', line 50 def self.finalize(id) if Params['enable_monitoring'] Params['process_vars'].inc('obj rem FileStat') end end |
.set_log(log) ⇒ Object
Sets a log file to report changes
Arguments:
-
log
- already opened ruby File object
64 65 66 |
# File 'lib/file_monitoring/monitor_path.rb', line 64 def self.set_log (log) @@log = log end |
Instance Method Details
#==(other) ⇒ Object
Checks whether path and state are the same as of the argument
130 131 132 |
# File 'lib/file_monitoring/monitor_path.rb', line 130 def == (other) @path == other.path and @stable_state == other.stable_state end |
#changed?(file_stats) ⇒ Boolean
Checks that stored file attributes are the same as file attributes taken from file system.
104 105 106 107 108 |
# File 'lib/file_monitoring/monitor_path.rb', line 104 def changed?(file_stats) not (file_stats.size == @size && file_stats.ctime.utc == @creation_time.utc && file_stats.mtime.utc == @modification_time.utc) end |
#monitor ⇒ Object
Checks whether file was changed from the last iteration. For files, size and modification time are checked.
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
# File 'lib/file_monitoring/monitor_path.rb', line 70 def monitor file_stats = File.lstat(@path) rescue nil new_state = nil if file_stats == nil new_state = FileStatEnum::NON_EXISTING @size = nil @creation_time = nil @modification_time = nil @cycles = 0 elsif @size == nil new_state = FileStatEnum::NEW @size = file_stats.size @creation_time = file_stats.ctime.utc @modification_time = file_stats.mtime.utc @cycles = 0 elsif changed?(file_stats) new_state = FileStatEnum::CHANGED @size = file_stats.size @creation_time = file_stats.ctime.utc @modification_time = file_stats.mtime.utc @cycles = 0 else new_state = FileStatEnum::UNCHANGED @cycles += 1 if @cycles >= @stable_state new_state = FileStatEnum::STABLE end end # The assignment self.state= new_state end |
#set_event_queue(queue) ⇒ Object
110 111 112 |
# File 'lib/file_monitoring/monitor_path.rb', line 110 def set_event_queue(queue) @event_queue = queue end |
#set_output_queue(event_queue) ⇒ Object
56 57 58 |
# File 'lib/file_monitoring/monitor_path.rb', line 56 def set_output_queue(event_queue) @event_queue = event_queue end |
#to_s(indent = 0) ⇒ Object
Returns path and state of the file with indentation
135 136 137 |
# File 'lib/file_monitoring/monitor_path.rb', line 135 def to_s (indent = 0) (" " * indent) + path.to_s + " : " + state.to_s end |