File: jobviewer

package info (click to toggle)
libanyevent-websocket-client-perl 0.55-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 420 kB
  • sloc: perl: 1,022; sh: 5; makefile: 2
file content (91 lines) | stat: -rwxr-xr-x 1,881 bytes parent folder | download | duplicates (2)
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;