Page 1 of 1

zmaudit.pl Too early removal ?

Posted: Thu Nov 15, 2007 7:49 pm
by kamand
Hi
It seems that zmaduit delete new events which was not in database when zmaudit started.
I found this for zm 1.22.2, but this piece of code did not changed in 1.223 and 1.23.RC2.

Partial log file:

Code: Select all

Nov 15 18:48:48 vdrsf zma_m6[7064]: INF [C-06: 23218 - Gone into alarm state]
Nov 15 18:48:49 vdrsf zma_m7[7072]: INF [C-07: 23225 - Gone into alarm state]

Nov 15 18:48:51 vdrsf zmaudit[7086]: INF [Filesystem event '6/707264' does not exist in database]
Nov 15 18:48:51 vdrsf zmaudit[7086]: INF [deleting]
Nov 15 18:48:51 vdrsf zma_m6[7064]: ERR [Can't open events/6/707264/00026-capture.jpg: No such file or directory]
Nov 15 18:48:51 vdrsf zmaudit[7086]: INF [Filesystem event '7/707265' does not exist in database]
Nov 15 18:48:51 vdrsf zmaudit[7086]: INF [deleting]
Nov 15 18:48:52 vdrsf zma_m7[7072]: ERR [Can't open events/7/707265/00023-capture.jpg: No such file or directory]
Nov 15 18:48:52 vdrsf zma_m6[7064]: ERR [Can't open events/6/707264/00027-capture.jpg: No such file or directory]
Nov 15 18:48:52 vdrsf zma_m7[7072]: ERR [Can't open events/7/707265/00024-capture.jpg: No such file or directory]
Nov 15 18:48:52 vdrsf zma_m6[7064]: ERR [Can't open events/6/707264/00028-capture.jpg: No such file or directory]
Nov 15 18:48:52 vdrsf zma_m7[7072]: ERR [Can't open events/7/707265/00025-capture.jpg: No such file or directory]
Nov 15 18:48:52 vdrsf zma_m6[7064]: ERR [Can't open events/6/707264/00029-capture.jpg: No such file or directory]
Nov 15 18:48:52 vdrsf zma_m7[7072]: ERR [Can't open events/7/707265/00026-capture.jpg: No such file or directory]
Nov 15 18:48:52 vdrsf zma_m6[7064]: ERR [Can't open events/6/707264/00030-capture.jpg: No such file or directory]
Nov 15 18:48:52 vdrsf zma_m7[7072]: ERR [Can't open events/7/707265/00027-capture.jpg: No such file or directory]
Nov 15 18:48:53 vdrsf zma_m6[7064]: ERR [Can't open events/6/707264/00031-capture.jpg: No such file or directory]

Nov 15 18:49:20 vdrsf zma_m7[7072]: ERR [Can't open events/7/707265/00110-capture.jpg: No such file or directory]
Nov 15 18:49:20 vdrsf zma_m6[7064]: ERR [Can't open events/6/707264/00114-capture.jpg: No such file or directory]
Nov 15 18:49:20 vdrsf zma_m7[7072]: ERR [Can't open events/7/707265/00111-capture.jpg: No such file or directory]
Nov 15 18:49:20 vdrsf zma_m6[7064]: ERR [Can't open events/6/707264/00115-capture.jpg: No such file or directory]
Nov 15 18:49:20 vdrsf zma_m7[7072]: INF [C-07: 23326 - Left alarm state (707265) - 111(83) images]
Nov 15 18:49:20 vdrsf zma_m6[7064]: ERR [Can't open events/6/707264/00116-capture.jpg: No such file or directory]
Nov 15 18:49:20 vdrsf zma_m6[7064]: ERR [Can't open events/6/707264/00117-capture.jpg: No such file or directory]
Nov 15 18:49:21 vdrsf zma_m6[7064]: ERR [Can't open events/6/707264/00118-capture.jpg: No such file or directory]
Nov 15 18:49:21 vdrsf zma_m6[7064]: ERR [Can't open events/6/707264/00119-capture.jpg: No such file or directory]
Nov 15 18:49:21 vdrsf zma_m6[7064]: ERR [Can't open events/6/707264/00120-capture.jpg: No such file or directory]

Nov 15 18:49:24 vdrsf zma_m6[7064]: ERR [Can't open events/6/707264/00132-capture.jpg: No such file or directory]
Nov 15 18:49:24 vdrsf zma_m6[7064]: ERR [Can't open events/6/707264/00133-capture.jpg: No such file or directory]
Nov 15 18:49:24 vdrsf zma_m6[7064]: ERR [Can't open events/6/707264/00134-capture.jpg: No such file or directory]
Nov 15 18:49:25 vdrsf zma_m6[7064]: ERR [Can't open events/6/707264/00135-capture.jpg: No such file or directory]
Nov 15 18:49:25 vdrsf zma_m6[7064]: ERR [Can't open events/6/707264/00136-capture.jpg: No such file or directory]
Nov 15 18:49:25 vdrsf zma_m6[7064]: ERR [Can't open events/6/707264/00137-capture.jpg: No such file or directory]
Nov 15 18:49:25 vdrsf zma_m6[7064]: ERR [Can't open events/6/707264/00138-capture.jpg: No such file or directory]
Nov 15 18:49:26 vdrsf zma_m6[7064]: ERR [Can't open events/6/707264/00139-capture.jpg: No such file or directory]
Nov 15 18:49:26 vdrsf zma_m6[7064]: ERR [Can't open events/6/707264/00140-capture.jpg: No such file or directory]
Nov 15 18:49:26 vdrsf zma_m6[7064]: INF [C-06: 23348 - Left alarm state (707264) - 140(113) images]

Nov 15 19:04:30 vdrsf zmaudit[7086]: INF [Database event '7/707265' does not exist in filesystem]
Nov 15 19:04:30 vdrsf zmaudit[7086]: INF [deleting]
Nov 15 19:04:30 vdrsf zmaudit[7086]: INF [Database event '6/707264' does not exist in filesystem]
Nov 15 19:04:30 vdrsf zmaudit[7086]: INF [deleting]
And code from znaudit from line 188:

Code: Select all

                opendir( DIR, $monitor_dir ) or Fatal( "Can't open directory '$monitor_dir': $!" );
                my @temp_events = sort { $b <=> $a } grep { $_ =~ /^\d+$/ } readdir( DIR );
                closedir( DIR );
                chdir( $monitor_dir );
                my $count = 0;
                foreach my $event ( @temp_events )
                {
                        if ( $count++ > MAX_AGED_DIRS )
                        {
                                $fs_events->{$event} = -1;
                        }
                        else
                        {
                                $fs_events->{$event} = (time() - ($^T - ((-M $event) * 24*60*60)));
                        }
                }
                chdir( EVENT_PATH );
                Debug( "Got ".int(keys(%$fs_events))." events\n" );
        }

        while ( my ( $fs_monitor, $fs_events ) = each(%$fs_monitors) )
        {
                if ( my $db_events = $db_monitors->{$fs_monitor} )
                {
                        if ( $fs_events )
                        {
                                while ( my ( $fs_event, $age ) = each(%$fs_events ) )
                                {
                                        if ( !defined($db_events->{$fs_event}) && ($age < 0 || ($age > MIN_AGE)) )
                                        {
                                                aud_print( "Filesystem event '$fs_monitor/$fs_event' does not exist in datab
                                                if ( confirm() )
                                                {
                                                        my $command = "/bin/rm -rf ".EVENT_PATH."/$fs_monitor/$fs_event";
                                                        qx( $command );
                                                }
                                        }
                                }
                        }
                }
                else
I think we need backward sorting in line:

Code: Select all

                my @temp_events = sort { $b <=> $a } grep { $_ =~ /^\d+$/ } readdir( DIR );
But Im not perl guru.
Regards.
Andrew

Posted: Sun Nov 18, 2007 12:53 pm
by zoneminder
It should not be possible for events to exist in the filesystem and not in the database as the database record is inserted first (that's where the event id comes from).

Also zmaudit should ignore any events with db or filesystem records younger than MIN_AGE seconds old.

So there appears to be something very strange going on on your system. First of all can you run mysqlcheck to make sure your DB is not sick?

Posted: Tue Nov 20, 2007 6:56 pm
by kamand
Sorry. This is my fault. I has wrongly looked in a code from version 1.22.3 instead of 1.22.2.
1.22.2

Code: Select all

$fs_events->{$event} = ($fs_now - ($^T - ((-M $event) * 24*60*60)));
1.22.3

Code: Select all

$fs_events->{$event} = (time() - ($^T - ((-M $event) * 24*60*60)));
With changes from 1.22.3 everyting is ok.
Had tested for about 4 days: from Nov 16 11:38 until now.
Sorry for false report.
Regards.
Andrew