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 2010/02/23 22:34:36 UTC
svn commit: r915528 -
/incubator/trafficserver/traffic/trunk/contrib/AdminClient.pm
Author: zwoop
Date: Tue Feb 23 21:34:36 2010
New Revision: 915528
URL: http://svn.apache.org/viewvc?rev=915528&view=rev
Log:
TS-205: Add AdminClient.pm "module" to contrib (for now, move later).
Added:
incubator/trafficserver/traffic/trunk/contrib/AdminClient.pm
Added: incubator/trafficserver/traffic/trunk/contrib/AdminClient.pm
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/contrib/AdminClient.pm?rev=915528&view=auto
==============================================================================
--- incubator/trafficserver/traffic/trunk/contrib/AdminClient.pm (added)
+++ incubator/trafficserver/traffic/trunk/contrib/AdminClient.pm Tue Feb 23 21:34:36 2010
@@ -0,0 +1,133 @@
+############################################################################
+#
+# Simple Apache Traffic Server client object, to communicate with the local manager.
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+# Example usage:
+# #!/usr/bin/perl
+#
+# use Apache::TS::AdminClient;
+#
+# my $cli = $cli = new Apache::TS::AdminClient;
+# my $val = $cli->get_stat("proxy.process.http.avg_transactions_per_client_connection:");
+#
+package Apache::TS::AdminClient;
+
+use warnings;
+use strict;
+
+use IO::Socket::UNIX;
+use IO::Select;
+
+
+#
+# Constructor
+#
+sub new {
+ my $proto = shift;
+ my $class = ref($proto) || $proto;
+ my $self = {};
+ my %args = @_;
+
+ $self->{_socket_path} = $args{socket_path} || "/usr/local/var/trafficserver/cli"; # ToDo: fix on install
+ $self->{_socket} = undef;
+ $self->{_select} = IO::Select->new();
+ bless $self, $class;
+
+ $self->open_socket();
+ return $self;
+}
+
+
+#
+# Destructor
+#
+sub DESTROY {
+ my $self = shift;
+
+ $self->close_socket();
+}
+
+
+#
+# Open the socket (Unix domain)
+#
+sub open_socket {
+ my $self = shift;
+ my %args = @_;
+
+ if (defined($self->{_socket})) {
+ if ($args{force} || $args{reopen}) {
+ $self->close_socket();
+ } else {
+ return 0
+ }
+ }
+
+ $self->{_socket} = IO::Socket::UNIX->new(Type => SOCK_STREAM,
+ Peer => $self->{_socket_path});
+ return 0 unless defined($self->{_socket});
+ $self->{_select}->add($self->{_socket});
+
+ return 1;
+}
+
+sub close_socket {
+ my $self = shift;
+
+ return 0 unless defined($self->{_socket});
+ $self->{_select}->remove($self->{_socket});
+ $self->{_socket}->close();
+ $self->{_socket} = undef;
+}
+
+
+#
+# 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);
+ $self->{_socket}->print("b get $stat\0");
+
+ 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);
+
+ $res =~ s/\0+$//;
+ $res =~ s/^\0+//;
+ }
+
+ my @parts = split(/;/, $res);
+
+ return undef unless (scalar(@parts) == 3);
+ return $parts[2] if ($parts[0] eq "1");
+ return undef;
+}
+
+1;