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 )