App-ElasticSearch-Utilities
view release on metacpan or search on metacpan
lib/App/ElasticSearch/Utilities/Metrics.pm view on Meta::CPAN
my ($self) = @_;
my @req = (
'_settings/index.blocks.*',
{
index => '_all',
uri_param => {
flat_settings => 'true',
},
},
);
if( my $res = $self->request(@req)->content ) {
my %collected=();
foreach my $idx ( keys %{ $res } ) {
if( my $settings = $res->{$idx}{settings} ) {
foreach my $block ( keys %{ $settings } ) {
my $value = $settings->{$block};
if( lc $value eq 'true') {
$collected{$block} ||= 0;
$collected{$block}++;
}
}
}
}
return map { { key => "cluster.$_", value => $collected{$_} } } sort keys %collected;
}
# Explicit return of empty list
return;
}
sub collect_index_metrics {
my ($self) = @_;
my $id = $self->node_id;
my $shardres = $self->request('_cat/shards',
{
uri_param => {
local => 'true',
format => 'json',
bytes => 'b',
h => join(',', qw( index prirep docs store id state )),
}
}
)->content;
my %results;
foreach my $shard ( @{ $shardres } ) {
# Skip unallocated shards
next unless $shard->{id};
# Skip unless this shard is allocated to this shard
next unless $shard->{id} eq $id;
# Skip "Special" Indexes
next if $shard->{index} =~ /^\./;
# Figure out the Index Basename
my $index = $shard->{index} =~ s/[-_]\d{4}([.-])\d{2}\g{1}\d{2}(?:[-_.]\d+)?$//r;
next unless $index;
$index =~ s/[^a-zA-Z0-9]+/_/g;
my $type = $shard->{prirep} eq 'p' ? 'primary' : 'replica';
# Initialize
$results{$index} ||= { map { $_ => 0 } qw( docs bytes primary replica ) };
$results{$index}->{state} ||= {};
$results{$index}->{state}{$shard->{state}} ||= 0;
$results{$index}->{state}{$shard->{state}}++;
# Add it up, Add it up
$results{$index}->{docs} += $shard->{docs};
$results{$index}->{bytes} += $shard->{store};
$results{$index}->{$type}++;
}
my @results;
foreach my $idx (sort keys %results) {
foreach my $k ( sort keys %{ $results{$idx} } ) {
# Skip the complex
next if ref $results{$idx}->{$k};
push @results,
{
key => sprintf("node.indices.%s.%s", $idx, $k),
value => $results{$idx}->{$k},
};
}
my $states = $results{$idx}->{state} || {};
foreach my $k ( sort keys %{ $states } ) {
push @results,
{
key => sprintf("node.indices.%s.state.%s", $idx, $k),
value => $states->{$k},
};
}
}
return @results;
}
#------------------------------------------------------------------------#
# Parse Statistics Dynamically
sub _stat_collector {
my $self = shift;
my $ref = shift;
my @path = @_;
my @stats = ();
# Base Case
return unless is_hashref($ref);
my %ignores = map { $_ => 1 } @{ $self->ignore }, @_IGNORES;
foreach my $key (sort keys %{ $ref }) {
# Skip uninteresting keys
next if $ignores{$key};
# Skip peak values, we'll see those in the graphs.
next if $key =~ /^peak/;
( run in 0.723 second using v1.01-cache-2.11-cpan-5837b0d9d2c )