Changeset 74

Show
Ignore:
Timestamp:
01.12.2006 01:49:11 (2 years ago)
Author:
jorge
Message:

Fixed MySQL code, a connection is now made only if an image is found in the message, and the session is stored in $conf for portability across modules.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/devel/FuzzyOcr.pm

    r73 r74  
    2020use POSIX; 
    2121 
    22 use lib qw(.); # Allow placing of FuzzyOcr in siteconfigdir 
     22use lib qw(/etc/mail/spamassassin); # Allow placing of FuzzyOcr in siteconfigdir 
    2323 
    2424use FuzzyOcr::Logging qw(debuglog errorlog infolog); 
     
    7070    if ($conf->{focr_global_timeout}) { 
    7171        my $t = get_timeout(); 
    72         infolog("Global Timeout set at ".$conf->{focr_timeout}." sec."); 
     72        debuglog("Global Timeout set at ".$conf->{focr_timeout}." sec.",2); 
    7373        $t->run(sub { 
    7474            $end = fuzzyocr_do( $self, $conf, $pms ); 
     
    121121    my $main     = $self->{main}; 
    122122 
    123     debuglog("Starting FuzzyOcr..."); 
     123    debuglog("Starting FuzzyOcr...",2); 
    124124    foreach my $p ( 
    125125        $pms->{msg}->find_parts(qr(^image\b)i), 
     
    270270    infolog("Found: $cnt images"); $cnt = 0; 
    271271    if ($conf->{focr_enable_image_hashing} == 3) { 
    272         $conf->{focr_ddb} = get_mysql_ddb(); 
     272        $conf->{focr_mysql_ddb} = get_mysql_ddb(); 
    273273    } 
    274274 
     
    767767    } 
    768768    if ($conf->{focr_enable_image_hashing} == 3) { 
    769         my $ddb = get_mysql_ddb(); 
    770         if (defined $ddb) { 
    771             $ddb->disconnect; 
     769        if (defined $conf->{focr_mysql_ddb}) { 
     770            $conf->{focr_mysql_ddb}->disconnect; 
    772771        } 
    773772    } 
  • trunk/devel/FuzzyOcr/Config.pm

    r72 r74  
    2727    get_wordlist  
    2828    get_mysql_ddb 
    29     free_mysql_ddb 
    3029    read_words  
    3130    /; 
     
    4544our $conf; 
    4645our $pms; 
    47 our $ddb; 
    4846our $timeout; 
    4947our $pid; 
     
    149147    return undef unless (HAS_DBI and HAS_DBD_MYSQL); 
    150148 
    151     unless (defined $ddb) { 
    152         use DBI; 
    153         my $conf = get_config(); 
    154         my %dopts = ( AutoCommit => 1 ); 
    155         my $dsn = "dbi:mysql:database=".$conf->{focr_mysql_db}; 
    156         if (defined($conf->{focr_mysql_socket})) { 
    157             $dsn .= ";mysql_socket=".$conf->{focr_mysql_socket}; 
    158         } else { 
    159             $dsn .= ";host=".$conf->{focr_mysql_host}; 
    160         $dsn .= ";port=".$conf->{focr_mysql_port} if $conf->{focr_mysql_port} != 3306; 
    161         } 
    162         infolog("Connecting to: $dsn"); 
    163         $ddb = DBI->connect($dsn, 
    164             $conf->{focr_mysql_user}, 
    165             $conf->{focr_mysql_pass}, 
    166             \%dopts); 
    167     } 
     149    use DBI; 
     150    my $conf = get_config(); 
     151    my %dopts = ( AutoCommit => 1 ); 
     152    my $dsn = "dbi:mysql:database=".$conf->{focr_mysql_db}; 
     153    if (defined($conf->{focr_mysql_socket})) { 
     154        $dsn .= ";mysql_socket=".$conf->{focr_mysql_socket}; 
     155    } else { 
     156        $dsn .= ";host=".$conf->{focr_mysql_host}; 
     157    $dsn .= ";port=".$conf->{focr_mysql_port} if $conf->{focr_mysql_port} != 3306; 
     158    } 
     159    infolog("Connecting to: $dsn"); 
     160    my $ddb = DBI->connect($dsn, 
     161        $conf->{focr_mysql_user}, 
     162        $conf->{focr_mysql_pass}, 
     163        \%dopts); 
    168164    return $ddb; 
    169 } 
    170  
    171 sub free_mysql_ddb { 
    172     $ddb->disconnect; 
    173     undef $ddb; 
    174165} 
    175166 
     
    647638            } 
    648639        } 
    649         if ($conf->{focr_enable_image_hashing} == 3) { 
    650             $ddb = get_mysql_ddb(); 
    651             if (defined $ddb) { 
    652                 my $db   = $conf->{focr_mysql_db}; 
    653                 my $tab  = $conf->{focr_mysql_hash}; 
    654                 my $file = $conf->{focr_db_hash}; 
    655                 my %DB; my $dbm; my $err = 0; 
    656                 tie %DB, 'MLDBM', $file or $err++; 
    657                 if ($err) { 
    658                     errorlog("Could not open \"$file\""); 
    659                 } else { 
    660                     foreach my $k (keys %DB) { 
    661                         my $dbm = $DB{$k}; 
    662                         my $sql = qq(select score from $db.$tab where $tab.key='$k'); 
    663                         my @data = $ddb->selectrow_array($sql); 
    664                         unless (scalar(@data)>0) { 
    665                             $sql  = "insert into $db.$tab values ('$k'"; 
    666                             foreach my $y (qw/basic fname ctype/) { 
    667                                 my $val = defined($dbm->{$y}) ? $dbm->{$y} : ''; 
    668                                 $sql .= ",'$val'"; 
    669                             } 
    670                                if ($dbm->{ctype} =~ m/gif/i)      { $sql .= ",'1'"; } 
    671                             elsif ($dbm->{ctype} =~ m/jpg|jpeg/i) { $sql .= ",'2'"; } 
    672                             elsif ($dbm->{ctype} =~ m/png/i)      { $sql .= ",'3'"; } 
    673                             elsif ($dbm->{ctype} =~ m/bmp/i)      { $sql .= ",'4'"; } 
    674                             elsif ($dbm->{ctype} =~ m/tiff/i)     { $sql .= ",'5'"; } 
    675                             else                                  { $sql .= ",'0'"; } 
    676                             foreach my $y (qw/match input check score dinfo/) { 
    677                                 my $val = defined($dbm->{$y}) ? $dbm->{$y} : ''; 
    678                                 $sql .= ",'$val'"; 
    679                             } 
    680                             $sql .= ")"; 
    681                             debuglog($sql,2); 
    682                             $ddb->do($sql); $err++; 
     640        my $ddb = get_mysql_ddb(); 
     641        if ($conf->{focr_enable_image_hashing} == 3 and defined $ddb) { 
     642            my $db   = $conf->{focr_mysql_db}; 
     643            my $tab  = $conf->{focr_mysql_hash}; 
     644            my $file = $conf->{focr_db_hash}; 
     645            my %DB; my $dbm; my $err = 0; 
     646            tie %DB, 'MLDBM', $file or $err++; 
     647            if ($err) { 
     648                errorlog("Could not open \"$file\""); 
     649            } else { 
     650                foreach my $k (keys %DB) { 
     651                    my $dbm = $DB{$k}; 
     652                    my $sql = qq(select score from $db.$tab where $tab.key='$k'); 
     653                    my @data = $ddb->selectrow_array($sql); 
     654                    unless (scalar(@data)>0) { 
     655                        $sql  = "insert into $db.$tab values ('$k'"; 
     656                        foreach my $y (qw/basic fname ctype/) { 
     657                            my $val = defined($dbm->{$y}) ? $dbm->{$y} : ''; 
     658                            $sql .= ",'$val'"; 
    683659                        } 
     660                           if ($dbm->{ctype} =~ m/gif/i)      { $sql .= ",'1'"; } 
     661                        elsif ($dbm->{ctype} =~ m/jpg|jpeg/i) { $sql .= ",'2'"; } 
     662                        elsif ($dbm->{ctype} =~ m/png/i)      { $sql .= ",'3'"; } 
     663                        elsif ($dbm->{ctype} =~ m/bmp/i)      { $sql .= ",'4'"; } 
     664                        elsif ($dbm->{ctype} =~ m/tiff/i)     { $sql .= ",'5'"; } 
     665                        else                                  { $sql .= ",'0'"; } 
     666                        foreach my $y (qw/match input check score dinfo/) { 
     667                            my $val = defined($dbm->{$y}) ? $dbm->{$y} : ''; 
     668                            $sql .= ",'$val'"; 
     669                        } 
     670                        $sql .= ")"; 
     671                        debuglog($sql,2); 
     672                        $ddb->do($sql); $err++; 
    684673                    } 
    685                     untie %DB; 
    686                     infolog("Stored [$err] Hashes in $db.$tab") if $err>0; 
    687                 } 
    688                 $tab  = $conf->{focr_mysql_safe}; 
    689                 $file = $conf->{focr_db_safe}; 
    690                 $err  = 0; 
    691                 tie %DB, 'MLDBM', $file or $err++; 
    692                 if ($err) { 
    693                     errorlog("Could not open \"$file\""); 
    694                 } else { 
    695                     foreach my $k (keys %DB) { 
    696                         my $dbm = $DB{$k}; 
    697                         my $sql = qq(select score from $db.$tab where $tab.key='$k'); 
    698                         my @data = $ddb->selectrow_array($sql); 
    699                         unless (scalar(@data)>0) { 
    700                             $sql  = "insert into $db.$tab values ('$k'"; 
    701                             foreach my $y (qw/basic fname ctype/) { 
    702                                 my $val = defined($dbm->{$y}) ? $dbm->{$y} : ''; 
    703                                 $sql .= ",'$val'"; 
    704                             } 
    705                                if ($dbm->{ctype} =~ m/gif/i)      { $sql .= ",'1'"; } 
    706                             elsif ($dbm->{ctype} =~ m/jpg|jpeg/i) { $sql .= ",'2'"; } 
    707                             elsif ($dbm->{ctype} =~ m/png/i)      { $sql .= ",'3'"; } 
    708                             elsif ($dbm->{ctype} =~ m/bmp/i)      { $sql .= ",'4'"; } 
    709                             elsif ($dbm->{ctype} =~ m/tiff/i)     { $sql .= ",'5'"; } 
    710                             else                                  { $sql .= ",'0'"; } 
    711                             foreach my $y (qw/match input check score dinfo/) { 
    712                                 my $val = defined($dbm->{$y}) ? $dbm->{$y} : ''; 
    713                                 $sql .= ",'$val'"; 
    714                             } 
    715                             $sql .= ")"; 
    716                             debuglog($sql,2); 
    717                             $ddb->do($sql); $err++; 
     674                } 
     675                untie %DB; 
     676                infolog("Stored [$err] Hashes in $db.$tab") if $err>0; 
     677            } 
     678            $tab  = $conf->{focr_mysql_safe}; 
     679            $file = $conf->{focr_db_safe}; 
     680            $err  = 0; 
     681            tie %DB, 'MLDBM', $file or $err++; 
     682            if ($err) { 
     683                errorlog("Could not open \"$file\""); 
     684            } else { 
     685                foreach my $k (keys %DB) { 
     686                    my $dbm = $DB{$k}; 
     687                    my $sql = qq(select score from $db.$tab where $tab.key='$k'); 
     688                    my @data = $ddb->selectrow_array($sql); 
     689                    unless (scalar(@data)>0) { 
     690                        $sql  = "insert into $db.$tab values ('$k'"; 
     691                        foreach my $y (qw/basic fname ctype/) { 
     692                            my $val = defined($dbm->{$y}) ? $dbm->{$y} : ''; 
     693                            $sql .= ",'$val'"; 
    718694                        } 
     695                           if ($dbm->{ctype} =~ m/gif/i)      { $sql .= ",'1'"; } 
     696                        elsif ($dbm->{ctype} =~ m/jpg|jpeg/i) { $sql .= ",'2'"; } 
     697                        elsif ($dbm->{ctype} =~ m/png/i)      { $sql .= ",'3'"; } 
     698                        elsif ($dbm->{ctype} =~ m/bmp/i)      { $sql .= ",'4'"; } 
     699                        elsif ($dbm->{ctype} =~ m/tiff/i)     { $sql .= ",'5'"; } 
     700                        else                                  { $sql .= ",'0'"; } 
     701                        foreach my $y (qw/match input check score dinfo/) { 
     702                            my $val = defined($dbm->{$y}) ? $dbm->{$y} : ''; 
     703                            $sql .= ",'$val'"; 
     704                        } 
     705                        $sql .= ")"; 
     706                        debuglog($sql,2); 
     707                        $ddb->do($sql); $err++; 
    719708                    } 
    720                     untie %DB; 
    721                     infolog("Stored [$err] Hashes in $db.$tab") if $err>0; 
    722                 } 
    723                 $ddb->disconnect; 
    724                 infolog("done updating MySQL database"); 
    725             } 
    726             free_mysql_ddb(); 
     709                } 
     710                untie %DB; 
     711                infolog("Stored [$err] Hashes in $db.$tab") if $err>0; 
     712            } 
     713            debuglog("done updating MySQL database"); 
     714            $ddb->disconnect; 
    727715        } 
    728716    } 
     
    763751sub parse_scansets { 
    764752    my ($file) = @_; 
    765  
    766753    unless (open(SFILE, "<$file")) { 
    767754        errorlog("Failed to open scanset file \"$file\", aborting..."); 
     
    836823sub parse_preprocessors { 
    837824    my ($file) = @_; 
    838  
    839825    unless (open(PFILE, "<$file")) { 
    840826        errorlog("Failed to open preprocessor file \"$file\", aborting..."); 
  • trunk/devel/FuzzyOcr/Hashing.pm

    r70 r74  
    7575 
    7676    if ($conf->{focr_enable_image_hashing} == 3) { 
    77         my $ddb   = get_mysql_ddb(); 
    78         return (0,'') unless (defined $ddb); 
     77        unless (defined $conf->{focr_mysql_ddb}) { 
     78            infolog("Connection to MySQL server unavailable"); 
     79            return (0,''); 
     80        } 
     81        my $ddb   = $conf->{focr_mysql_ddb}; 
    7982        my $db    = $conf->{focr_mysql_db}; 
    8083        my $sql   = qq(select * from $db.$dbfile where $dbfile.key='$key'); 
     
    215218 
    216219    if ($conf->{focr_enable_image_hashing} == 3) { 
    217         my $ddb = get_mysql_ddb(); 
    218         unless (defined $ddb) { 
    219             errorlog("Not connected to MySQL Database"); 
     220        unless (defined $conf->{focr_mysql_ddb}) { 
     221            infolog("Connection to MySQL server unavailable"); 
    220222            return; 
    221223        } 
    222224        my $db    = $conf->{focr_mysql_db}; 
     225        my $ddb   = $conf->{focr_mysql_ddb}; 
    223226        my $table = $_[2] || $conf->{focr_mysql_hash}; 
    224227        my $fname = $_[3] || '';