The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl

use strict;
use warnings;

use YAML::XS;
use Sys::Hostname;

use Hermes;
use Vulcan::OptConf;

$| ++;

=head1 SYNOPSIS

 $0 [list of nodes]

=cut
my ( $option, %seco );
BEGIN { $option = Vulcan::OptConf->load(); %seco = $option->dump( 'seco' ); }

use lib $seco{lib};
use SECO::Conf::Auto;

my $range = Hermes->new( $option->dump( 'range') );
my $db = $range->db;
my ( %node, %cluster ) = SECO::Conf::Auto->new( $seco{conf} )->search
(
    @ARGV ? map { $range->load( $_ )->list } @ARGV : Sys::Hostname::hostname()
);

for my $node ( keys %node )
{
    if ( my @info = @{ $node{$node} } )
    {
        push @{ $cluster{seco}{ $info[0] . $info[2] . '@' . $info[1] } }, $node;
        delete $node{$node};
    }

    if ( my @cluster = $db->select( 'name', node => [ 1, $node ] ) )
    {
        map { push @{ $cluster{hermes}{$_} }, $node } map { @$_ } @cluster;
        delete $node{$node};
    }
}

$cluster{unknown}{unknown} = [ keys %node ] if %node;

for my $cluster ( values %cluster )
{
    map { $cluster->{$_} = $range->load( $cluster->{$_} )->dump } keys %$cluster
}

YAML::XS::DumpFile \*STDOUT, \%cluster;
exit 0;