/[Sack]/trunk/lib/Sack/Node.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /trunk/lib/Sack/Node.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 93 by dpavlin, Sat Oct 3 21:43:34 2009 UTC revision 142 by dpavlin, Wed Oct 7 20:44:07 2009 UTC
# Line 10  use Data::Dump qw(dump); Line 10  use Data::Dump qw(dump);
10  use Storable;  use Storable;
11  use Time::HiRes qw(time);  use Time::HiRes qw(time);
12    
13    use lib 'lib';
14    use base qw(Sack::Pid);
15    use Sack::Color;
16    use Sack;
17    
18  sub new {  sub new {
19          my $class = shift;          my $class = shift;
20          my $port = shift;          my $port = shift;
21          my $self  = bless { port => $port }, $class;          my $self  = bless { port => $port }, $class;
22    
23          my $pid_path = "/tmp/sack.$port.pid";          $self->port_pid( $port );
         if ( -e $pid_path ) {  
                 my $pid = read_file $pid_path;  
                 kill 9, $pid && warn "[$port] kill old $pid\n";  
         }  
         write_file $pid_path, $$;  
24    
25          my $sock = IO::Socket::INET->new(          my $sock = IO::Socket::INET->new(
26                  Listen    => SOMAXCONN,                  Listen    => SOMAXCONN,
# Line 31  sub new { Line 30  sub new {
30                  Reuse     => 1,                  Reuse     => 1,
31          ) or die "[$port] die $!";          ) or die "[$port] die $!";
32    
33          warn "[$port] accept\n";          my $client;
   
         my $client = $sock->accept();  
   
         warn "[$port] connect from ", $client->peerhost, $/;  
34    
35          while ( 1 ) {          while ( 1 ) {
36    
37                    if ( ! $client ) {
38                            warn "[$port] accept $Sack::VERSION\n";
39                            $client = $sock->accept();
40                            warn "[$port] connect from ", $client->peerhost, $/;
41                    }
42    
43                  my $data = Storable::fd_retrieve( $client );                  my $data = Storable::fd_retrieve( $client );
44                  warn "[$port] <<<< ", dump( $data );  
45                    if ( defined $data->{data} ) {
46                            warn "# [$port] <<<< data\n" if $self->{debug};
47                    } else {
48                            warn "# [$port] <<<< ", dump( $data ), $/ if $self->{debug};
49                    }
50    
51                  my $result;                  my $result;
52    
53                  if ( $data->{view} ) {                  if ( $data->{view} ) {
54                          $result = { view => $self->view( $data->{view} ) };                          $result = $self->view( $data->{view} );
55                  } elsif ( $data->{data} ) {                  } elsif ( $data->{data} ) {
56                          $self->{data} = delete $data->{data};                          $self->{data} = delete $data->{data};
57                          $result = { data => 'loaded' };                          $result = { data => 'loaded' };
58                  } elsif ( $data->{exit} ) {                  } elsif ( $data->{exit} ) {
59                          warn "[$port] exit";                          warn "[$port] exit\n";
60                            close $sock;
61                          exit;                          exit;
62                    } elsif ( $data->{restart} ) {
63                            warn "[$port] restart";
64                            close $sock;
65                            exec "$0 $port";
66                    } elsif ( $data->{info} ) {
67                            $result = {
68                                    version => $Sack::VERSION,
69                                    size => $#{ $self->{data} } + 1,
70                                    reports => $self->{reports},
71                            };
72                    } elsif ( my $sh = delete $data->{sh} ) {
73                            $result = { sh => scalar `$sh` };
74                    } elsif ( defined $data->{debug} ) {
75                            $self->{debug} = $data->{debug};
76                  } else {                  } else {
77                          warn "[$port] UNKNOWN ", dump( $data ), $/;                          warn "[$port] UNKNOWN ", dump( $data ), $/;
78                          $result = { 'error' => $data };                          $result = { 'error' => $data };
79                  }                  }
80    
81                  warn "[$port] >>>>\n";                  warn "# [$port] >>>>\n";
82                  Storable::store_fd( $result => $client );                  Storable::store_fd( $result => $client );
83          }          }
84    
# Line 102  sub view { Line 123  sub view {
123          };          };
124    
125          my $dt = time - $start_t;          my $dt = time - $start_t;
126          my $report = [ $self->{port}, $affected, $dt, scalar $self->{data} / $dt ];          my $report = [ $self->{port}, $affected, $dt, $affected / $dt ];
127          warn sprintf "[%d] %d affected in %1.4fs %.2f/s\n", @$report;          warn sprintf "[%d] %d affected in %1.4fs %.2f/s\n", @$report;
128    
129          warn "out ", dump( $out );          push @{ $self->{reports} }, "$affected in ${dt}s";
130    
131          return $out;  #       warn "# out ", dump( $out );
132    
133            return {
134                    out => $out,
135            };
136  }  }
137    
138  1;  1;

Legend:
Removed from v.93  
changed lines
  Added in v.142

  ViewVC Help
Powered by ViewVC 1.1.26