file_monitoring 1.0.2 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,6 +1,6 @@
1
1
  require 'algorithms'
2
2
  require 'fileutils'
3
- require 'log'
3
+ require 'log4r'
4
4
  require 'params'
5
5
 
6
6
  require 'file_monitoring/monitor_path'
@@ -41,13 +41,26 @@ module FileMonitoring
41
41
  pq.push([priority, elem, dir_stat], -priority)
42
42
  }
43
43
 
44
- log_path = Params['default_monitoring_log_path']
44
+ #init log4r
45
+ monitoring_log_path = Params['default_monitoring_log_path']
46
+ Log.debug1 'File monitoring log: ' + Params['default_monitoring_log_path']
47
+ monitoring_log_dir = File.dirname(monitoring_log_path)
48
+ FileUtils.mkdir_p(monitoring_log_dir) unless File.exists?(monitoring_log_dir)
45
49
 
46
- Log.debug1 'File monitoring log: ' + log_path
47
- log_dir = File.dirname(log_path)
48
- FileUtils.mkdir_p(log_dir) unless File.exists?(log_dir)
49
- log = File.open(log_path, 'w')
50
- FileStat.set_log(log)
50
+ @log4r = Log4r::Logger.new 'BBFS monitoring log'
51
+ @log4r.trace = true
52
+ formatter = Log4r::PatternFormatter.new(:pattern => "[%d] [%m]")
53
+ #file setup
54
+ file_config = {
55
+ "filename" => Params['default_monitoring_log_path'],
56
+ "maxsize" => Params['log_rotation_size'],
57
+ "trunc" => true
58
+ }
59
+ file_outputter = Log4r::RollingFileOutputter.new("monitor_log", file_config)
60
+ file_outputter.level = Log4r::INFO
61
+ file_outputter.formatter = formatter
62
+ @log4r.outputters << file_outputter
63
+ FileStat.set_log(@log4r)
51
64
 
52
65
  while true do
53
66
  # pull entry that should be checked next,
@@ -32,6 +32,11 @@ module FileMonitoring
32
32
  # * <tt>path</tt> - File location
33
33
  # * <tt>stable_state</tt> - Number of iterations to move unchanged file to stable state
34
34
  def initialize(path, stable_state = DEFAULT_STABLE_STATE)
35
+ ObjectSpace.define_finalizer(self,
36
+ self.class.method(:finalize).to_proc)
37
+ if Params['enable_monitoring']
38
+ Params['process_vars'].inc('obj add FileStat')
39
+ end
35
40
  @path ||= path
36
41
  @size = nil
37
42
  @creation_time = nil
@@ -42,6 +47,12 @@ module FileMonitoring
42
47
  @stable_state = stable_state # number of iteration to move unchanged file to stable state
43
48
  end
44
49
 
50
+ def self.finalize(id)
51
+ if Params['enable_monitoring']
52
+ Params['process_vars'].inc('obj rem FileStat')
53
+ end
54
+ end
55
+
45
56
  def set_output_queue(event_queue)
46
57
  @event_queue = event_queue
47
58
  end
@@ -105,8 +116,8 @@ module FileMonitoring
105
116
  if (@state != new_state or @state == FileStatEnum::CHANGED)
106
117
  @state = new_state
107
118
  if (@@log)
108
- @@log.puts(cur_stat)
109
- @@log.flush #Ruby1.9.3: note that this is Ruby internal buffering only; the OS may buffer the data as well
119
+ @@log.info(state + ": " + path)
120
+ @@log.outputters[0].flush if Params['log_flush_each_message']
110
121
  end
111
122
  if (!@event_queue.nil?)
112
123
  Log.debug1 "Writing to event queue [#{self.state}, #{self.path}]"
@@ -124,13 +135,6 @@ module FileMonitoring
124
135
  def to_s (indent = 0)
125
136
  (" " * indent) + path.to_s + " : " + state.to_s
126
137
  end
127
-
128
- # Reports current state with identification.
129
- # NOTE This format used by log file.
130
- def cur_stat
131
- # TODO what output format have to be ?
132
- Time.now.utc.to_s + " : " + self.state + " : " + self.path
133
- end
134
138
  end
135
139
 
136
140
  # This class holds current state of directory and methods to control changes
@@ -141,10 +145,23 @@ module FileMonitoring
141
145
  # * <tt>path</tt> - File location
142
146
  # * <tt>stable_state</tt> - Number of iterations to move unchanged directory to stable state
143
147
  def initialize(path, stable_state = DEFAULT_STABLE_STATE)
148
+ ObjectSpace.define_finalizer(self,
149
+ self.class.method(:finalize).to_proc)
150
+ if Params['enable_monitoring']
151
+ Params['process_vars'].inc('obj add DirStat')
152
+ end
144
153
  super
145
154
  @dirs = nil
146
155
  @files = nil
147
156
  @non_utf8_paths = {}
157
+ ObjectSpace.define_finalizer(self,
158
+ self.class.method(:finalize).to_proc)
159
+ end
160
+
161
+ def self.finalize(id)
162
+ if Params['enable_monitoring']
163
+ Params['process_vars'].inc('obj rem DirStat')
164
+ end
148
165
  end
149
166
 
150
167
  # Adds directory for monitoring.
@@ -183,10 +200,10 @@ module FileMonitoring
183
200
  child_indent = indent + indent_increment
184
201
  res = super
185
202
  @files.each_value do |file|
186
- res += "\n" + file.to_s(child_ident)
203
+ res += "\n" + file.to_s(child_indent)
187
204
  end if @files
188
205
  @dirs.each_value do |dir|
189
- res += "\n" + dir.to_s(child_ident)
206
+ res += "\n" + dir.to_s(child_indent)
190
207
  end if @dirs
191
208
  res
192
209
  end
@@ -1,3 +1,3 @@
1
1
  module FileMonitoring
2
- VERSION = "1.0.2"
2
+ VERSION = "1.0.3"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: file_monitoring
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -44,7 +44,7 @@ dependencies:
44
44
  - !ruby/object:Gem::Version
45
45
  version: '0'
46
46
  - !ruby/object:Gem::Dependency
47
- name: log
47
+ name: log4r
48
48
  requirement: !ruby/object:Gem::Requirement
49
49
  none: false
50
50
  requirements: