Beefy Boxes and Bandwidth Generously Provided by pair Networks
good chemistry is complicated,
and a little bit messy -LW
 
PerlMonks  

Re^3: the sands of time(in search of an optimisation)

by clinton (Priest)
on Mar 04, 2008 at 14:24 UTC ( #671882=note: print w/ replies, xml ) Need Help??


in reply to Re^2: the sands of time(in search of an optimisation)
in thread the sands of time(in search of an optimisation)

If you're on Linux, you probably want to look at Linux::Inotify or Linux::Inotify2, which provide similar functionality


Comment on Re^3: the sands of time(in search of an optimisation)
Replies are listed 'Best First'.
Re^4: the sands of time(in search of an optimisation)
by spx2 (Chaplain) on Mar 09, 2008 at 17:54 UTC
    thank you very much for your suggestion.
    yours and Browser_Uk were the same ideas actually
    so I have documented myself a bit and written a daemon
    which is sitting and monitoring for changes in files.
    the following is what I cam up with(teste and works excellent):
    #!/usr/bin/perl #this lightweight daemon will run in the background and #for each new file that is modified and closed it will re-hash it and +update #its entry in the database use strict; use warnings; # #bugs encountered: # #1)does not update as expected in database the new sha1 #2)$mtime seems to be very VERY different from DateTime->now which is +weird #3)bug found in SHA1db find_or_update not finding correctly if there a +re any files in the db with #that name # # use Linux::Inotify2; use Data::Dumper; use DateTime; use SHA1db; use YAML qw/LoadFile/; $|=1; SHA1db->connect(); my $inotify = new Linux::Inotify2(); my $config_path = 'config.yml'; my $config = LoadFile($config_path); for (map {$_->{path}} @{ $config->{directories} }) { print "tracking $_\n"; $inotify->watch($_, IN_ALL_EVENTS); } while () { my @events = $inotify->read; unless (@events > 0) { print "read error: $!"; last ; }; for(@events) { next unless($_->mask & IN_CLOSE_WRITE); my $mtime =( lstat($_->fullname) )[9]; next unless $mtime; printf "updating checksum_db for file %s modified now: %s\n",$ +_->fullname,DateTime->from_epoch(epoch=>$mtime); #we should add a check to see if this file passes the regex #filter & link filter & dir filter & size filter unless(SHA1db::find_or_update($_->fullname,$mtime)) { printf "not found in db,adding...\n"; SHA1db::add_to_db(SHA1db::file2sha1($_->fullname),$mtime,- +s _ ,$_->fullname); #add it to db }; }; }; print "daemon stopped";

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://671882]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others cooling their heels in the Monastery: (18)
As of 2015-07-31 20:53 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (282 votes), past polls