… | |
… | |
60 | our $WARN = sub { |
60 | our $WARN = sub { |
61 | my $msg = $_[0]; |
61 | my $msg = $_[0]; |
62 | $msg =~ s/\n$//; |
62 | $msg =~ s/\n$//; |
63 | warn "$msg\n"; |
63 | warn "$msg\n"; |
64 | }; |
64 | }; |
|
|
65 | |
|
|
66 | sub load_func($) { |
|
|
67 | my $func = $_[0]; |
|
|
68 | |
|
|
69 | unless (defined &$func) { |
|
|
70 | my $pkg = $func; |
|
|
71 | do { |
|
|
72 | $pkg =~ s/::[^:]+$// |
|
|
73 | or return sub { die "unable to resolve '$func'" }; |
|
|
74 | eval "require $pkg"; |
|
|
75 | } until defined &$func; |
|
|
76 | } |
|
|
77 | |
|
|
78 | \&$func |
|
|
79 | } |
65 | |
80 | |
66 | sub nonce($) { |
81 | sub nonce($) { |
67 | my $nonce; |
82 | my $nonce; |
68 | |
83 | |
69 | if (open my $fh, "</dev/urandom") { |
84 | if (open my $fh, "</dev/urandom") { |
… | |
… | |
286 | } |
301 | } |
287 | |
302 | |
288 | sub initialise_node(@) { |
303 | sub initialise_node(@) { |
289 | my ($noderef, @others) = @_; |
304 | my ($noderef, @others) = @_; |
290 | |
305 | |
291 | @others = @{ $AnyEvent::MP::Config::CFG{seeds} } |
306 | my $profile = defined $noderef ? {} : \%AnyEvent::MP::Config::CFG; |
|
|
307 | |
|
|
308 | $noderef = $profile->{noderef} |
|
|
309 | unless defined $noderef; |
|
|
310 | |
|
|
311 | @others = @{ $profile->{seeds} } |
292 | unless @others; |
312 | unless @others; |
293 | |
313 | |
294 | if ($noderef =~ /^slave\/(.*)$/) { |
314 | if ($noderef =~ /^slave\/(.*)$/) { |
295 | $SLAVE = AE::cv; |
315 | $SLAVE = AE::cv; |
296 | my $name = $1; |
316 | my $name = $1; |
… | |
… | |
342 | $_->send (["", iam => $NODE]) |
362 | $_->send (["", iam => $NODE]) |
343 | for values %NODE; |
363 | for values %NODE; |
344 | |
364 | |
345 | $SLAVE = 1; |
365 | $SLAVE = 1; |
346 | } |
366 | } |
|
|
367 | |
|
|
368 | (load_func $_)->() |
|
|
369 | for @{ $profile->{services} }; |
347 | } |
370 | } |
348 | |
371 | |
349 | ############################################################################# |
372 | ############################################################################# |
350 | # node moniotirng and info |
373 | # node monitoring and info |
351 | |
374 | |
352 | sub _uniq_nodes { |
375 | sub _uniq_nodes { |
353 | my %node; |
376 | my %node; |
354 | |
377 | |
355 | @node{values %NODE} = values %NODE; |
378 | @node{values %NODE} = values %NODE; |
… | |
… | |
412 | } |
435 | } |
413 | } |
436 | } |
414 | |
437 | |
415 | ############################################################################# |
438 | ############################################################################# |
416 | # self node code |
439 | # self node code |
417 | |
|
|
418 | sub load_func($) { |
|
|
419 | my $func = $_[0]; |
|
|
420 | |
|
|
421 | unless (defined &$func) { |
|
|
422 | my $pkg = $func; |
|
|
423 | do { |
|
|
424 | $pkg =~ s/::[^:]+$// |
|
|
425 | or return sub { die "unable to resolve '$func'" }; |
|
|
426 | eval "require $pkg"; |
|
|
427 | } until defined &$func; |
|
|
428 | } |
|
|
429 | |
|
|
430 | \&$func |
|
|
431 | } |
|
|
432 | |
440 | |
433 | our %node_req = ( |
441 | our %node_req = ( |
434 | # internal services |
442 | # internal services |
435 | |
443 | |
436 | # monitoring |
444 | # monitoring |