Gearman::Driver::Console::Basic - Provides basic console commands


Gearman-Driver documentation Contained in the Gearman-Driver distribution.

Index


Code Index:

NAME

Top

Gearman::Driver::Console::Basic - Provides basic console commands

DESCRIPTION

Top

This implements the basic management console commands like status, quit, shutdown, ...

COMMANDS

Top

status

Parameters: none

    status
    GDExamples::Convert::convert_to_jpeg  0  5  0  2010-01-29T20:37:17  1970-01-01T00:00:00
    GDExamples::Convert::convert_to_gif   0  5  0  2010-01-29T20:37:12  2010-01-29T20:37:12   some error
    .

Columns are separated by at least two spaces in this order:

* job_name
* min_processes
* max_processes
* current_processes
* last_run
* last_error
* last_error_message

set_min_processes

Parameters: job_name min_processes

    set_min_processes asdf 5
    ERR invalid_job_name: asdf
    set_min_processes GDExamples::Convert::convert_to_jpeg ten
    ERR invalid_value: min_processes must be >= 0
    set_min_processes GDExamples::Convert::convert_to_jpeg 10
    ERR invalid_value: min_processes must be smaller than max_processes
    set_min_processes GDExamples::Convert::convert_to_jpeg 5
    OK
    .

set_max_processes

Parameters: job_name max_processes

    set_max_processes asdf 5
    ERR invalid_job_name: asdf
    set_max_processes GDExamples::Convert::convert_to_jpeg ten
    ERR invalid_value: max_processes must be >= 0
    set_max_processes GDExamples::Convert::convert_to_jpeg 0
    ERR invalid_value: max_processes must be greater than min_processes
    set_max_processes GDExamples::Convert::convert_to_jpeg 6
    OK
    .

set_processes

Parameters: job_name min_processes max_processes

    set_processes asdf 1 1
    ERR invalid_job_name: asdf
    set_processes GDExamples::Convert::convert_to_jpeg ten ten
    ERR invalid_value: min_processes must be >= 0
    set_processes GDExamples::Convert::convert_to_jpeg 1 ten
    ERR invalid_value: max_processes must be >= 0
    set_processes GDExamples::Convert::convert_to_jpeg 5 1
    ERR invalid_value: max_processes must be greater than min_processes
    set_processes GDExamples::Convert::convert_to_jpeg 1 5
    OK
    .

show

Parameters: job_name

    show GDExamples::Convert::convert_to_jpeg
    GDExamples::Convert::convert_to_jpeg  0  5  0  1970-01-01T00:00:00  1970-01-01T00:00:00
    3662
    3664
    3663
    .
    show GDExamples::Convert::convert_to_gif
    GDExamples::Convert::convert_to_gif  0  5  0  1970-01-01T00:00:00  1970-01-01T00:00:00
    3665
    .

kill

Parameters: pid [<pid> <pid> ...]

    kill 1
    ERR invalid_value: the given PID(s) do not belong to us
    kill 3662
    OK
    .

killall

Kills all childs/pids of given job.

Parameters: job_name [<job_name> <job_name> ...]

    killall GDExamples::Convert::convert_to_jpeg
    OK
    .

It also accepts * as parameter to kill all jobs, so be careful with that!

quit

Parameters: none

Closes your connection gracefully.

shutdown

Parameters: none

Shuts Gearman::Driver down.

AUTHOR

Top

See Gearman::Driver.

COPYRIGHT AND LICENSE

Top

SEE ALSO

Top

* Gearman::Driver
* Gearman::Driver::Adaptor
* Gearman::Driver::Console
* Gearman::Driver::Console::Client
* Gearman::Driver::Job
* Gearman::Driver::Job::Method
* Gearman::Driver::Loader
* Gearman::Driver::Observer
* Gearman::Driver::Worker

Gearman-Driver documentation Contained in the Gearman-Driver distribution.
package Gearman::Driver::Console::Basic;

use Moose::Role;
use DateTime;
use Time::HiRes;

sub status {
    my ($self) = @_;

    # get maximum lengths
    my @max = ( 0, 1, 1, 1, 1, 1, 1 );
    foreach my $job ( $self->driver->get_jobs ) {
        my $lasterror_msg = $job->lasterror_msg;
        $max[0] = length $job->name            if $max[0] < length $job->name;
        $max[1] = length $job->min_processes   if $max[1] < length $job->min_processes;
        $max[2] = length $job->max_processes   if $max[2] < length $job->max_processes;
        $max[3] = length $job->count_processes if $max[3] < length $job->count_processes;
        $max[4] = length $job->lastrun         if $max[4] < length $job->lastrun;
        $max[5] = length $job->lasterror       if $max[5] < length $job->lasterror;
    }

    my @result = ();
    foreach my $job ( $self->driver->get_jobs ) {
        my $lasterror_msg = $job->lasterror_msg;
        chomp $lasterror_msg;
        push @result,
          sprintf(
            "%-$max[0]s  %$max[1]d  %$max[2]d  %$max[3]d  %$max[4]s  %$max[5]s  %s",
            $job->name, $job->min_processes, $job->max_processes, $job->count_processes,
            DateTime->from_epoch( epoch => $job->lastrun ),
            DateTime->from_epoch( epoch => $job->lasterror ),
            $lasterror_msg ? "ERROR: $lasterror_msg" : ""
          );
    }

    return @result;
}

sub set_min_processes {
    my ( $self, $job_name, $min_processes ) = @_;

    my $job = $self->get_job($job_name);

    if ( !defined($min_processes) || $min_processes !~ /^\d+$/ || $min_processes < 0 ) {
        die "ERR invalid_value: min_processes must be >= 0\n";
    }

    if ( $min_processes > $job->max_processes ) {
        die "ERR invalid_value: min_processes must be smaller than max_processes\n";
    }

    $job->min_processes($min_processes);

    return "OK";
}

sub set_max_processes {
    my ( $self, $job_name, $max_processes ) = @_;

    my $job = $self->get_job($job_name);

    if ( !defined($max_processes) || $max_processes !~ /^\d+$/ || $max_processes < 0 ) {
        die "ERR invalid_value: max_processes must be >= 0\n";
    }

    if ( $max_processes < $job->min_processes ) {
        die "ERR invalid_value: max_processes must be greater than min_processes\n";
    }

    $job->max_processes($max_processes);

    return "OK";
}

sub set_processes {
    my ( $self, $job_name, $min_processes, $max_processes ) = @_;

    my $job = $self->get_job($job_name);

    if ( !defined($min_processes) || $min_processes !~ /^\d+$/ || $min_processes < 0 ) {
        die "ERR invalid_value: min_processes must be >= 0\n";
    }

    if ( !defined($max_processes) || $max_processes !~ /^\d+$/ || $max_processes < 0 ) {
        die "ERR invalid_value: max_processes must be >= 0\n";
    }

    if ( $max_processes < $min_processes ) {
        die "ERR invalid_value: max_processes must be greater than min_processes\n";
    }

    $job->min_processes($min_processes);
    $job->max_processes($max_processes);

    return "OK";
}

sub show {
    my ( $self, $job_name ) = @_;

    my $job = $self->get_job($job_name);

    my @result = ();

    my $lasterror_msg = $job->lasterror_msg;
    chomp $lasterror_msg;

    push @result,
      sprintf(
        "%s  %d  %d  %d  %s  %s  %s",
        $job->name, $job->min_processes, $job->max_processes, $job->count_processes,
        DateTime->from_epoch( epoch => $job->lastrun ),
        DateTime->from_epoch( epoch => $job->lasterror ),
        $lasterror_msg ? "ERROR: $lasterror_msg" : ""
      );

    push @result, $job->get_pids;

    return @result;
}

sub kill {
    my ( $self, @pids ) = @_;

    my @valid_pids = ();
    foreach my $job ( $self->driver->get_jobs ) {
        my @job_pids = $job->get_pids;
        foreach my $pid (@pids) {
            if ( grep $_ eq $pid, @job_pids ) {
                push @valid_pids, $pid;
            }
        }
    }

    die "ERR invalid_value: the given PID(s) do not belong to us\n" unless @valid_pids;

    CORE::kill 15, @valid_pids;

    return "OK";
}

sub killall {
    my ( $self, @job_names ) = @_;

    die "ERR invalid_value: no job_names given\n" unless scalar(@job_names);

    my $kill = sub {
        my ($job) = @_;
        my @pids = $job->get_pids;
        CORE::kill 15, @pids;
        Time::HiRes::usleep(50);    # prevent POE from freaking out
    };

    if ( defined $job_names[0] && $job_names[0] eq '*' && scalar(@job_names) == 1 ) {
        foreach my $job ( $self->driver->get_jobs ) {
            $kill->($job);
        }
    }

    else {
        foreach my $job_name (@job_names) {
            my $job = $self->get_job($job_name);
            $kill->($job);
        }
    }

    return "OK";
}

sub shutdown {
    my ($self) = @_;
    $self->driver->shutdown;
}

no Moose::Role;

1;