summaryrefslogtreecommitdiff
path: root/lib/GitHub/Collector/Role/MongoDB.pm
blob: e4cc5b1267cb4822f7784b4e686ee541b8c2c88a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package GitHub::Collector::Role::MongoDB;

use Moose::Role;
use MongoDB;

has mongodb => (
    is      => 'ro',
    isa     => 'Object',
    lazy    => 1,
    default => sub {
        my $self = shift;
        my $conn =
          MongoDB::Connection->new( timeout => 60000, query_timeout => 60000 );
        my $db = $conn->github;
        $self->_create_indexes($db);
        return $db;
    },
    handles => {
        db_profiles     => 'profiles',
        db_repositories => 'repositories',
        db_relations    => 'relations',
        db_contributors => 'contributors',
        db_edges        => 'edges',
    }
);

sub _create_indexes {
    my ( $self, $db ) = @_;

    $db->profiles->ensure_index( { login => 1 }, { unique => 1 } );
    $db->repositories->ensure_index( { uniq_name => 1 }, { unique => 1 } );
    $db->contributors->ensure_index( { project   => 1 } );
    $db->contributors->ensure_index( { owner     => 1 } );
    $db->relations->ensure_index( { source => 1 } );
    $db->relations->ensure_index( { target => 1 } );
    $db->relations->ensure_index( { login  => 1 } );
    $db->edges->ensure_index({source => 1});
    $db->edges->ensure_index({target => 1});
}

1;