You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by zw...@apache.org on 2011/03/22 01:01:39 UTC

svn commit: r1084033 - in /trafficserver/traffic/trunk/contrib/perl/AdminClient: Makefile.PL lib/Apache/TS/AdminClient.pm

Author: zwoop
Date: Tue Mar 22 00:01:38 2011
New Revision: 1084033

URL: http://svn.apache.org/viewvc?rev=1084033&view=rev
Log:
TS-715 Fixes and cleanup for Perl client. Author: Billy Vierra

Modified:
    trafficserver/traffic/trunk/contrib/perl/AdminClient/Makefile.PL
    trafficserver/traffic/trunk/contrib/perl/AdminClient/lib/Apache/TS/AdminClient.pm

Modified: trafficserver/traffic/trunk/contrib/perl/AdminClient/Makefile.PL
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/contrib/perl/AdminClient/Makefile.PL?rev=1084033&r1=1084032&r2=1084033&view=diff
==============================================================================
--- trafficserver/traffic/trunk/contrib/perl/AdminClient/Makefile.PL (original)
+++ trafficserver/traffic/trunk/contrib/perl/AdminClient/Makefile.PL Tue Mar 22 00:01:38 2011
@@ -14,7 +14,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-use 5.010001;
+require 5.006;
 use ExtUtils::MakeMaker;
 # See lib/ExtUtils/MakeMaker.pm for details of how to influence
 # the contents of the Makefile that is written.

Modified: trafficserver/traffic/trunk/contrib/perl/AdminClient/lib/Apache/TS/AdminClient.pm
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/contrib/perl/AdminClient/lib/Apache/TS/AdminClient.pm?rev=1084033&r1=1084032&r2=1084033&view=diff
==============================================================================
--- trafficserver/traffic/trunk/contrib/perl/AdminClient/lib/Apache/TS/AdminClient.pm (original)
+++ trafficserver/traffic/trunk/contrib/perl/AdminClient/lib/Apache/TS/AdminClient.pm Tue Mar 22 00:01:38 2011
@@ -27,169 +27,190 @@ use IO::Socket::UNIX;
 use IO::Select;
 our $VERSION = "0.01";
 
-use constant { TS_FILE_READ => 0,
-               TS_FILE_WRITE => 1,
-               TS_RECORD_SET => 2,
-               TS_RECORD_GET => 3,
-               TS_PROXY_STATE_GET => 4,
-               TS_PROXY_STATE_SET => 5,
-               TS_RECONFIGURE => 6,
-               TS_RESTART => 7,
-               TS_BOUNCE => 8,
-               TS_EVENT_RESOLVE => 9,
-               TS_EVENT_GET_MLT => 10,
-               TS_EVENT_ACTIVE => 11,
-               TS_EVENT_REG_CALLBACK => 12,
-               TS_EVENT_UNREG_CALLBACK => 13,
-               TS_EVENT_NOTIFY => 14,
-               TS_SNAPSHOT_TAKE => 15,
-               TS_SNAPSHOT_RESTORE => 16,
-               TS_SNAPSHOT_REMOVE => 17,
-               TS_SNAPSHOT_GET_MLT => 18,
-               TS_DIAGS => 19,
-               TS_STATS_RESET => 20,
-               TS_ENCRYPT_TO_FILE => 21
+use constant {
+    TS_FILE_READ            => 0,
+    TS_FILE_WRITE           => 1,
+    TS_RECORD_SET           => 2,
+    TS_RECORD_GET           => 3,
+    TS_PROXY_STATE_GET      => 4,
+    TS_PROXY_STATE_SET      => 5,
+    TS_RECONFIGURE          => 6,
+    TS_RESTART              => 7,
+    TS_BOUNCE               => 8,
+    TS_EVENT_RESOLVE        => 9,
+    TS_EVENT_GET_MLT        => 10,
+    TS_EVENT_ACTIVE         => 11,
+    TS_EVENT_REG_CALLBACK   => 12,
+    TS_EVENT_UNREG_CALLBACK => 13,
+    TS_EVENT_NOTIFY         => 14,
+    TS_SNAPSHOT_TAKE        => 15,
+    TS_SNAPSHOT_RESTORE     => 16,
+    TS_SNAPSHOT_REMOVE      => 17,
+    TS_SNAPSHOT_GET_MLT     => 18,
+    TS_DIAGS                => 19,
+    TS_STATS_RESET          => 20,
+    TS_ENCRYPT_TO_FILE      => 21
 };
 
 # We treat both REC_INT and REC_COUNTER the same here
-use constant { TS_REC_INT => 0,
-               TS_REC_COUNTER => 0,
-               TS_REC_FLOAT => 2,
-               TS_REC_STRING => 3
+use constant {
+    TS_REC_INT     => 0,
+    TS_REC_COUNTER => 0,
+    TS_REC_FLOAT   => 2,
+    TS_REC_STRING  => 3
 };
 
-use constant { TS_ERR_OKAY => 0,
-               TS_ERR_READ_FILE => 1,
-               TS_ERR_WRITE_FILE => 2,
-               TS_ERR_PARSE_CONFIG_RULE => 3,
-               TS_ERR_INVALID_CONFIG_RULE => 4,
-               TS_ERR_NET_ESTABLISH => 5,
-               TS_ERR_NET_READ => 6,
-               TS_ERR_NET_WRITE => 7,
-               TS_ERR_NET_EOF => 8,
-               TS_ERR_NET_TIMEOUT => 9,
-               TS_ERR_SYS_CALL => 10,
-               TS_ERR_PARAMS => 11,
-               TS_ERR_FAIL => 12
+use constant {
+    TS_ERR_OKAY                => 0,
+    TS_ERR_READ_FILE           => 1,
+    TS_ERR_WRITE_FILE          => 2,
+    TS_ERR_PARSE_CONFIG_RULE   => 3,
+    TS_ERR_INVALID_CONFIG_RULE => 4,
+    TS_ERR_NET_ESTABLISH       => 5,
+    TS_ERR_NET_READ            => 6,
+    TS_ERR_NET_WRITE           => 7,
+    TS_ERR_NET_EOF             => 8,
+    TS_ERR_NET_TIMEOUT         => 9,
+    TS_ERR_SYS_CALL            => 10,
+    TS_ERR_PARAMS              => 11,
+    TS_ERR_FAIL                => 12
 };
 
-
 #
 # Constructor
 #
 sub new {
-  my $class = shift @_;
-  my $self = {};
-  my %args = @_;
+    my ( $class, %args ) = @_;
+    my $self = {};
 
-  $self->{_socket_path} = $args{socket_path} || "/usr/local/var/trafficserver/mgmtapisocket"; # TODO: fix on install
-  $self->{_socket} = undef;
+    $self->{_socket_path} = $args{socket_path} || _find_socket();
+    $self->{_socket} = undef;
+    croak
+"Unable to locate socket, please pass socket_pass with the management api socket location to Apache::TS::AdminClient"
+      if ( !$self->{_socket_path} );
+    if (   ( !-r $self->{_socket_path} )
+        or ( !-w $self->{_socket_path} )
+        or ( !-S $self->{_socket_path} ) )
+    {
+        croak "Unable to open $self->{_socket_path} for reads or writes";
 
-  if ( (! -r $self->{_socket_path}) or (! -w $self->{_socket_path}) or (! -S $self->{_socket_path}) ) {
-    croak "Unable to open $self->{_socket_path} for reads or writes";
-    # see croak in "sub open_socket()" for other source of carp errors
-  }
+        # see croak in "sub open_socket()" for other source of carp errors
+    }
 
-  $self->{_select} = IO::Select->new();
-  bless $self, $class;
+    $self->{_select} = IO::Select->new();
+    bless $self, $class;
 
-  $self->open_socket();
+    $self->open_socket();
 
-  return $self;
+    return $self;
+}
+
+sub _find_socket {
+    my @sockets_def = (
+        '/usr/local/var/trafficserver/mgmtapisocket',
+        '/var/trafficserver/mgmtapisocket'
+    );
+    foreach my $socket (@sockets_def) {
+        return $socket if ( -S $socket );
+    }
+    return undef;
 }
 
 #
 # Destructor
 #
 sub DESTROY {
-  my $self = shift;
-  return $self->close_socket();
+    my $self = shift;
+    return $self->close_socket();
 }
 
-
 #
 # Open the socket (Unix domain)
 #
 sub open_socket {
-  my $self = shift;
-  my %args = @_;
+    my $self = shift;
+    my %args = @_;
 
-  if (defined($self->{_socket})) {
-    if ($args{force} || $args{reopen}) {
-      $self->close_socket();
-    } else {
-      return undef ;
+    if ( defined( $self->{_socket} ) ) {
+        if ( $args{force} || $args{reopen} ) {
+            $self->close_socket();
+        }
+        else {
+            return undef;
+        }
     }
-  }
-
 
-  $self->{_socket} = IO::Socket::UNIX->new(Type => SOCK_STREAM, Peer => $self->{_socket_path}) or croak ("Error opening socket - $@");
+    $self->{_socket} = IO::Socket::UNIX->new(
+        Type => SOCK_STREAM,
+        Peer => $self->{_socket_path}
+    ) or croak("Error opening socket - $@");
 
-  return undef unless defined($self->{_socket});
-  $self->{_select}->add($self->{_socket});
+    return undef unless defined( $self->{_socket} );
+    $self->{_select}->add( $self->{_socket} );
 
-  return $self;
+    return $self;
 }
 
 sub close_socket {
-  my $self = shift;
+    my $self = shift;
 
-  # if socket doesn't exist, return as there's nothing to do.
-  return unless defined($self->{_socket});
+    # if socket doesn't exist, return as there's nothing to do.
+    return unless defined( $self->{_socket} );
 
-  # gracefully close socket.
-  $self->{_select}->remove($self->{_socket});
-  $self->{_socket}->close();
-  $self->{_socket} = undef;
+    # gracefully close socket.
+    $self->{_select}->remove( $self->{_socket} );
+    $self->{_socket}->close();
+    $self->{_socket} = undef;
 
-  return $self; 
+    return $self;
 }
 
-
 #
 # Get (read) a stat out of the local manager. Note that the assumption is
 # that you are calling this with an existing stats "name".
 #
 sub get_stat {
-  my $self = shift;
-  my $stat = shift;
-  my $res = "";
-  my $max_read_attempts = 25;
-
-  return undef unless defined($self->{_socket});
-  return undef unless $self->{_select}->can_write(10);
-
-  # This is a total hack for now, we need to wrap this into the proper mgmt API library.
-  $self->{_socket}->print(pack("sla*", TS_RECORD_GET, length($stat)), $stat);
-  
-  while ($res eq "") {
-    return undef if ($max_read_attempts-- < 0);
-    return undef unless $self->{_select}->can_read(10);
-
-    my $status = $self->{_socket}->sysread($res, 1024);
-    return undef unless defined($status) || ($status == 0);
-    
-  }
-  my @resp = unpack("sls", $res);
-  return undef unless (scalar(@resp) == 3);
-
-  if ($resp[0] == TS_ERR_OKAY) {
-    if ($resp[2] < TS_REC_FLOAT) {
-      @resp = unpack("slsl", $res);
-      return undef unless (scalar(@resp) == 4);
-      return int($resp[3]);
-    } elsif ($resp[2] == TS_REC_FLOAT) {
-      @resp = unpack("slsf", $res);
-      return undef unless (scalar(@resp) == 4);
-      return $resp[3];
-    } elsif ($resp[2] == TS_REC_STRING) {
-      @resp = unpack("slsa*", $res);
-      return undef unless (scalar(@resp) == 4);
-      return float($resp[3]);
+    my ( $self, $stat ) = @_;
+    my $res               = "";
+    my $max_read_attempts = 25;
+
+    return undef unless defined( $self->{_socket} );
+    return undef unless $self->{_select}->can_write(10);
+
+# This is a total hack for now, we need to wrap this into the proper mgmt API library.
+    $self->{_socket}
+      ->print( pack( "sla*", TS_RECORD_GET, length($stat) ), $stat );
+
+    while ( $res eq "" ) {
+        return undef if ( $max_read_attempts-- < 0 );
+        return undef unless $self->{_select}->can_read(10);
+
+        my $status = $self->{_socket}->sysread( $res, 1024 );
+        return undef unless defined($status) || ( $status == 0 );
+
     }
-  }
-    
-  return undef;
+    my @resp = unpack( "sls", $res );
+    return undef unless ( scalar(@resp) == 3 );
+
+    if ( $resp[0] == TS_ERR_OKAY ) {
+        if ( $resp[2] < TS_REC_FLOAT ) {
+            @resp = unpack( "slsl", $res );
+            return undef unless ( scalar(@resp) == 4 );
+            return int( $resp[3] );
+        }
+        elsif ( $resp[2] == TS_REC_FLOAT ) {
+            @resp = unpack( "slsf", $res );
+            return undef unless ( scalar(@resp) == 4 );
+            return $resp[3];
+        }
+        elsif ( $resp[2] == TS_REC_STRING ) {
+            @resp = unpack( "slsa*", $res );
+            return undef unless ( scalar(@resp) == 4 );
+            return $resp[3];
+        }
+    }
+
+    return undef;
 }
 
 1;