diff options
Diffstat (limited to 'Bugzilla/Elastic/Role')
-rw-r--r-- | Bugzilla/Elastic/Role/ChildObject.pm | 16 | ||||
-rw-r--r-- | Bugzilla/Elastic/Role/HasClient.pm | 25 | ||||
-rw-r--r-- | Bugzilla/Elastic/Role/HasIndexName.pm | 16 | ||||
-rw-r--r-- | Bugzilla/Elastic/Role/Object.pm | 48 |
4 files changed, 105 insertions, 0 deletions
diff --git a/Bugzilla/Elastic/Role/ChildObject.pm b/Bugzilla/Elastic/Role/ChildObject.pm new file mode 100644 index 000000000..1f7a7483a --- /dev/null +++ b/Bugzilla/Elastic/Role/ChildObject.pm @@ -0,0 +1,16 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This Source Code Form is "Incompatible With Secondary Licenses", as +# defined by the Mozilla Public License, v. 2.0. +package Bugzilla::Elastic::Role::ChildObject; + +use 5.10.1; +use Role::Tiny; + +with 'Bugzilla::Elastic::Role::Object'; + +requires qw(ES_PARENT_TYPE es_parent_id); + +1; diff --git a/Bugzilla/Elastic/Role/HasClient.pm b/Bugzilla/Elastic/Role/HasClient.pm new file mode 100644 index 000000000..3d52d513a --- /dev/null +++ b/Bugzilla/Elastic/Role/HasClient.pm @@ -0,0 +1,25 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This Source Code Form is "Incompatible With Secondary Licenses", as +# defined by the Mozilla Public License, v. 2.0. +package Bugzilla::Elastic::Role::HasClient; + +use 5.10.1; +use Moo::Role; +use Search::Elasticsearch; + + +has 'client' => (is => 'lazy'); + +sub _build_client { + my ($self) = @_; + + return Search::Elasticsearch->new( + nodes => Bugzilla->params->{elasticsearch_nodes}, + cxn_pool => 'Sniff', + ); +} + +1; diff --git a/Bugzilla/Elastic/Role/HasIndexName.pm b/Bugzilla/Elastic/Role/HasIndexName.pm new file mode 100644 index 000000000..eaff339cd --- /dev/null +++ b/Bugzilla/Elastic/Role/HasIndexName.pm @@ -0,0 +1,16 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This Source Code Form is "Incompatible With Secondary Licenses", as +# defined by the Mozilla Public License, v. 2.0. +package Bugzilla::Elastic::Role::HasIndexName; + +use 5.10.1; +use Moo::Role; +use Search::Elasticsearch; + +has 'index_name' => ( is => 'ro', default => sub { Bugzilla->params->{elasticsearch_index} } ); + + +1; diff --git a/Bugzilla/Elastic/Role/Object.pm b/Bugzilla/Elastic/Role/Object.pm new file mode 100644 index 000000000..ad5ab002b --- /dev/null +++ b/Bugzilla/Elastic/Role/Object.pm @@ -0,0 +1,48 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This Source Code Form is "Incompatible With Secondary Licenses", as +# defined by the Mozilla Public License, v. 2.0. +package Bugzilla::Elastic::Role::Object; + +use 5.10.1; +use Role::Tiny; + +requires qw(ES_TYPE ES_PROPERTIES es_document); +requires qw(ID_FIELD DB_TABLE); + +sub ES_OBJECTS_AT_ONCE { 100 } + +sub ES_SELECT_ALL_SQL { + my ($class, $last_id) = @_; + + my $id = $class->ID_FIELD; + my $table = $class->DB_TABLE; + + return ("SELECT $id FROM $table WHERE $id > ? ORDER BY $id", [$last_id // 0]); +} + +requires qw(ES_SELECT_UPDATED_SQL); + +around 'ES_PROPERTIES' => sub { + my $orig = shift; + my $self = shift; + my $properties = $orig->($self, @_); + $properties->{es_mtime} = { type => 'long' }; + $properties->{$self->ID_FIELD} = { type => 'long', analyzer => 'keyword' }; + + return $properties; +}; + +around 'es_document' => sub { + my ($orig, $self, $mtime) = @_; + my $doc = $orig->($self); + + $doc->{es_mtime} = $mtime; + $doc->{$self->ID_FIELD} = $self->id; + + return $doc; +}; + +1; |