Re: [dev] Call a GenericAgent-Job from within another Perl-Script

Hallo Marco,
I know this is maybe a bit overdone, but why not simply download your quoted URL
via e.g. lynx (Linux/UNIX) or wget (Windows) ? I use this technique for some workarounds
of this kind. As you did not state how you authenticate to the server, I do not know
whether this will work out for you, but it is worth a try.
Best regards
Stefan
-------- Original Message --------
Subject: [dev] Call a GenericAgent-Job from within another Perl-Script (06-Feb-2007 18:44)
From: Marco Friebe
Hello,
I want to call a GenericAgent-Job from within another Perl-Script. I want do do some work in the otrs database (Oracle) and then call that Agent-Job subsequently.
Like it is done for manual job invocation using URL "http://localhost/otrs/ index.pl?Action=AdminGenericAgent&Subaction=RunNow&Profile=Test" but called from commandline (Cron).
Since I'm a very novize regarding Perl I would be grateful if someone could point me in the right direction. Maybe this problem has already been solved.
Snip*****
use Kernel::Modules::AdminGenericAgent; (presupposed I'm in /opt/otrs)
%ParamList = ("Subaction" => "RunNow", "Profile" => "Test"); Kernel::Modules::AdminGenericAgent::Run(%ParamList);
Snap*****
I saw there is a constructor which needs to be called at first, but no idea how to do this correctly.
And here an extract of AdminGenericAgent.pm
Snip*****
sub new { my $Type = shift; my %Param = @_;
# allocate new hash for object my $Self = {}; bless ($Self, $Type);
foreach (keys %Param) { $Self->{$_} = $Param{$_}; }
# check needed Opjects foreach (qw(ParamObject DBObject TicketObject LayoutObject LogObject ConfigObject)) { if (!$Self->{$_}) { $Self->{LayoutObject}->FatalError(Message => "Got no $_!"); } }
$Self->{PriorityObject} = Kernel::System::Priority->new(%Param); $Self->{StateObject} = Kernel::System::State->new(%Param); $Self->{LockObject} = Kernel::System::Lock->new(%Param); $Self->{GenericAgentObject} = Kernel::System::GenericAgent->new(%Param);
return $Self; } # -- sub Run { my $Self = shift; my %Param = @_; my $Output; # get confid data $Self->{StartHit} = $Self->{ParamObject}->GetParam(Param => 'StartHit') || 1; $Self->{SearchLimit} = $Self->{ConfigObject}->Get('SearchLimit') || 500;
$Self->{SortBy} = $Self->{ParamObject}->GetParam(Param => 'SortBy') || ' Age'; $Self->{Order} = $Self->{ParamObject}->GetParam(Param => 'Order') || ' Down'; $Self->{Profile} = $Self->{ParamObject}->GetParam(Param => 'Profile') || ''; $Self->{SaveProfile} = 1; $Self->{TakeLastSearch} = $Self->{ParamObject}->GetParam(Param => ' TakeLastSearch') || ''; $Self->{SelectTemplate} = $Self->{ParamObject}->GetParam(Param => ' SelectTemplate') || ''; $Self->{EraseTemplate} = $Self->{ParamObject}->GetParam(Param => ' EraseTemplate') || ''; # get db job data my %DBParam = $Self->{GenericAgentObject}->JobGet(Name => $Self->{ Profile}) if ($Self->{Profile});
# run job now if ($Self->{Subaction} eq 'RunNow' && %DBParam) { $Self->{GenericAgentObject}->JobRun( Job => $Self->{Profile}, UserID => 1, ); # redirect return $Self->{LayoutObject}->Redirect( OP => "Action=$Self->{Action}", ); }
# create new job if ($Self->{Subaction} eq 'Add' && $Self->{Profile}) { # insert new profile params $Self->{GenericAgentObject}->JobAdd( Name => $Self->{Profile}, Data => { ScheduleLastRun => '', }, ); # redirect return $Self->{LayoutObject}->Redirect( OP => "Action=$Self->{Action}&Subaction=LoadProfile&Profile=$ Self->{Profile}", ); }
Snap*****
Thanks a lot.
Greetings
Marco
_______________________________________________ OTRS mailing list: dev - Webpage: http://otrs.org/ Archive: http://lists.otrs.org/pipermail/dev To unsubscribe: http://lists.otrs.org/cgi-bin/listinfo/dev

Hello Stefan,
indeed, I considered this method but didn't know how to bypass OTRS authentication. We use standard otrs database authentication.
Please let me know if you have any hack or idea.
Thanks
Marco
Hallo Marco,
I know this is maybe a bit overdone, but why not simply download your quoted URL
via e.g. lynx (Linux/UNIX) or wget (Windows) ? I use this technique for some workarounds
of this kind. As you did not state how you authenticate to the server, I do not know
whether this will work out for you, but it is worth a try.
Best regards
Stefan
-------- Original Message --------
Subject: [dev] Call a GenericAgent-Job from within another Perl-Script (06-Feb-2007 18:44)
From: Marco Friebe
Hello,
I want to call a GenericAgent-Job from within another Perl-Script. I want do do some work in the otrs database (Oracle) and then call that Agent-Job subsequently.
Like it is done for manual job invocation using URL "http://localhost/otrs/ index.pl?Action=AdminGenericAgent&Subaction=RunNow&Profile=Test" but called from commandline (Cron).
Since I'm a very novize regarding Perl I would be grateful if someone could point me in the right direction. Maybe this problem has already been solved.
Snip*****
use Kernel::Modules::AdminGenericAgent; (presupposed I'm in /opt/otrs)
%ParamList = ("Subaction" => "RunNow", "Profile" => "Test"); Kernel::Modules::AdminGenericAgent::Run(%ParamList);
Snap*****
I saw there is a constructor which needs to be called at first, but no idea how to do this correctly.
And here an extract of AdminGenericAgent.pm
Snip*****
sub new { my $Type = shift; my %Param = @_;
# allocate new hash for object my $Self = {}; bless ($Self, $Type);
foreach (keys %Param) { $Self->{$_} = $Param{$_}; }
# check needed Opjects foreach (qw(ParamObject DBObject TicketObject LayoutObject LogObject ConfigObject)) { if (!$Self->{$_}) { $Self->{LayoutObject}->FatalError(Message => "Got no $_!"); } }
$Self->{PriorityObject} = Kernel::System::Priority->new(%Param); $Self->{StateObject} = Kernel::System::State->new(%Param); $Self->{LockObject} = Kernel::System::Lock->new(%Param); $Self->{GenericAgentObject} = Kernel::System::GenericAgent->new(%Param);
return $Self; } # -- sub Run { my $Self = shift; my %Param = @_; my $Output; # get confid data $Self->{StartHit} = $Self->{ParamObject}->GetParam(Param => 'StartHit') || 1; $Self->{SearchLimit} = $Self->{ConfigObject}->Get('SearchLimit') || 500;
$Self->{SortBy} = $Self->{ParamObject}->GetParam(Param => 'SortBy') || ' Age'; $Self->{Order} = $Self->{ParamObject}->GetParam(Param => 'Order') || ' Down'; $Self->{Profile} = $Self->{ParamObject}->GetParam(Param => 'Profile') || ''; $Self->{SaveProfile} = 1; $Self->{TakeLastSearch} = $Self->{ParamObject}->GetParam(Param => ' TakeLastSearch') || ''; $Self->{SelectTemplate} = $Self->{ParamObject}->GetParam(Param => ' SelectTemplate') || ''; $Self->{EraseTemplate} = $Self->{ParamObject}->GetParam(Param => ' EraseTemplate') || ''; # get db job data my %DBParam = $Self->{GenericAgentObject}->JobGet(Name => $Self->{ Profile}) if ($Self->{Profile});
# run job now if ($Self->{Subaction} eq 'RunNow' && %DBParam) { $Self->{GenericAgentObject}->JobRun( Job => $Self->{Profile}, UserID => 1, ); # redirect return $Self->{LayoutObject}->Redirect( OP => "Action=$Self->{Action}", ); }
# create new job if ($Self->{Subaction} eq 'Add' && $Self->{Profile}) { # insert new profile params $Self->{GenericAgentObject}->JobAdd( Name => $Self->{Profile}, Data => { ScheduleLastRun => '', }, ); # redirect return $Self->{LayoutObject}->Redirect( OP => "Action=$Self->{Action}&Subaction=LoadProfile&Profile=$ Self->{Profile}", ); }
Snap*****
Thanks a lot.
Greetings
Marco
_______________________________________________ OTRS mailing list: dev - Webpage: http://otrs.org/ Archive: http://lists.otrs.org/pipermail/dev To unsubscribe: http://lists.otrs.org/cgi-bin/listinfo/dev
_______________________________________________ OTRS mailing list: dev - Webpage: http://otrs.org/ Archive: http://lists.otrs.org/pipermail/dev To unsubscribe: http://lists.otrs.org/cgi-bin/listinfo/dev

Hi Marco, the authentification is really a problem if you want to call the URL. I have no solution for that. I think your GenericAgent-job is written within the GUI, so saved within the DB - that's the problem! If you wrote the job as shell-GenericAgent-job (see Kernel/Config/GenericAgent.pm.example), you can easily run this command from cmd-shell and thus also within a perl-script. I also think that you have more functionality with shell-jobs than with DB-jobs. Also have a look at http://dev.otrs.org/2.1/Kernel/System/GenericAgent.html to see how GenericAgent-jobs can be run within the OTRS-API. I think this could be the best solution, but you'll need to understand OTRS-internas. Bye, Alex Marco Friebe schrieb:
Hello Stefan,
indeed, I considered this method but didn't know how to bypass OTRS authentication. We use standard otrs database authentication.
Please let me know if you have any hack or idea.
Thanks
Marco
Hallo Marco,
I know this is maybe a bit overdone, but why not simply download your quoted URL via e.g. lynx (Linux/UNIX) or wget (Windows) ? I use this technique for some workarounds of this kind. As you did not state how you authenticate to the server, I do not know whether this will work out for you, but it is worth a try.
Best regards
Stefan
-------- Original Message -------- Subject: [dev] Call a GenericAgent-Job from within another Perl-Script (06-Feb-2007 18:44) From: Marco Friebe
To: stefan Hello,
I want to call a GenericAgent-Job from within another Perl-Script. I want do do some work in the otrs database (Oracle) and then call that Agent-Job subsequently.
Like it is done for manual job invocation using URL "http://localhost/otrs/ index.pl?Action=AdminGenericAgent&Subaction=RunNow&Profile=Test" but called from commandline (Cron).
Since I'm a very novize regarding Perl I would be grateful if someone could point me in the right direction. Maybe this problem has already been solved.
Snip*****
use Kernel::Modules::AdminGenericAgent; (presupposed I'm in /opt/otrs)
%ParamList = ("Subaction" => "RunNow", "Profile" => "Test"); Kernel::Modules::AdminGenericAgent::Run(%ParamList);
Snap*****
I saw there is a constructor which needs to be called at first, but no idea how to do this correctly.
And here an extract of AdminGenericAgent.pm
Snip*****
sub new { my $Type = shift; my %Param = @_;
# allocate new hash for object my $Self = {}; bless ($Self, $Type);
foreach (keys %Param) { $Self->{$_} = $Param{$_}; }
# check needed Opjects foreach (qw(ParamObject DBObject TicketObject LayoutObject LogObject ConfigObject)) { if (!$Self->{$_}) { $Self->{LayoutObject}->FatalError(Message => "Got no $_!"); } }
$Self->{PriorityObject} = Kernel::System::Priority->new(%Param); $Self->{StateObject} = Kernel::System::State->new(%Param); $Self->{LockObject} = Kernel::System::Lock->new(%Param); $Self->{GenericAgentObject} = Kernel::System::GenericAgent->new(%Param);
return $Self; } # -- sub Run { my $Self = shift; my %Param = @_; my $Output; # get confid data $Self->{StartHit} = $Self->{ParamObject}->GetParam(Param => 'StartHit') || 1; $Self->{SearchLimit} = $Self->{ConfigObject}->Get('SearchLimit') || 500;
$Self->{SortBy} = $Self->{ParamObject}->GetParam(Param => 'SortBy') || ' Age'; $Self->{Order} = $Self->{ParamObject}->GetParam(Param => 'Order') || ' Down'; $Self->{Profile} = $Self->{ParamObject}->GetParam(Param => 'Profile') || ''; $Self->{SaveProfile} = 1; $Self->{TakeLastSearch} = $Self->{ParamObject}->GetParam(Param => ' TakeLastSearch') || ''; $Self->{SelectTemplate} = $Self->{ParamObject}->GetParam(Param => ' SelectTemplate') || ''; $Self->{EraseTemplate} = $Self->{ParamObject}->GetParam(Param => ' EraseTemplate') || ''; # get db job data my %DBParam = $Self->{GenericAgentObject}->JobGet(Name => $Self->{ Profile}) if ($Self->{Profile});
# run job now if ($Self->{Subaction} eq 'RunNow' && %DBParam) { $Self->{GenericAgentObject}->JobRun( Job => $Self->{Profile}, UserID => 1, ); # redirect return $Self->{LayoutObject}->Redirect( OP => "Action=$Self->{Action}", ); }
# create new job if ($Self->{Subaction} eq 'Add' && $Self->{Profile}) { # insert new profile params $Self->{GenericAgentObject}->JobAdd( Name => $Self->{Profile}, Data => { ScheduleLastRun => '', }, ); # redirect return $Self->{LayoutObject}->Redirect( OP => "Action=$Self->{Action}&Subaction=LoadProfile&Profile=$ Self->{Profile}", ); }
Snap*****
Thanks a lot.
Greetings
Marco
_______________________________________________ OTRS mailing list: dev - Webpage: http://otrs.org/ Archive: http://lists.otrs.org/pipermail/dev To unsubscribe: http://lists.otrs.org/cgi-bin/listinfo/dev
_______________________________________________ OTRS mailing list: dev - Webpage: http://otrs.org/ Archive: http://lists.otrs.org/pipermail/dev To unsubscribe: http://lists.otrs.org/cgi-bin/listinfo/dev
_______________________________________________ OTRS mailing list: dev - Webpage: http://otrs.org/ Archive: http://lists.otrs.org/pipermail/dev To unsubscribe: http://lists.otrs.org/cgi-bin/listinfo/dev
participants (3)
-
Alexander Scholler
-
Marco Friebe
-
Stefan Tröndle / EDV:Systemhaus Tröndle