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