# -- # Copyright (C) 2001-2019 OTRS AG, https://otrs.com/ # -- # This software comes with ABSOLUTELY NO WARRANTY. For details, see # the enclosed file COPYING for license information (GPL). If you # did not receive this file, see https://www.gnu.org/licenses/gpl-3.0.txt. # -- package Kernel::System::Console::Command::Maint::Ticket::EscalationIndexRebuild; use strict; use warnings; use Time::HiRes(); use parent qw(Kernel::System::Console::BaseCommand); our @ObjectDependencies = ( 'Kernel::Config', 'Kernel::System::Ticket', ); sub Configure { my ( $Self, %Param ) = @_; $Self->Description('Completely rebuild the ticket escalation index.'); $Self->AddOption( Name => 'micro-sleep', Description => "Specify microseconds to sleep after every ticket to reduce system load (e.g. 1000).", Required => 0, HasValue => 1, ValueRegex => qr/^\d+$/smx, ); return; } sub Run { my ( $Self, %Param ) = @_; $Self->Print("Rebuilding ticket escalation index...\n"); # disable ticket events $Kernel::OM->Get('Kernel::Config')->{'Ticket::EventModulePost'} = {}; # get all tickets my @TicketIDs = $Kernel::OM->Get('Kernel::System::Ticket')->TicketSearch( Result => 'ARRAY', Limit => 100_000_000, UserID => 1, Permission => 'ro', ); my $Count = 0; my $MicroSleep = $Self->GetOption('micro-sleep'); TICKETID: for my $TicketID (@TicketIDs) { $Count++; $Kernel::OM->Get('Kernel::System::Ticket')->TicketEscalationIndexBuild( TicketID => $TicketID, UserID => 1, ); if ( $Count % 2000 == 0 ) { my $Percent = int( $Count / ( $#TicketIDs / 100 ) ); $Self->Print( "$Count of $#TicketIDs processed ($Percent % done).\n" ); } Time::HiRes::usleep($MicroSleep) if $MicroSleep; } $Self->Print("Done.\n"); return $Self->ExitCodeOk(); } 1;