22
33/*
44 * Copyright 2015 Didier Fetter
5- * Copyright 2017 Alberto González Palomo https://sentido-labs.com
65 *
76 * Licensed under the Apache License, Version 2.0 (the "License");
87 * you may not use this file except in compliance with the License.
@@ -60,7 +59,7 @@ public void initialize() throws IOException {
6059 oldWatchMap .put (state .getFile (), state );
6160 }
6261 }
63- synchronized ( newWatchMap ) { processModifications (); }
62+ processModifications ();
6463 if (tail ) {
6564 for (FileState state : oldWatchMap .values ()) {
6665 if (state .getPointer () == 0 ) {
@@ -91,7 +90,7 @@ public void checkFiles() throws IOException {
9190 for (FileAlterationObserver observer : observerList ) {
9291 observer .checkAndNotify ();
9392 }
94- synchronized ( newWatchMap ) { processModifications (); }
93+ processModifications ();
9594 printWatchMap ();
9695 }
9796
@@ -224,33 +223,12 @@ private void processModifications() throws IOException {
224223 removeMarkedFilesFromWatchMap ();
225224 }
226225
227- // This filter will accept anything that is not a directory,
228- // including named pipes (FIFOs), sockets and device files.
229- // The standard org.apache.commons.io.filefilter.FileFileFilter excludes
230- // them even if their documentation says
231- // "This filter accepts Files that are files (not directories)."
232- protected class FileFileFilter implements IOFileFilter
233- {
234- @ Override
235- public boolean accept (File file ) {
236- return !file .isDirectory ();
237- }
238-
239- @ Override
240- public boolean accept (File dir , String name ) {
241- return accept (new File (dir , name ));
242- }
243- }
244- protected IOFileFilter fileFileFilter () {
245- return new FileFileFilter ();
246- }
247-
248226 private void addSingleFile (String fileToWatch , Event fields , long deadTime , Multiline multiline , Filter filter ) throws Exception {
249227 logger .info ("Watching file : " + new File (fileToWatch ).getCanonicalPath ());
250228 String directory = FilenameUtils .getFullPath (fileToWatch );
251229 String fileName = FilenameUtils .getName (fileToWatch );
252230 IOFileFilter fileFilter = FileFilterUtils .and (
253- fileFileFilter (),
231+ FileFilterUtils . fileFileFilter (),
254232 FileFilterUtils .nameFileFilter (fileName ),
255233 new LastModifiedFileFilter (deadTime ));
256234 initializeWatchMap (new File (directory ), fileFilter , fields , multiline , filter );
@@ -262,7 +240,7 @@ private void addWildCardFiles(String filesToWatch, Event fields, long deadTime,
262240 String wildcard = FilenameUtils .getName (filesToWatch );
263241 logger .trace ("Directory : " + new File (directory ).getCanonicalPath () + ", wildcard : " + wildcard );
264242 IOFileFilter fileFilter = FileFilterUtils .and (
265- fileFileFilter (),
243+ FileFilterUtils . fileFileFilter (),
266244 new WildcardFileFilter (wildcard ),
267245 new LastModifiedFileFilter (deadTime ));
268246 initializeWatchMap (new File (directory ), fileFilter , fields , multiline , filter );
@@ -289,50 +267,22 @@ private void initializeWatchMap(File directory, IOFileFilter fileFilter, Event f
289267 }
290268 }
291269
292- // This class will wait until the file is open, which happens in
293- // new FileState(file).
294- // Normal files open immediately, but named pipes block until data
295- // is written in them.
296- protected class FileAdderThread extends Thread
297- {
298- Map <File ,FileState > map ;
299- File file ;
300- Event fields ;
301- Multiline multiline ;
302- Filter filter ;
303-
304- private FileAdderThread () {}
305- public FileAdderThread (Map <File ,FileState > map , File file , Event fields , Multiline multiline , Filter filter ) {
306- this .map = map ;
307- this .file = file ;
308- this .fields = fields ;
309- this .multiline = multiline ;
310- this .filter = filter ;
311- }
312-
313- public void run () {
314- try {
315- FileState state = new FileState (file );
316- state .setFields (fields );
317- int signatureLength = (int ) (state .getSize () > maxSignatureLength ? maxSignatureLength : state .getSize ());
318- state .setSignatureLength (signatureLength );
319- long signature = FileSigner .computeSignature (state .getRandomAccessFile (), signatureLength );
320- state .setSignature (signature );
321- logger .trace ("Setting signature of size : " + signatureLength + " on file : " + file + " : " + signature );
322- state .setMultiline (multiline );
323- state .setFilter (filter );
324- synchronized (map /* This is actually newWatchMap. */ ) {
325- map .put (file , state );
326- }
327- } catch (IOException e ) {
328- logger .error ("Caught IOException in addFileToWatchMap : " +
329- e .getMessage ());
330- }
331- }
332- }
333-
334270 private void addFileToWatchMap (Map <File ,FileState > map , File file , Event fields , Multiline multiline , Filter filter ) {
335- (new FileAdderThread (map , file , fields , multiline , filter )).start ();
271+ try {
272+ FileState state = new FileState (file );
273+ state .setFields (fields );
274+ int signatureLength = (int ) (state .getSize () > maxSignatureLength ? maxSignatureLength : state .getSize ());
275+ state .setSignatureLength (signatureLength );
276+ long signature = FileSigner .computeSignature (state .getRandomAccessFile (), signatureLength );
277+ state .setSignature (signature );
278+ logger .trace ("Setting signature of size : " + signatureLength + " on file : " + file + " : " + signature );
279+ state .setMultiline (multiline );
280+ state .setFilter (filter );
281+ map .put (file , state );
282+ } catch (IOException e ) {
283+ logger .error ("Caught IOException in addFileToWatchMap : " +
284+ e .getMessage ());
285+ }
336286 }
337287
338288 public void onFileChange (File file , Event fields , Multiline multiline , Filter filter ) {
0 commit comments