#!/usr/bin/env perl

use strict;
use warnings;

use YAML::XS;
use File::Spec;
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;

my ( %cluster, @seco );
my $range = Hermes->new( $option->dump( 'range') );
my %node = map { $_ .= $SECO::DOMAIN if $_ !~ /$SECO::DOMAIN/; $_ => 1 }
    @ARGV ? map { $range->load( $_ )->list } @ARGV : Sys::Hostname::hostname();

for my $conf ( glob File::Spec->join( $seco{conf}, '*' ) )
{
    next unless $conf = eval { SECO::Conf->load( $conf ) };
    my ( $name, $dc ) = $conf->name();

    for my $i ( 1 .. $conf->replica() )
    {
        next unless my @node = grep { $node{$_} } $conf->list( host => $i );
        $cluster{ "$name$i\@$dc" } = $range->load( \@node )->dump;
        push @seco, @node;
    }
}

delete @node{@seco};
$cluster{unknown} = $range->load( \%node )->dump if %node;

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

