Dancer-SearchApp
view release on metacpan or search on metacpan
bin/index-imap.pl view on Meta::CPAN
%analyzers = (
'de' => 'german',
'en' => 'english',
'no' => 'norwegian',
'it' => 'italian',
'lt' => 'lithuanian',
'ro' => 'english', # I don't speak "romanian"
'sk' => 'english', # I don't speak "serbo-croatian"
);
if( $force_rebuild ) {
print "Dropping indices\n";
my @list;
await $e->indices->get({index => ['*']})->then(sub{
@list = grep { /^\Q$index_name/ } sort keys %{ $_[0]};
});
await collect( map { my $n=$_; $e->indices->delete( index => $n )->then(sub{warn "$n dropped" }) } @list )->then(sub{
warn "Index cleanup complete";
%indices = ();
});
};
print "Reading ES indices\n";
await $e->indices->get({index => ['*']})->then(sub{
%indices = %{ $_[0]};
});
warn "Index: $_\n" for grep { /^\Q$index_name/ } keys %indices;
# Erstellt einen Mail-Index mit der passenden Sprache
# https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-lang-analyzer.html
use vars qw(%indices);
print "Reading ES indices\n";
my $indices_done = AnyEvent->condvar;
$e->indices->get({index => ['*']})->then(sub{
%indices = %{ $_[0]};
$indices_done->send;
});
$indices_done->recv;
warn "Index: $_\n" for keys %indices;
# Connect to cluster at search1:9200, sniff all nodes and round-robin between them:
use vars qw($imap);
sub imap() {
return $imap if $imap and $imap->IsConnected;
my %imap_config = (
Server => $config->{imap}->{server},
Port => $config->{imap}->{port},
User => $config->{imap}->{username},
Password => $config->{imap}->{password},
Debug => $config->{imap}->{debug},
);
use IO::Socket::SSL;
#$IO::Socket::SSL::DEBUG = 3; # all
my $socket = IO::Socket::SSL->new
( Proto => 'tcp',
PeerAddr => $imap_config{ Server },
PeerPort => $imap_config{ Port },
SSL_verify_mode => SSL_VERIFY_NONE, # Yes, I know ...
) or die "No socket to $imap_config{ Server }:$imap_config{ Port }";
CONNECT:
my $retry = 0;
$imap = Mail::IMAPClient->new(
#%imap_config,
User => $imap_config{ User },
Password => $imap_config{ Password },
Socket => $socket,
#Ssl => 1,
Uid => 1,
) or die sprintf "Can't connect to server '%s': %s",
$config->{'server'}, "$@";
if( !$imap->IsConnected and $retry++ < 5 ) {
sleep 1;
warn "Retrying";
goto CONNECT;
};
if( $retry == 5 ) {
exit 1;
};
$imap
};
sub in_exclude_list {
my( $item, $list ) = @_;
scalar grep { $item =~ /$_/ } @$list
};
# This should go into crawler::imap
sub imap_recurse {
my( $imap, $config ) = @_;
my @folders;
for my $folderspec (@{$config->{folders}}) {
if( ! ref $folderspec ) {
# plain name, use this folder
push @folders, $folderspec
} else {
if( $folderspec->{recurse}) {
# Recurse through this tree
$folderspec = $folderspec->{recurse};
warn "Recursing into '$folderspec->{prefix}'";
$folderspec->{exclude} ||= [];
my @imap_folders;
if( $folderspec->{prefix} ne '' ) {
@imap_folders = imap->folders_hash( $folderspec->{prefix} );
} else {
@imap_folders = imap->folders_hash();
};
@imap_folders = grep { ! in_exclude_list( $_->{name}, $folderspec->{exclude} ) }
@imap_folders;
push @folders, map { $_->{name} } @imap_folders;
};
( run in 0.725 second using v1.01-cache-2.11-cpan-39bf76dae61 )