Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package perl-Metrics-Any for
openSUSE:Factory checked in at 2022-12-14 14:11:08
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-Metrics-Any (Old)
and /work/SRC/openSUSE:Factory/.perl-Metrics-Any.new.1835 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "perl-Metrics-Any"
Wed Dec 14 14:11:08 2022 rev:4 rq:1042832 version:0.09
Changes:
--------
--- /work/SRC/openSUSE:Factory/perl-Metrics-Any/perl-Metrics-Any.changes
2022-10-15 16:40:41.150618902 +0200
+++
/work/SRC/openSUSE:Factory/.perl-Metrics-Any.new.1835/perl-Metrics-Any.changes
2022-12-14 14:11:22.663610356 +0100
@@ -1,0 +2,11 @@
+Tue Nov 29 03:07:37 UTC 2022 - Tina Müller <[email protected]>
+
+- updated to 0.09
+ see /usr/share/doc/packages/perl-Metrics-Any/Changes
+
+ 0.09 2022-11-28
+ [CHANGES]
+ * Define a new API for optional high-performance batch mode
+ collection of counter and gauge metrics
+
+-------------------------------------------------------------------
Old:
----
Metrics-Any-0.08.tar.gz
New:
----
Metrics-Any-0.09.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ perl-Metrics-Any.spec ++++++
--- /var/tmp/diff_new_pack.S0pdHB/_old 2022-12-14 14:11:23.187613051 +0100
+++ /var/tmp/diff_new_pack.S0pdHB/_new 2022-12-14 14:11:23.191613072 +0100
@@ -18,7 +18,7 @@
%define cpan_name Metrics-Any
Name: perl-Metrics-Any
-Version: 0.08
+Version: 0.09
Release: 0
License: Artistic-1.0 OR GPL-1.0-or-later
Summary: Abstract collection of monitoring metrics
++++++ Metrics-Any-0.08.tar.gz -> Metrics-Any-0.09.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Metrics-Any-0.08/Changes new/Metrics-Any-0.09/Changes
--- old/Metrics-Any-0.08/Changes 2022-10-11 16:43:36.000000000 +0200
+++ new/Metrics-Any-0.09/Changes 2022-11-28 18:54:45.000000000 +0100
@@ -1,5 +1,10 @@
Revision history for Metrics-Any
+0.09 2022-11-28
+ [CHANGES]
+ * Define a new API for optional high-performance batch mode
+ collection of counter and gauge metrics
+
0.08 2022-10-11
[CHANGES]
* Optionally allow the test adapter to store full values for
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Metrics-Any-0.08/MANIFEST
new/Metrics-Any-0.09/MANIFEST
--- old/Metrics-Any-0.08/MANIFEST 2022-10-11 16:43:36.000000000 +0200
+++ new/Metrics-Any-0.09/MANIFEST 2022-11-28 18:54:45.000000000 +0100
@@ -9,7 +9,11 @@
lib/Metrics/Any/Adapter/Test.pm
lib/Metrics/Any/AdapterBase/Stored.pm
lib/Metrics/Any/Collector.pm
+LICENSE
MANIFEST This list of files
+META.json
+META.yml
+README
t/00use.t
t/01collector.t
t/02adapter-early.t
@@ -24,7 +28,3 @@
t/21nonstrict.t
t/22disable-package.t
t/99pod.t
-README
-LICENSE
-META.yml
-META.json
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Metrics-Any-0.08/META.json
new/Metrics-Any-0.09/META.json
--- old/Metrics-Any-0.08/META.json 2022-10-11 16:43:36.000000000 +0200
+++ new/Metrics-Any-0.09/META.json 2022-11-28 18:54:45.000000000 +0100
@@ -35,39 +35,39 @@
"provides" : {
"Metrics::Any" : {
"file" : "lib/Metrics/Any.pm",
- "version" : "0.08"
+ "version" : "0.09"
},
"Metrics::Any::Adapter" : {
"file" : "lib/Metrics/Any/Adapter.pm",
- "version" : "0.08"
+ "version" : "0.09"
},
"Metrics::Any::Adapter::File" : {
"file" : "lib/Metrics/Any/Adapter/File.pm",
- "version" : "0.08"
+ "version" : "0.09"
},
"Metrics::Any::Adapter::Null" : {
"file" : "lib/Metrics/Any/Adapter/Null.pm",
- "version" : "0.08"
+ "version" : "0.09"
},
"Metrics::Any::Adapter::Stderr" : {
"file" : "lib/Metrics/Any/Adapter/Stderr.pm",
- "version" : "0.08"
+ "version" : "0.09"
},
"Metrics::Any::Adapter::Tee" : {
"file" : "lib/Metrics/Any/Adapter/Tee.pm",
- "version" : "0.08"
+ "version" : "0.09"
},
"Metrics::Any::Adapter::Test" : {
"file" : "lib/Metrics/Any/Adapter/Test.pm",
- "version" : "0.08"
+ "version" : "0.09"
},
"Metrics::Any::AdapterBase::Stored" : {
"file" : "lib/Metrics/Any/AdapterBase/Stored.pm",
- "version" : "0.08"
+ "version" : "0.09"
},
"Metrics::Any::Collector" : {
"file" : "lib/Metrics/Any/Collector.pm",
- "version" : "0.08"
+ "version" : "0.09"
}
},
"release_status" : "stable",
@@ -76,6 +76,6 @@
"http://dev.perl.org/licenses/"
]
},
- "version" : "0.08",
- "x_serialization_backend" : "JSON::PP version 4.06"
+ "version" : "0.09",
+ "x_serialization_backend" : "JSON::PP version 4.07"
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Metrics-Any-0.08/META.yml
new/Metrics-Any-0.09/META.yml
--- old/Metrics-Any-0.08/META.yml 2022-10-11 16:43:36.000000000 +0200
+++ new/Metrics-Any-0.09/META.yml 2022-11-28 18:54:45.000000000 +0100
@@ -17,35 +17,35 @@
provides:
Metrics::Any:
file: lib/Metrics/Any.pm
- version: '0.08'
+ version: '0.09'
Metrics::Any::Adapter:
file: lib/Metrics/Any/Adapter.pm
- version: '0.08'
+ version: '0.09'
Metrics::Any::Adapter::File:
file: lib/Metrics/Any/Adapter/File.pm
- version: '0.08'
+ version: '0.09'
Metrics::Any::Adapter::Null:
file: lib/Metrics/Any/Adapter/Null.pm
- version: '0.08'
+ version: '0.09'
Metrics::Any::Adapter::Stderr:
file: lib/Metrics/Any/Adapter/Stderr.pm
- version: '0.08'
+ version: '0.09'
Metrics::Any::Adapter::Tee:
file: lib/Metrics/Any/Adapter/Tee.pm
- version: '0.08'
+ version: '0.09'
Metrics::Any::Adapter::Test:
file: lib/Metrics/Any/Adapter/Test.pm
- version: '0.08'
+ version: '0.09'
Metrics::Any::AdapterBase::Stored:
file: lib/Metrics/Any/AdapterBase/Stored.pm
- version: '0.08'
+ version: '0.09'
Metrics::Any::Collector:
file: lib/Metrics/Any/Collector.pm
- version: '0.08'
+ version: '0.09'
requires:
List::Util: '1.29'
perl: '5.014'
resources:
license: http://dev.perl.org/licenses/
-version: '0.08'
+version: '0.09'
x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Metrics-Any-0.08/lib/Metrics/Any/Adapter/File.pm
new/Metrics-Any-0.09/lib/Metrics/Any/Adapter/File.pm
--- old/Metrics-Any-0.08/lib/Metrics/Any/Adapter/File.pm 2022-10-11
16:43:36.000000000 +0200
+++ new/Metrics-Any-0.09/lib/Metrics/Any/Adapter/File.pm 2022-11-28
18:54:45.000000000 +0100
@@ -3,7 +3,7 @@
#
# (C) Paul Evans, 2020 -- [email protected]
-package Metrics::Any::Adapter::File 0.08;
+package Metrics::Any::Adapter::File 0.09;
use v5.14;
use warnings;
@@ -42,6 +42,8 @@
Distribution and timing metrics are tracked with a running total and count of
observations.
+This adapter type does not support batch mode reporting.
+
=head1 ARGUMENTS
The following additional arguments are recognised
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Metrics-Any-0.08/lib/Metrics/Any/Adapter/Null.pm
new/Metrics-Any-0.09/lib/Metrics/Any/Adapter/Null.pm
--- old/Metrics-Any-0.08/lib/Metrics/Any/Adapter/Null.pm 2022-10-11
16:43:36.000000000 +0200
+++ new/Metrics-Any-0.09/lib/Metrics/Any/Adapter/Null.pm 2022-11-28
18:54:45.000000000 +0100
@@ -3,7 +3,7 @@
#
# (C) Paul Evans, 2020 -- [email protected]
-package Metrics::Any::Adapter::Null 0.08;
+package Metrics::Any::Adapter::Null 0.09;
use v5.14;
use warnings;
@@ -21,6 +21,9 @@
A program would run with this adapter by default unless it has requested a
different one, via the C<use Metrics::Any::Adapter> statement.
+This adapter type claims to support batch mode, though the reporting callback
+will never be invoked.
+
=cut
sub new
@@ -40,6 +43,10 @@
*$method = sub {};
}
+# Batch mode is supported but does nothing
+use constant HAVE_BATCH_MODE => 1;
+sub add_batch_mode_callback {}
+
=head1 AUTHOR
Paul Evans <[email protected]>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Metrics-Any-0.08/lib/Metrics/Any/Adapter/Stderr.pm
new/Metrics-Any-0.09/lib/Metrics/Any/Adapter/Stderr.pm
--- old/Metrics-Any-0.08/lib/Metrics/Any/Adapter/Stderr.pm 2022-10-11
16:43:36.000000000 +0200
+++ new/Metrics-Any-0.09/lib/Metrics/Any/Adapter/Stderr.pm 2022-11-28
18:54:45.000000000 +0100
@@ -3,7 +3,7 @@
#
# (C) Paul Evans, 2020 -- [email protected]
-package Metrics::Any::Adapter::Stderr 0.08;
+package Metrics::Any::Adapter::Stderr 0.09;
use v5.14;
use warnings;
@@ -27,6 +27,8 @@
$ METRICS_ANY_ADAPTER=Stderr perl -Mblib t/01test.t
+This adapter type does not support batch mode reporting.
+
=cut
sub new
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Metrics-Any-0.08/lib/Metrics/Any/Adapter/Tee.pm
new/Metrics-Any-0.09/lib/Metrics/Any/Adapter/Tee.pm
--- old/Metrics-Any-0.08/lib/Metrics/Any/Adapter/Tee.pm 2022-10-11
16:43:36.000000000 +0200
+++ new/Metrics-Any-0.09/lib/Metrics/Any/Adapter/Tee.pm 2022-11-28
18:54:45.000000000 +0100
@@ -3,7 +3,7 @@
#
# (C) Paul Evans, 2020 -- [email protected]
-package Metrics::Any::Adapter::Tee 0.08;
+package Metrics::Any::Adapter::Tee 0.09;
use v5.14;
use warnings;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Metrics-Any-0.08/lib/Metrics/Any/Adapter/Test.pm
new/Metrics-Any-0.09/lib/Metrics/Any/Adapter/Test.pm
--- old/Metrics-Any-0.08/lib/Metrics/Any/Adapter/Test.pm 2022-10-11
16:43:36.000000000 +0200
+++ new/Metrics-Any-0.09/lib/Metrics/Any/Adapter/Test.pm 2022-11-28
18:54:45.000000000 +0100
@@ -3,7 +3,7 @@
#
# (C) Paul Evans, 2020-2022 -- [email protected]
-package Metrics::Any::Adapter::Test 0.08;
+package Metrics::Any::Adapter::Test 0.09;
use v5.14;
use warnings;
@@ -47,6 +47,9 @@
For predictable output of timer metrics in unit tests, a unit test may wish to
use the L</override_timer_duration> method.
+This adapter type supports batch mode reporting. Callbacks are invoked at the
+beginning of the L</metrics> method.
+
=cut
my $singleton;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Metrics-Any-0.08/lib/Metrics/Any/Adapter.pm
new/Metrics-Any-0.09/lib/Metrics/Any/Adapter.pm
--- old/Metrics-Any-0.08/lib/Metrics/Any/Adapter.pm 2022-10-11
16:43:36.000000000 +0200
+++ new/Metrics-Any-0.09/lib/Metrics/Any/Adapter.pm 2022-11-28
18:54:45.000000000 +0100
@@ -3,7 +3,7 @@
#
# (C) Paul Evans, 2020 -- [email protected]
-package Metrics::Any::Adapter 0.08;
+package Metrics::Any::Adapter 0.09;
use v5.14;
use warnings;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/Metrics-Any-0.08/lib/Metrics/Any/AdapterBase/Stored.pm
new/Metrics-Any-0.09/lib/Metrics/Any/AdapterBase/Stored.pm
--- old/Metrics-Any-0.08/lib/Metrics/Any/AdapterBase/Stored.pm 2022-10-11
16:43:36.000000000 +0200
+++ new/Metrics-Any-0.09/lib/Metrics/Any/AdapterBase/Stored.pm 2022-11-28
18:54:45.000000000 +0100
@@ -3,7 +3,7 @@
#
# (C) Paul Evans, 2020 -- [email protected]
-package Metrics::Any::AdapterBase::Stored 0.08;
+package Metrics::Any::AdapterBase::Stored 0.09;
use v5.14;
use warnings;
@@ -39,6 +39,7 @@
my $class = shift;
# Metrics are keys of $self, named by handle
+ # Special non-metrics values can be stored by prefixing the name with "\x00"
return bless {}, $class;
}
@@ -46,6 +47,16 @@
=cut
+use constant HAVE_BATCH_MODE => 1;
+
+sub add_batch_mode_callback
+{
+ my $self = shift;
+ my ( $cb ) = @_;
+
+ push @{ $self->{"\0batch_callbacks"} }, $cb;
+}
+
sub _make
{
my $self = shift;
@@ -112,7 +123,13 @@
my $self = shift;
my ( $code ) = @_;
+ if( my $cbs = $self->{"\0batch_callbacks"} ) {
+ foreach my $cb ( @$cbs ) { $cb->() }
+ }
+
foreach my $handle ( sort keys %$self ) {
+ next if $handle =~ m/^\0/;
+
my $metric = $self->{$handle};
my $values = $metric->{values};
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Metrics-Any-0.08/lib/Metrics/Any/Collector.pm
new/Metrics-Any-0.09/lib/Metrics/Any/Collector.pm
--- old/Metrics-Any-0.08/lib/Metrics/Any/Collector.pm 2022-10-11
16:43:36.000000000 +0200
+++ new/Metrics-Any-0.09/lib/Metrics/Any/Collector.pm 2022-11-28
18:54:45.000000000 +0100
@@ -3,7 +3,7 @@
#
# (C) Paul Evans, 2020 -- [email protected]
-package Metrics::Any::Collector 0.08;
+package Metrics::Any::Collector 0.09;
use v5.14;
use warnings;
@@ -45,6 +45,54 @@
to allow programs to configure the metric reporting in a flexible manner
during program startup.
+=head2 Batch-Mode Reporting
+
+Some adapters may support an optional API for implementing metrics in a more
+high-performance manner, suitable for use in low-level (perhaps even XS) code
+that might be invoked at high speed or many times over.
+
+Such code often needs to keep simple counters of particular events that happen
+a lot. Rather than incurring the cost of a full stack of method calls into the
+collector and adapter implementation on every event, the instrumented code can
+register a callback function that the adapter will call on some schedule, that
+will report the actual metrics. In the meantime, the instrumented code can
+maintain its own counters of events, using plain Perl scalars (or native
+integers in XS code), to be reported in bulk when required. This reduces the
+overall CPU cost involved in collecting metrics.
+
+This is most effective with pull-based adapters such as Test or Prometheus,
+where the callback might only need to be invoked at the end of a test run, or
+when the prometheus server polls the C</metrics> HTTP endpoint.
+
+ my $evcounter = 0;
+
+ $metrics->add_batch_mode_callback( sub {
+ $metrics->inc_counter_by( events => $evcounter );
+ $evcounter = 0;
+ } );
+
+ sub do_thing {
+ $evcounter++;
+ ...
+ }
+
+Because not every adapter may implement this mode, instrumented code should be
+prepared to fall back on the regular API to report its counters.
+
+ my $evcounter = 0;
+
+ my $use_batch = $metrics->add_batch_mode_callback( sub {
+ $metrics->inc_counter_by( events => $evcounter );
+ $evcounter = 0;
+ } );
+
+ sub do_thing {
+ $use_batch ? $evcounter++ : $metrics->inc_counter( events => );
+ ...
+ }
+
+Each adapter implementation should document if and how it handles batch mode.
+
=head1 ENVIRONMENT
=head2 METRICS_ANY_DISABLE
@@ -293,6 +341,10 @@
=head1 METHODS
+=cut
+
+=head2 package
+
$package = $metrics->package
Returns the package name that created the collector; the package in which the
@@ -309,6 +361,33 @@
return $self->{package};
}
+=head2 add_batch_mode_callback
+
+ $ok = $metrics->add_batch_mode_callback( sub { ... } )
+
+I<Since version 0.09.>
+
+If batch mode is supported on the underlying adapter, adds another callback to
+its list of callbacks, to be invoked when it wishes to collect more metrics;
+if this is supported then the method returns a true value.
+
+If batch mode is not supported, returns false.
+
+=cut
+
+sub add_batch_mode_callback
+{
+ my $self = shift;
+ my ( $cb ) = @_;
+
+ unless( $self->adapter->can( "HAVE_BATCH_MODE" ) and
$self->adapter->HAVE_BATCH_MODE ) {
+ return 0;
+ }
+
+ $self->adapter->add_batch_mode_callback( $cb );
+ return 1;
+}
+
=head1 METRIC TYPES
Each type of metric is created by one of the C<make_*> methods. They all take
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Metrics-Any-0.08/lib/Metrics/Any.pm
new/Metrics-Any-0.09/lib/Metrics/Any.pm
--- old/Metrics-Any-0.08/lib/Metrics/Any.pm 2022-10-11 16:43:36.000000000
+0200
+++ new/Metrics-Any-0.09/lib/Metrics/Any.pm 2022-11-28 18:54:45.000000000
+0100
@@ -3,7 +3,7 @@
#
# (C) Paul Evans, 2020-2021 -- [email protected]
-package Metrics::Any 0.08;
+package Metrics::Any 0.09;
use v5.14;
use warnings;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Metrics-Any-0.08/t/10adapter-null.t
new/Metrics-Any-0.09/t/10adapter-null.t
--- old/Metrics-Any-0.08/t/10adapter-null.t 2022-10-11 16:43:36.000000000
+0200
+++ new/Metrics-Any-0.09/t/10adapter-null.t 2022-11-28 18:54:45.000000000
+0100
@@ -43,6 +43,9 @@
ok( defined eval { $metrics->report_timer( "duration", 20 ); 1 },
'$metrics->report_timer' ) or diag( $@ );
+# batch mode is supported (though does nothing)
+ok( $metrics->add_batch_mode_callback( sub {} ), 'Null adapter supports batch
mode' );
+
ok( !$metrics, '$metrics is still false at EOF' );
done_testing;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Metrics-Any-0.08/t/13adapter-stored.t
new/Metrics-Any-0.09/t/13adapter-stored.t
--- old/Metrics-Any-0.08/t/13adapter-stored.t 2022-10-11 16:43:36.000000000
+0200
+++ new/Metrics-Any-0.09/t/13adapter-stored.t 2022-11-28 18:54:45.000000000
+0100
@@ -73,4 +73,34 @@
], 'metrics to ->walk' );
}
+# batch mode is supported
+{
+ Metrics::Any::Adapter->adapter->clear_values;
+
+ my $called;
+
+ my $batch_ok = $metrics->add_batch_mode_callback( sub {
+ $called++;
+ $metrics->inc_counter_by( counter => 100 );
+ $metrics->set_gauge_to( gauge => 25 );
+ } );
+ ok( $batch_ok, 'Stored adapter supports batch mode' );
+
+ ok( !$called, 'Batch mode callback not yet invoked' );
+
+ my @walkdata;
+ Metrics::Any::Adapter->adapter->walk( sub {
+ my ( $type, $name, $labels, $value ) = @_;
+ push @walkdata, [ $type, $name, $labels, $value ];
+ } );
+
+ is_deeply( \@walkdata, [
+ [ counter => counter => [], 100 ],
+
+ [ gauge => gauge => [], 25 ],
+ ], 'metrics to ->walk contained batch-reported values' );
+
+ ok( $called, 'Batch mode callback invoked by ->walk' );
+}
+
done_testing;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Metrics-Any-0.08/t/14adapter-test.t
new/Metrics-Any-0.09/t/14adapter-test.t
--- old/Metrics-Any-0.08/t/14adapter-test.t 2022-10-11 16:43:36.000000000
+0200
+++ new/Metrics-Any-0.09/t/14adapter-test.t 2022-11-28 18:54:45.000000000
+0100
@@ -147,6 +147,28 @@
);
}
+# batch mode is supported
+{
+ Metrics::Any::Adapter::Test->clear;
+
+ my $called;
+
+ my $batch_ok = $metrics->add_batch_mode_callback( sub {
+ $called++;
+ $metrics->inc_counter_by( abc => 100 );
+ $metrics->set_gauge_to( gauge => 25 );
+ } );
+ ok( $batch_ok, 'Test adapter supports batch mode' );
+
+ ok( !$called, 'Batch mode callback not yet invoked' );
+
+ is( Metrics::Any::Adapter::Test->metrics,
+ "the_ABC_counter = 100\n" .
+ "the_ABC_gauge = 25\n",
+ 'Metrics::Any::Adapter::Test->metrics contains batch-reported values' );
+ ok( $called, 'Batch mode callback invoked by ->metrics' );
+}
+
ok( $metrics, '$metrics is still true at EOF' );
done_testing;