Async-Redis
view release on metacpan or search on metacpan
examples/stress/lib/Stress/Metrics.pm view on Meta::CPAN
sub harvest {
my ($self) = @_;
my %throughput = %{ $self->{ops} };
my %errors = %{ $self->{errors_typed} };
my %latency_ms;
for my $op (keys %{ $self->{latencies} }) {
my @sorted = sort { $a <=> $b } @{ $self->{latencies}{$op}{reservoir} };
next unless @sorted;
$latency_ms{$op} = {
p50 => _percentile(\@sorted, 0.50),
p95 => _percentile(\@sorted, 0.95),
p99 => _percentile(\@sorted, 0.99),
};
}
$self->{ops} = {};
$self->{latencies} = {};
$self->{errors_typed} = {};
return {
throughput => \%throughput,
latency_ms => \%latency_ms,
errors_typed => \%errors,
};
}
sub _percentile {
my ($sorted, $p) = @_;
my $idx = int(@$sorted * $p);
$idx = $#$sorted if $idx > $#$sorted;
return $sorted->[$idx];
}
1;
( run in 0.557 second using v1.01-cache-2.11-cpan-39bf76dae61 )