1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
|
#!/usr/bin/perl
use strict;
use warnings;
use AnyEvent;
use JSON qw( from_json );
use AnyEvent::WebSocket::Client 0.12;
use LWP::UserAgent;
use URI;
use Text::Table;
my $uri = URI->new("http://localhost:3000");
if(@ARGV == 0)
{
$uri->path("/server.json");
my $ua = LWP::UserAgent->new;
my $res = $ua->get($uri);
die $res->status_line unless $res->is_success;
my $data = from_json($res->decoded_content);
my $table = Text::Table->new( 'id', 'command' );
foreach my $server (sort keys %$data)
{
foreach my $id (sort keys %{ $data->{$server} })
{
$table->load([ "$server:$id", join(' ', '%', @{ $data->{$server}->{$id}}) ]);
}
}
print $table;
print "\n";
print "usage: $0 [ id ]\n";
exit;
}
my($server, $id) = split /:/, shift @ARGV;
unless(defined $server && defined $id)
{
print "usage: $0 [ id ]\n";
exit 2;
}
$uri->path("/job/$server/$id/json");
my $ua = LWP::UserAgent->new;
my $res = $ua->get($uri);
die $res->status_line unless $res->is_success;
my $job = from_json($res->decoded_content);
my $done = AnyEvent->condvar;
print(join(' ', '%', @{ $job->{command} }), "\n");
process_message($_) for @{ $job->{events} };
sub process_message
{
my $msg = shift;
if($msg->{type} eq 'out')
{
print $msg->{data}, "\n";
}
elsif($msg->{type} eq 'err')
{
print $msg->{data}, "\n";
}
elsif($msg->{type} eq 'exit')
{
print "EXIT: " . $msg->{exit};
print " SIGNAL: " . $msg->{signal} if $msg->{signal};
print "\n";
}
elsif($msg->{type} eq 'error')
{
print "ERROR: " . $msg->{data}, "\n";
}
elsif($msg->{type} eq 'closed')
{
print "CONNECTION CLOSED", "\n";
$done->send;
}
}
my $ws = AnyEvent::WebSocket::Client->new->connect($job->{event_url})->recv;
$ws->on(each_message => sub {
my $msg = from_json( pop->decoded_body );
process_message($msg);
});
$done->recv;
|