Hi Alberto,

thx, thats a good idea!
I try to build code for that.
But first I've to thing about Thomas' hint. ;-)


Cheers,

 Bjoern



On 19.09.12 17:17, Scotto Alberto wrote:
> Well, that's normal: you are scanning the whole tickets list again and again, 
> for every user.
> You should invert the nested loops such that you scan the tickets only once.
> 
> Something like this (kind of pseudo-code):
> 
> my $tickets = RT::Tickets->new($RT::SystemUser);
> my @users_with_ticket;
> # let's collect all the users who relate to some ticket
> while (my $t = tickets->next) {
>    push @users_with_ticket, $t->Requestor;
>    push @users_with_ticket, $t->Owner;
>    # push all the other actors
> }
> # now, let's take the complement of the set users_with_ticket
> my $users = RT::Users->new($RT::SystemUser)
> my @users_without_ticket;
> while(my $u = $users->next) {
>    if ($u IS NOT IN $users_with_ticket) push @users_without_ticket, $u;
> }
> 
> The last loop (just a draft) may still be critical, but considering that, in 
> your case study, the bigger number is given by the tickets, I think you're 
> quite safe.
> 
> Regards
> 
> AS
> 
> ________________________________________
> Da: [email protected] 
> [[email protected]] per conto di Björn Schulz 
> [[email protected]]
> Inviato: mercoledì 19 settembre 2012 15.48
> A: [email protected]
> Oggetto: [rt-users]  2. try ;-) Limit user in a perl script
> 
> Hi!
> 
> I try to ask again, because on my producton system it takes a very long
> time to limit users (7 Minutes !!! per user :-(( ).
> 
> I try to search for users with no connections to any ticket and no
> connection to any attachments to delete them later.
> 
> I can't use rt-shredder directly ;-)
> 
> I try this:
> 
> ...
> my $user  = RT::User->new($RT::SystemUser);
> my $users = RT::Users->new($RT::SystemUser);
> my $tix   = RT::Tickets->new($RT::SystemUser);
> 
> 
> $users->FindAllRows ;
> 
> while (my $uid = $users->next ) {
>  my $tickets   = RT::Tickets->new($RT::SystemUser);
>  $user->Load($uid);
>  $tickets->FromSQL('
>     Type = "ticket" AND
>     Watcher ="'.$user->EmailAddress.'"');
> 
>   Delete_User if ! $tickets->Count();
> ...
> 
> 
> 
> But it takes much time (about 7 minutes per user )
> in my system for every user.
> 
> ~500.000 tickets
> ~ 61.100 users
> 
> Is there a better method to limit the user with no tickets and no
> attachments or what am I doing wrong?
> 
> Cheers,
>   Björn
> 
> --------
> Final RT training for 2012 in Atlanta, GA - October 23 & 24
>   http://bestpractical.com/training
> 
> We're hiring! http://bestpractical.com/jobs
> 
> 
> 
> 
> Alberto Scotto
> 
> Blue Reply
> Via Cardinal Massaia, 83
> 10147 - Torino - ITALY
> phone: +39 011 29100
> [email protected]
> www.reply.it
> 
> 
> ________________________________
> 
> --
> The information transmitted is intended for the person or entity to which it 
> is addressed and may contain confidential and/or privileged material. Any 
> review, retransmission, dissemination or other use of, or taking of any 
> action in reliance upon, this information by persons or entities other than 
> the intended recipient is prohibited. If you received this in error, please 
> contact the sender and delete the material from any computer.
> 

--------
Final RT training for 2012 in Atlanta, GA - October 23 & 24
  http://bestpractical.com/training

We're hiring! http://bestpractical.com/jobs

Reply via email to