File Coverage

blib/lib/Mojolicious/Plugin/Prometheus/Collector/Perl.pm
Criterion Covered Total %
statement 24 30 80.0
branch 2 4 50.0
condition n/a
subroutine 5 7 71.4
pod 0 1 0.0
total 31 42 73.8


line stmt bran cond sub pod time code
1             package Mojolicious::Plugin::Prometheus::Collector::Perl;
2 12     12   86 use Mojo::Base -base, -signatures;
  12         35  
  12         101  
3 12     12   4725 use Mojo::Collection;
  12         230077  
  12         906  
4 12     12   6451 use Net::Prometheus::Types qw( MetricSamples Sample );
  12         87396  
  12         1052  
5 12     12   6782 use Net::Prometheus::PerlCollector;
  12         18112  
  12         9887  
6              
7             has detail => 0;
8             has labels_cb => sub {{}};
9             has perl_version => sub { ( $^V =~ m/^v(.*)$/ )[0] };
10              
11 13     13 0 852 sub collect($self, $opts) {
  13         52  
  13         28  
  13         34  
12 13         103 my @samples = (
13             MetricSamples(
14             'perl_info',
15             gauge => 'Perl interpreter version',
16             [ Sample( 'perl_info', [ version => $self->perl_version, $self->labels_cb->()->%* ], 1 ) ]
17             ),
18             );
19 13         1939 return @samples unless Net::Prometheus::PerlCollector::HAVE_XS;
20              
21 13         105 my ($arenas, $svs, $svs_by_type, $svs_by_class) = Net::Prometheus::PerlCollector::count_heap($self->detail);
22              
23 13         16518 push @samples, MetricSamples(
24             'perl_heap_arenas',
25             gauge => 'Number of arenas in the Perl heap',
26             [ Sample('perl_heap_arenas', [$self->labels_cb->()->%*], $arenas) ]
27             );
28 13         1379 push @samples, MetricSamples(
29             'perl_heap_svs',
30             gauge => 'Number of SVs in the Perl heap',
31             [ Sample('perl_heap_svs', [$self->labels_cb->()->%*], $svs) ]
32             );
33              
34 13 50       969 if($svs_by_type) {
35             my $by_type = Mojo::Collection->new(keys %$svs_by_type)
36             ->sort
37 0     0   0 ->map(sub { Sample('perl_heap_svs_by_type', [ type => $_, $self->labels_cb->()->%* ], $svs_by_type->{$_}) })
38 0         0 ->to_array;
39 0         0 push @samples, MetricSamples('perl_heap_svs_by_type', gauge => 'Number of SVs classified by type', $by_type);
40             }
41              
42 13 50       49 if($svs_by_class) {
43             my $by_class = Mojo::Collection->new(keys %$svs_by_class)
44             ->sort
45 0     0   0 ->map(sub { Sample('perl_heap_svs_by_class', [ class => $_, $self->labels_cb->()->%* ], $svs_by_class->{$_}) })
46 0         0 ->to_array;
47 0         0 push @samples, MetricSamples('perl_heap_svs_by_class', gauge => 'Number of SVs classified by class', $by_class);
48             }
49              
50 13         65 return @samples;
51             }
52              
53             1;