App-SD
view release on metacpan or search on metacpan
lib/App/SD/ForeignReplica/PullEncoder.pm view on Meta::CPAN
package App::SD::ForeignReplica::PullEncoder;
use Any::Moose;
use App::SD::Util;
use Params::Validate qw/validate/;
with 'Prophet::CLI::ProgressBar';
sub run {
my $self = shift;
my %args = validate( @_, { after => 1});
$self->sync_source->log('Finding matching tickets');
my $tickets = $self->find_matching_tickets( query => $self->sync_source->query );
if ( @$tickets == 0 ) {
$self->sync_source->log("No tickets found.");
return;
}
my $counter = 0;
$self->sync_source->log_debug("Discovering ticket history");
my ( $last_modified, $last_txn, @changesets );
my $progress = $self->progress_bar(
max => $#$tickets,
format => "Fetching ticket history %30b %p Est: %E\r",
);
for my $ticket (@$tickets) {
$counter++;
my $changesets;
$progress->();
$self->sync_source->log_debug( "Fetching $counter of " . scalar @$tickets . " tickets");
( $last_modified, $changesets ) = $self->transcode_ticket( $ticket, $last_modified );
unshift @changesets, @$changesets;
}
my $sorted_changesets = [ sort {
$a->original_sequence_no <=> $b->original_sequence_no } @changesets ];
return $sorted_changesets;
}
sub ticket_last_modified { undef}
sub transcode_ticket {
my $self = shift;
my $ticket = shift;
my $last_modified = shift;
my @changesets;
if ( my $ticket_last_modified = $self->ticket_last_modified($ticket) ) {
$last_modified = $ticket_last_modified if ( !$last_modified || $ticket_last_modified > $last_modified );
}
my $transactions = $self->find_matching_transactions(
ticket => $ticket,
starting_transaction => $self->sync_source->app_handle->handle->last_changeset_from_source(
$self->sync_source->uuid_for_remote_id( $self->ticket_id($ticket) )
) || 1
);
my $changesets;
( $last_modified, $changesets ) = $self->transcode_history( $ticket, $transactions, $last_modified );
return ( $last_modified, $changesets );
}
sub transcode_history {
my $self = shift;
( run in 0.550 second using v1.01-cache-2.11-cpan-39bf76dae61 )