diff options
Diffstat (limited to 'extensions/Push')
-rw-r--r-- | extensions/Push/lib/Connector/Phabricator.pm | 18 | ||||
-rw-r--r-- | extensions/Push/lib/Push.pm | 70 | ||||
-rw-r--r-- | extensions/Push/t/ReviewBoard.t | 3 |
3 files changed, 51 insertions, 40 deletions
diff --git a/extensions/Push/lib/Connector/Phabricator.pm b/extensions/Push/lib/Connector/Phabricator.pm index e59ba6c0d..33e2bb6ad 100644 --- a/extensions/Push/lib/Connector/Phabricator.pm +++ b/extensions/Push/lib/Connector/Phabricator.pm @@ -21,10 +21,8 @@ use Bugzilla::Extension::PhabBugz::Policy; use Bugzilla::Extension::PhabBugz::Project; use Bugzilla::Extension::PhabBugz::Revision; use Bugzilla::Extension::PhabBugz::Util qw( - add_security_sync_comments get_attachment_revisions get_bug_role_phids - get_security_sync_groups ); use Bugzilla::Extension::Push::Constants; @@ -68,8 +66,6 @@ sub send { my $is_public = is_public($bug); - my @set_groups = get_security_sync_groups($bug); - my $revisions = get_attachment_revisions($bug); my $group_change = @@ -86,24 +82,14 @@ sub send { )); $revision->make_public(); } - elsif ( !$is_public && !@set_groups ) { - Bugzilla->audit(sprintf( - 'Making revision %s for bug %s private due to unkown Bugzilla groups: %s', - $revision->id, - $bug->id, - join(', ', @set_groups) - )); - $revision->make_private(['secure-revision']); - add_security_sync_comments([$revision], $bug); - } elsif ( !$is_public && $group_change ) { Bugzilla->audit(sprintf( 'Giving revision %s a custom policy for bug %s', $revision->id, $bug->id )); - my @set_project_names = map { "bmo-" . $_ } @set_groups; - $revision->make_private(\@set_project_names); + my $set_project_names = [ map { "bmo-" . $_->name } @{ $bug->groups_in } ]; + $revision->make_private($set_project_names); } # Subscriber list of the private revision should always match diff --git a/extensions/Push/lib/Push.pm b/extensions/Push/lib/Push.pm index 670b2aa56..ab640da81 100644 --- a/extensions/Push/lib/Push.pm +++ b/extensions/Push/lib/Push.pm @@ -8,8 +8,7 @@ package Bugzilla::Extension::Push::Push; use 5.10.1; -use strict; -use warnings; +use Moo; use Bugzilla::Logging; use Bugzilla::Extension::Push::BacklogMessage; @@ -23,22 +22,12 @@ use Bugzilla::Extension::Push::Option; use Bugzilla::Extension::Push::Queue; use Bugzilla::Extension::Push::Util; use DateTime; +use Try::Tiny; -sub new { - my ($class) = @_; - my $self = {}; - bless($self, $class); - $self->{is_daemon} = 0; - return $self; -} - -sub is_daemon { - my ($self, $value) = @_; - if (defined $value) { - $self->{is_daemon} = $value ? 1 : 0; - } - return $self->{is_daemon}; -} +has 'is_daemon' => ( + is => 'rw', + default => 0, +); sub start { my ($self) = @_; @@ -50,12 +39,49 @@ sub start { $connector->backlog->reset_backoff(); } - while(1) { - if ($self->_dbh_check()) { - $self->_reload(); - $self->push(); + my $pushd_loop = IO::Async::Loop->new; + my $main_timer = IO::Async::Timer::Periodic->new( + first_interval => 0, + interval => POLL_INTERVAL_SECONDS, + reschedule => 'drift', + on_tick => sub { + if ( $self->_dbh_check() ) { + $self->_reload(); + try { + $self->push(); + } + catch { + FATAL($_); + }; + } + }, + ); + if ( Bugzilla->datadog ) { + my $dog_timer = IO::Async::Timer::Periodic->new( + interval => 120, + reschedule => 'drift', + on_tick => sub { $self->heartbeat }, + ); + $pushd_loop->add($dog_timer); + $dog_timer->start; + } + + $pushd_loop->add($main_timer); + $main_timer->start; + $pushd_loop->run; +} + +sub heartbeat { + my ($self) = @_; + my $dd = Bugzilla->datadog('bugzilla.pushd'); + + $dd->gauge('scheduled_jobs', Bugzilla->dbh->selectrow_array('SELECT COUNT(*) FROM push')); + + foreach my $connector ($self->connectors->list) { + if ($connector->enabled) { + my $lcname = lc $connector->name; + $dd->gauge("${lcname}.backlog", Bugzilla->dbh->selectrow_array('SELECT COUNT(*) FROM push_backlog WHERE connector = ?', undef, $connector->name)); } - sleep(POLL_INTERVAL_SECONDS); } } diff --git a/extensions/Push/t/ReviewBoard.t b/extensions/Push/t/ReviewBoard.t index 3eb54760c..c752e34ef 100644 --- a/extensions/Push/t/ReviewBoard.t +++ b/extensions/Push/t/ReviewBoard.t @@ -7,14 +7,13 @@ # defined by the Mozilla Public License, v. 2.0. use strict; use warnings; -use lib qw( . lib ); +use lib qw( . lib local/lib/perl5 ); use Test::More; use Bugzilla; use Bugzilla::Extension; use Bugzilla::Attachment; use Scalar::Util 'blessed'; -use YAML; BEGIN { eval { |