Metrics-Any-Adapter-Prometheus

 view release on metacpan or  search on metacpan

t/01metrics.t  view on Meta::CPAN

#!/usr/bin/perl

use v5.20;
use warnings;

use Test2::V0;

use Metrics::Any 0.09 '$metrics';
use Metrics::Any::Adapter 'Prometheus';

use Net::Prometheus;

my $prom = Net::Prometheus->new;

# counters
{
   $metrics->make_counter( counter =>
      name => [qw( the counter )],
   );

   $metrics->inc_counter( counter => );

   like( $prom->render,
      qr/^the_counter_total 1/m,
      'Net::Prometheus->render contains Counter metric'
   );
}

# distributions
{
   $metrics->make_distribution( distribution =>
      name => [qw( the distribution )],
      units => "bytes",
   );

   $metrics->report_distribution( distribution => 10000 );

   like( $prom->render,
      qr/^the_distribution_bytes_count 1\nthe_distribution_bytes_sum 10000/m,
      'Net::Prometheus->render contains Histogram metric'
   );

   # Buckets
   my @buckets = grep { m/^the_distribution_bytes_bucket/ } split m/\n/, $prom->render;
   is( \@buckets,
      [
         'the_distribution_bytes_bucket{le="100"} 0',
         'the_distribution_bytes_bucket{le="1000"} 0',
         'the_distribution_bytes_bucket{le="10000"} 1',
         'the_distribution_bytes_bucket{le="100000"} 1',
         'the_distribution_bytes_bucket{le="1000000"} 1',
         'the_distribution_bytes_bucket{le="10000000"} 1',
         'the_distribution_bytes_bucket{le="100000000"} 1',
         'the_distribution_bytes_bucket{le="+Inf"} 1',
      ],
      'Net::Prometheus->render contains correct Histogram buckets'
   );
}

# gauges
{
   $metrics->make_gauge( gauge =>
      name => [qw( the gauge )],
   );

   $metrics->set_gauge_to( gauge => 123 );

   $metrics->inc_gauge_by( gauge => 45 );

   like( $prom->render,
      qr/^the_gauge 168/m,
      'Net::Prometheus->render contains Gauge metric'
   );
}

# timers
{
   $metrics->make_timer( timer =>
      name => "the_timer",
   );

   $metrics->report_timer( timer => 0.25 );

   like( $prom->render,
      qr/^the_timer_seconds_count 1\nthe_timer_seconds_sum 0\.25/m,
      'Net::Prometheus->render contains Histogram metric for timer'
   );
}

# batch mode is supported
{
   my $called;

   my $batch_ok = $metrics->add_batch_mode_callback( sub {
      $called++;
      $metrics->inc_counter_by( counter => 100 );
   } );
   ok( $batch_ok, 'Test adapter supports batch mode' );

   ok( !$called, 'Batch mode callback not yet invoked' );

   like( $prom->render,
      qr/^the_counter_total 101\n/m,
      'Net::Prometheus->render contains batch-incremented counter' );



( run in 0.761 second using v1.01-cache-2.11-cpan-71847e10f99 )