Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-osprofiler for 
openSUSE:Factory checked in at 2024-04-14 11:55:01
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-osprofiler (Old)
 and      /work/SRC/openSUSE:Factory/.python-osprofiler.new.26366 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-osprofiler"

Sun Apr 14 11:55:01 2024 rev:17 rq:1167538 version:4.1.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-osprofiler/python-osprofiler.changes      
2022-06-09 14:11:58.628542865 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-osprofiler.new.26366/python-osprofiler.changes
   2024-04-14 12:24:48.797985051 +0200
@@ -1,0 +2,25 @@
+Mon Apr  1 17:37:16 UTC 2024 - Christian Boltz <suse-b...@cboltz.de>
+
+- %check: delete test_jaeger.py (already excluded via
+  --exclude-regex, but still causes import error)
+- add missing BuildRequires: python3-opentelemetry-exporter-otlp
+
+-------------------------------------------------------------------
+Thu Jan  4 09:08:04 UTC 2024 - cloud-de...@suse.de
+
+- added 0001-Add-default-port-to-Elasticsearch-connection-url.patch
+- update to version 4.1.0
+  - tox: Add functional-py38, functional-py39 envs
+  - add support of otlp exporter
+  - jaeger: introduce process tags' option for tracer
+  - Fix formattiing of release list
+  - [profiler] hmac_key should be secret
+  - setup.cfg: Replace dashes with underscores
+  - jaeger: introduce service name prefix
+  - remove unicode prefix from code
+  - jaeger: fix driver initialization for tests
+  - devstack: remove jaeger container on unstack
+  - profiler: add python requests profile
+  - Change StrictRedis usage to Redis
+
+-------------------------------------------------------------------

Old:
----
  osprofiler-3.4.3.tar.gz

New:
----
  0001-Add-default-port-to-Elasticsearch-connection-url.patch
  osprofiler-4.1.0.tar.gz

BETA DEBUG BEGIN:
  New:
- added 0001-Add-default-port-to-Elasticsearch-connection-url.patch
- update to version 4.1.0
BETA DEBUG END:

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-osprofiler.spec ++++++
--- /var/tmp/diff_new_pack.OI4b62/_old  2024-04-14 12:24:49.474009669 +0200
+++ /var/tmp/diff_new_pack.OI4b62/_new  2024-04-14 12:24:49.474009669 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package python-osprofiler
 #
-# Copyright (c) 2022 SUSE LLC
+# Copyright (c) 2024 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -17,13 +17,15 @@
 
 
 Name:           python-osprofiler
-Version:        3.4.3
+Version:        4.1.0
 Release:        0
 Summary:        OpenStack Profiler Library
 License:        Apache-2.0
 Group:          Development/Languages/Python
 URL:            https://docs.openstack.org/osprofiler
-Source0:        
https://files.pythonhosted.org/packages/source/o/osprofiler/osprofiler-3.4.3.tar.gz
+Source0:        
https://files.pythonhosted.org/packages/source/o/osprofiler/osprofiler-4.1.0.tar.gz
+# https://review.opendev.org/c/openstack/osprofiler/+/860412
+Patch0:         0001-Add-default-port-to-Elasticsearch-connection-url.patch
 BuildRequires:  openstack-macros
 BuildRequires:  python3-PrettyTable >= 0.7.2
 BuildRequires:  python3-WebOb >= 1.7.1
@@ -31,8 +33,9 @@
 BuildRequires:  python3-docutils
 BuildRequires:  python3-elasticsearch
 BuildRequires:  python3-importlib-metadata
+BuildRequires:  python3-opentelemetry-exporter-otlp
 BuildRequires:  python3-oslo.concurrency >= 3.26.0
-BuildRequires:  python3-oslo.config
+BuildRequires:  python3-oslo.config >= 5.2.0
 BuildRequires:  python3-oslo.log
 BuildRequires:  python3-oslo.utils >= 3.33.0
 BuildRequires:  python3-pymongo
@@ -56,7 +59,7 @@
 Requires:       python3-WebOb >= 1.7.1
 Requires:       python3-importlib-metadata
 Requires:       python3-oslo.concurrency >= 3.26.0
-Requires:       python3-oslo.config
+Requires:       python3-oslo.config >= 5.2.0
 Requires:       python3-oslo.log
 Requires:       python3-oslo.utils >= 3.33.0
 %if 0%{?suse_version}
@@ -83,7 +86,7 @@
 Documentation for OSProfiler.
 
 %prep
-%autosetup -p1 -n osprofiler-3.4.3
+%autosetup -p1 -n osprofiler-4.1.0
 %py_req_cleanup
 
 %build
@@ -98,7 +101,8 @@
 rm -rf doc/build/html/.{doctrees,buildinfo}
 
 %check
-python3 -m stestr.cli run --black-regex 
'(^osprofiler.tests.unit.drivers.test_jaeger.JaegerTestCase.*$)'
+rm osprofiler/tests/unit/drivers/test_jaeger.py  # causes import error, 
--exclude-regex in the next line isn't enough
+%{openstack_stestr_run} --exclude-regex 
'(^osprofiler.tests.unit.drivers.test_jaeger.JaegerTestCase.*$)'
 
 %files -n python3-osprofiler
 %license LICENSE

++++++ 0001-Add-default-port-to-Elasticsearch-connection-url.patch ++++++
>From 5833d9519a31665447250e9c734ca64c065dab64 Mon Sep 17 00:00:00 2001
From: Daniel Garcia Moreno <daniel.gar...@suse.com>
Date: Wed, 5 Oct 2022 14:42:54 +0200
Subject: [PATCH] Add default port to Elasticsearch connection url

This change makes it compatible with modern versions of elasticsearch.

Change-Id: I10b8b57432894e28d5da87eb6d886a053be776f0
---
 osprofiler/drivers/elasticsearch_driver.py | 2 +-
 test-requirements.txt                      | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/osprofiler/drivers/elasticsearch_driver.py 
b/osprofiler/drivers/elasticsearch_driver.py
index da9be17..deb42a3 100644
--- a/osprofiler/drivers/elasticsearch_driver.py
+++ b/osprofiler/drivers/elasticsearch_driver.py
@@ -44,7 +44,7 @@ class ElasticsearchDriver(base.Driver):
         client_url = parser.urlunparse(parser.urlparse(self.connection_str)
                                        ._replace(scheme="http"))
         self.conf = conf
-        self.client = Elasticsearch(client_url)
+        self.client = Elasticsearch(client_url + ":9200")
         self.index_name = index_name
         self.index_name_error = "osprofiler-notifications-error"
 
diff --git a/test-requirements.txt b/test-requirements.txt
index 3e1bbd8..52c1446 100644
--- a/test-requirements.txt
+++ b/test-requirements.txt
@@ -13,7 +13,7 @@ bandit>=1.6.0,<1.7.0 # Apache-2.0
 pymongo!=3.1,>=3.0.2 # Apache-2.0
 
 # Elasticsearch python client
-elasticsearch>=2.0.0,<3.0.0 # Apache-2.0
+elasticsearch>=2.0.0,<9.0.0 # Apache-2.0
 
 # Redis python client
 redis>=2.10.0 # MIT
-- 
2.37.3


++++++ _service ++++++
--- /var/tmp/diff_new_pack.OI4b62/_old  2024-04-14 12:24:49.514011125 +0200
+++ /var/tmp/diff_new_pack.OI4b62/_new  2024-04-14 12:24:49.518011271 +0200
@@ -1,13 +1,13 @@
 <services>
-  <service mode="disabled" name="renderspec">
+  <service mode="manual" name="renderspec">
     <param 
name="input-template">https://opendev.org/openstack/rpm-packaging/raw/master/openstack/osprofiler/osprofiler.spec.j2</param>
     <param name="output-name">python-osprofiler.spec</param>
     <param 
name="requirements">https://opendev.org/openstack/osprofiler/raw/master/requirements.txt</param>
     <param name="changelog-email">cloud-de...@suse.de</param>
     <param name="changelog-provider">gh,openstack,osprofiler</param>
   </service>
-  <service mode="disabled" name="download_files">
+  <service mode="manual" name="download_files">
   </service>
-  <service name="format_spec_file" mode="disabled"/>
+  <service name="format_spec_file" mode="manual"/>
 </services>
 

++++++ osprofiler-3.4.3.tar.gz -> osprofiler-4.1.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-3.4.3/.zuul.yaml 
new/osprofiler-4.1.0/.zuul.yaml
--- old/osprofiler-3.4.3/.zuul.yaml     2022-05-05 11:53:10.000000000 +0200
+++ new/osprofiler-4.1.0/.zuul.yaml     2023-07-13 17:46:21.000000000 +0200
@@ -9,12 +9,12 @@
       - release-notes-jobs-python3
     check:
       jobs:
-        - openstack-tox-functional-py36
+        - openstack-tox-functional-py38
         - tempest-smoke-py3-osprofiler-redis
         - tempest-smoke-py3-osprofiler-sqlalchemy
     gate:
       jobs:
-        - openstack-tox-functional-py36
+        - openstack-tox-functional-py38
 
 - job:
     name: tempest-smoke-py3-osprofiler-redis
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-3.4.3/AUTHORS new/osprofiler-4.1.0/AUTHORS
--- old/osprofiler-3.4.3/AUTHORS        2022-05-05 11:53:50.000000000 +0200
+++ new/osprofiler-4.1.0/AUTHORS        2023-07-13 17:46:48.000000000 +0200
@@ -47,14 +47,17 @@
 OpenStack Release Bot <infra-r...@openstack.org>
 Radoslaw Smigielski <radoslaw.smigiel...@nokia.com>
 Roman Podoliaka <rpodoly...@mirantis.com>
+Sahid Orentino Ferdjaoui <sahid.ferdja...@industrialdiscipline.com>
 Sean McGinnis <sean.mcgin...@gmail.com>
 Shoham Peller <shoh...@gmail.com>
 Simon Pasquier <spasqu...@mirantis.com>
 Slawek Kaplonski <skapl...@redhat.com>
 Stephen Finucane <stephen...@redhat.com>
 Stuart Grace <stuart.gr...@bbc.co.uk>
+Takashi Kajinami <tkaji...@redhat.com>
 Thomas Bechtold <tbecht...@suse.com>
 Timur Sufiev <tsuf...@mirantis.com>
+Tobias Urdin <tobias.ur...@binero.com>
 Tony Xu <hhkt...@gmail.com>
 Tovin Seven <vin...@vn.fujitsu.com>
 Victor Morales <victor.mora...@intel.com>
@@ -63,6 +66,7 @@
 Vu Cong Tuan <tua...@vn.fujitsu.com>
 Wander Way <wanderway...@gmail.com>
 XiaojueGuan <guanalbertj...@gmail.com>
+YuehuiLei <leiyue...@inspur.com>
 Zhi Yan Liu <zhiy...@cn.ibm.com>
 caoyuan <cao.y...@99cloud.net>
 chenxu <424024...@qq.com>
@@ -73,6 +77,7 @@
 lipan <lipan7...@fiberhome.com>
 lvdongbing <dongbing...@kylin-cloud.com>
 melissaml <ma....@99cloud.net>
+niuke <niuke19970...@163.com>
 qingszhao <zhao.daq...@99cloud.net>
 reedip <reedip.baner...@nectechnologies.in>
 ricolin <rico....@easystack.cn>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-3.4.3/ChangeLog 
new/osprofiler-4.1.0/ChangeLog
--- old/osprofiler-3.4.3/ChangeLog      2022-05-05 11:53:50.000000000 +0200
+++ new/osprofiler-4.1.0/ChangeLog      2023-07-13 17:46:48.000000000 +0200
@@ -1,6 +1,26 @@
 CHANGES
 =======
 
+4.1.0
+-----
+
+* profiler: add python requests profile
+
+4.0.0
+-----
+
+* add support of otlp exporter
+* devstack: remove jaeger container on unstack
+* [profiler] hmac\_key should be secret
+* jaeger: introduce process tags' option for tracer
+* jaeger: introduce service name prefix
+* jaeger: fix driver initialization for tests
+* setup.cfg: Replace dashes with underscores
+* Change StrictRedis usage to Redis
+* tox: Add functional-py38, functional-py39 envs
+* remove unicode prefix from code
+* Fix formattiing of release list
+
 3.4.3
 -----
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-3.4.3/PKG-INFO 
new/osprofiler-4.1.0/PKG-INFO
--- old/osprofiler-3.4.3/PKG-INFO       2022-05-05 11:53:51.021370400 +0200
+++ new/osprofiler-4.1.0/PKG-INFO       2023-07-13 17:46:48.875940000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: osprofiler
-Version: 3.4.3
+Version: 4.1.0
 Summary: OpenStack Profiler Library
 Home-page: https://docs.openstack.org/osprofiler/latest/
 Author: OpenStack
@@ -45,11 +45,10 @@
 Classifier: Operating System :: POSIX :: Linux
 Classifier: Programming Language :: Python
 Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.6
-Classifier: Programming Language :: Python :: 3.7
 Classifier: Programming Language :: Python :: 3.8
+Classifier: Programming Language :: Python :: 3.9
 Classifier: Programming Language :: Python :: 3 :: Only
 Classifier: Programming Language :: Python :: Implementation :: CPython
-Requires-Python: >=3.6
+Requires-Python: >=3.8
 Provides-Extra: oslo_config
 Provides-Extra: test
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-3.4.3/devstack/lib/osprofiler 
new/osprofiler-4.1.0/devstack/lib/osprofiler
--- old/osprofiler-3.4.3/devstack/lib/osprofiler        2022-05-05 
11:53:10.000000000 +0200
+++ new/osprofiler-4.1.0/devstack/lib/osprofiler        2023-07-13 
17:46:21.000000000 +0200
@@ -58,19 +58,33 @@
     pip_install_gr redis
 }
 
-function install_jaeger() {
+function install_jaeger_backend() {
     if is_ubuntu; then
         install_package docker.io
         start_service docker
         add_user_to_group $STACK_USER docker
-        sg docker -c "docker run -d --name jaeger -p 6831:6831/udp -p 
16686:16686 jaegertracing/all-in-one:1.7"
+        sg docker -c "docker run -d --name jaeger -e 
COLLECTOR_OTLP_ENABLED=true -p 6831:6831/udp -p 16686:16686 -p 4318:4318 
jaegertracing/all-in-one:1.42"
     else
         exit_distro_not_supported "docker.io installation"
     fi
+}
 
+function install_jaeger() {
+    install_jaeger_backend
     pip_install jaeger-client
 }
 
+function install_otlp() {
+    # For OTLP we use Jaeger backend but any OTLP compatible backend
+    # can be used.
+    install_jaeger_backend
+    pip_install opentelemetry-sdk opentelemetry-exporter-otlp
+}
+
+function drop_jaeger() {
+    sg docker -c 'docker rm jaeger --force'
+}
+
 function install_elasticsearch() {
     if is_ubuntu; then
         install_package docker.io
@@ -108,6 +122,9 @@
     elif [ "$OSPROFILER_COLLECTOR" == "jaeger" ]; then
         install_jaeger
         
OSPROFILER_CONNECTION_STRING=${OSPROFILER_CONNECTION_STRING:-"jaeger://localhost:6831"}
+    elif [ "$OSPROFILER_COLLECTOR" == "otlp" ]; then
+        install_otlp
+        
OSPROFILER_CONNECTION_STRING=${OSPROFILER_CONNECTION_STRING:-"otlp://localhost:4318"}
     elif [ "$OSPROFILER_COLLECTOR" == "elasticsearch" ]; then
         install_elasticsearch
         
OSPROFILER_CONNECTION_STRING=${OSPROFILER_CONNECTION_STRING:-"elasticsearch://elastic:changeme@localhost:9200"}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-3.4.3/devstack/plugin.sh 
new/osprofiler-4.1.0/devstack/plugin.sh
--- old/osprofiler-3.4.3/devstack/plugin.sh     2022-05-05 11:53:10.000000000 
+0200
+++ new/osprofiler-4.1.0/devstack/plugin.sh     2023-07-13 17:46:21.000000000 
+0200
@@ -19,6 +19,12 @@
     echo_summary "Configuring Tempest"
     configure_osprofiler_in_tempest
 
+elif [[ "$1" == "unstack" ]]; then
+    if [[ "$OSPROFILER_COLLECTOR" == "jaeger" || \
+            "$OSPROFILER_COLLECTOR" == "otlp" ]]; then
+        echo_summary "Deleting jaeger docker container"
+        drop_jaeger
+    fi
 fi
 
 # Restore xtrace
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-3.4.3/doc/source/conf.py 
new/osprofiler-4.1.0/doc/source/conf.py
--- old/osprofiler-3.4.3/doc/source/conf.py     2022-05-05 11:53:10.000000000 
+0200
+++ new/osprofiler-4.1.0/doc/source/conf.py     2023-07-13 17:46:21.000000000 
+0200
@@ -70,8 +70,8 @@
 master_doc = 'index'
 
 # General information about the project.
-project = u'OSprofiler'
-copyright = u'2016, OpenStack Foundation'
+project = 'OSprofiler'
+copyright = '2016, OpenStack Foundation'
 
 # List of patterns, relative to source directory, that match files and
 # directories to ignore when looking for source files.
@@ -111,8 +111,8 @@
 latex_documents = [
     ('index',
      '%s.tex' % project,
-     u'%s Documentation' % project,
-     u'OpenStack Foundation', 'manual'),
+     '%s Documentation' % project,
+     'OpenStack Foundation', 'manual'),
 ]
 
 # -- Options for Texinfo output -----------
@@ -124,8 +124,8 @@
     (
         'index',
         'OSprofiler',
-        u'OSprofiler Documentation',
-        u'OSprofiler Team',
+        'OSprofiler Documentation',
+        'OSprofiler Team',
         'OSprofiler',
         'One line description of project.',
         'Miscellaneous'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-3.4.3/doc/source/user/collectors.rst 
new/osprofiler-4.1.0/doc/source/user/collectors.rst
--- old/osprofiler-3.4.3/doc/source/user/collectors.rst 2022-05-05 
11:53:10.000000000 +0200
+++ new/osprofiler-4.1.0/doc/source/user/collectors.rst 2023-07-13 
17:46:21.000000000 +0200
@@ -71,3 +71,25 @@
    - MySQL 5.7.8
 
 .. _SQLAlchemy understands: 
https://docs.sqlalchemy.org/en/latest/core/engines.html#database-urls
+
+
+OTLP
+----
+
+Use OTLP exporter. Can be used with any comptable backend that support
+OTLP.
+
+Usage
+=====
+To use the driver, the `connection_string` in the `[osprofiler]` config section
+needs to be set::
+
+  [osprofiler]
+  connection_string = otlp://192.168.192.81:4318
+
+Example: By default, jaeger is listening OTLP on 4318.
+
+.. note::
+
+   Curently the exporter is only supporting HTTP. In future some work
+   may happen to support gRPC.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-3.4.3/doc/source/user/history.rst 
new/osprofiler-4.1.0/doc/source/user/history.rst
--- old/osprofiler-3.4.3/doc/source/user/history.rst    2022-05-05 
11:53:10.000000000 +0200
+++ new/osprofiler-4.1.0/doc/source/user/history.rst    2023-07-13 
17:46:21.000000000 +0200
@@ -1 +1,5 @@
+=========
+ChangeLog
+=========
+
 .. include:: ../../../ChangeLog
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-3.4.3/doc/source/user/integration.rst 
new/osprofiler-4.1.0/doc/source/user/integration.rst
--- old/osprofiler-3.4.3/doc/source/user/integration.rst        2022-05-05 
11:53:10.000000000 +0200
+++ new/osprofiler-4.1.0/doc/source/user/integration.rst        2023-07-13 
17:46:21.000000000 +0200
@@ -87,6 +87,10 @@
   the list and rolling out that change and then removing the older key at
   some time in the future).
 
+  * Optionally you can enable client tracing using `requests`_,
+    Currently only supported by OTLP driver, this will add client call
+    tracing. see `profiler/trace_requests`'s option.
+
 * RPC API
 
   RPC calls are used for interaction between services of one project.
@@ -132,3 +136,4 @@
 .. _Ceilometer: https://wiki.openstack.org/wiki/Ceilometer
 .. _oslo.messaging: https://pypi.org/project/oslo.messaging
 .. _OSprofiler WSGI middleware: 
https://github.com/openstack/osprofiler/blob/master/osprofiler/web.py
+.. _requests: https://docs.python-requests.org/en/latest/index.html
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-3.4.3/lower-constraints.txt 
new/osprofiler-4.1.0/lower-constraints.txt
--- old/osprofiler-3.4.3/lower-constraints.txt  2022-05-05 11:53:10.000000000 
+0200
+++ new/osprofiler-4.1.0/lower-constraints.txt  2023-07-13 17:46:21.000000000 
+0200
@@ -5,6 +5,8 @@
 elasticsearch===2.0.0
 importlib_metadata==1.7.0
 jaeger-client==3.8.0
+opentelemetry-exporter-otlp==1.16.0
+opentelemetry-sdk==1.16.0
 netaddr===0.7.18
 openstackdocstheme==2.2.1
 oslo.concurrency===3.26.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-3.4.3/osprofiler/_utils.py 
new/osprofiler-4.1.0/osprofiler/_utils.py
--- old/osprofiler-3.4.3/osprofiler/_utils.py   2022-05-05 11:53:10.000000000 
+0200
+++ new/osprofiler-4.1.0/osprofiler/_utils.py   2023-07-13 17:46:21.000000000 
+0200
@@ -161,3 +161,15 @@
         # Return a new short id for this
         short_id = shorten_id(uuidutils.generate_uuid())
     return short_id
+
+
+def uuid_to_int128(span_uuid):
+    """Convert from uuid4 to 128 bit id for OpenTracing"""
+    if isinstance(span_uuid, int):
+        return span_uuid
+    try:
+        span_int = uuid.UUID(span_uuid).int
+    except ValueError:
+        # Return a new short id for this
+        span_int = uuid_to_int128(uuidutils.generate_uuid())
+    return span_int
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-3.4.3/osprofiler/drivers/__init__.py 
new/osprofiler-4.1.0/osprofiler/drivers/__init__.py
--- old/osprofiler-3.4.3/osprofiler/drivers/__init__.py 2022-05-05 
11:53:10.000000000 +0200
+++ new/osprofiler-4.1.0/osprofiler/drivers/__init__.py 2023-07-13 
17:46:21.000000000 +0200
@@ -1,6 +1,7 @@
 from osprofiler.drivers import base  # noqa
 from osprofiler.drivers import elasticsearch_driver  # noqa
 from osprofiler.drivers import jaeger  # noqa
+from osprofiler.drivers import otlp # noqa
 from osprofiler.drivers import loginsight  # noqa
 from osprofiler.drivers import messaging  # noqa
 from osprofiler.drivers import mongodb  # noqa
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-3.4.3/osprofiler/drivers/jaeger.py 
new/osprofiler-4.1.0/osprofiler/drivers/jaeger.py
--- old/osprofiler-3.4.3/osprofiler/drivers/jaeger.py   2022-05-05 
11:53:10.000000000 +0200
+++ new/osprofiler-4.1.0/osprofiler/drivers/jaeger.py   2023-07-13 
17:46:21.000000000 +0200
@@ -49,16 +49,23 @@
             "local_agent": {
                 "reporting_host": parsed_url.hostname,
                 "reporting_port": parsed_url.port,
-            }
+            },
+            "tags": conf.profiler_jaeger.process_tags
         }
 
         # Initialize tracer for each profiler
-        service_name = "{}-{}".format(project, service)
+        service_name = self._get_service_name(conf, project, service)
         config = jaeger_client.Config(cfg, service_name=service_name)
         self.tracer = config.initialize_tracer()
 
         self.spans = collections.deque()
 
+    def _get_service_name(self, conf, project, service):
+        prefix = conf.profiler_jaeger.service_name_prefix
+        if prefix:
+            return "{}-{}-{}".format(prefix, project, service)
+        return "{}-{}".format(project, service)
+
     @classmethod
     def get_name(cls):
         return "jaeger"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-3.4.3/osprofiler/drivers/otlp.py 
new/osprofiler-4.1.0/osprofiler/drivers/otlp.py
--- old/osprofiler-3.4.3/osprofiler/drivers/otlp.py     1970-01-01 
01:00:00.000000000 +0100
+++ new/osprofiler-4.1.0/osprofiler/drivers/otlp.py     2023-07-13 
17:46:21.000000000 +0200
@@ -0,0 +1,194 @@
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import collections
+from urllib import parse as parser
+
+from oslo_config import cfg
+from oslo_serialization import jsonutils
+
+from osprofiler import _utils as utils
+from osprofiler.drivers import base
+from osprofiler import exc
+
+
+class OTLP(base.Driver):
+    def __init__(self, connection_str, project=None, service=None, host=None,
+                 conf=cfg.CONF, **kwargs):
+        """OTLP driver using OTLP exporters."""
+
+        super(OTLP, self).__init__(connection_str, project=project,
+                                   service=service, host=host,
+                                   conf=conf, **kwargs)
+        try:
+            from opentelemetry import trace as trace_api
+
+            from opentelemetry.exporter.otlp.proto.http.trace_exporter import 
OTLPSpanExporter  # noqa
+            from opentelemetry.sdk.resources import Resource
+            from opentelemetry.sdk.trace.export import BatchSpanProcessor
+            from opentelemetry.sdk.trace import TracerProvider
+
+            self.trace_api = trace_api
+        except ImportError:
+            raise exc.CommandError(
+                "To use OSProfiler with OTLP exporters, "
+                "please install `opentelemetry-sdk` and "
+                "opentelemetry-exporter-otlp libraries. "
+                "To install with pip:\n `pip install opentelemetry-sdk "
+                "opentelemetry-exporter-otlp`.")
+
+        service_name = self._get_service_name(conf, project, service)
+        resource = Resource(attributes={
+            "service.name": service_name
+        })
+
+        parsed_url = parser.urlparse(connection_str)
+        # TODO("sahid"): We also want to handle https scheme?
+        parsed_url = parsed_url._replace(scheme="http")
+
+        self.trace_api.set_tracer_provider(
+            TracerProvider(resource=resource))
+        self.tracer = self.trace_api.get_tracer(__name__)
+
+        exporter = OTLPSpanExporter("{}/v1/traces".format(
+            parsed_url.geturl()))
+        self.trace_api.get_tracer_provider().add_span_processor(
+            BatchSpanProcessor(exporter))
+
+        self.spans = collections.deque()
+
+    def _get_service_name(self, conf, project, service):
+        prefix = conf.profiler_otlp.service_name_prefix
+        if prefix:
+            return "{}-{}-{}".format(prefix, project, service)
+        return "{}-{}".format(project, service)
+
+    @classmethod
+    def get_name(cls):
+        return "otlp"
+
+    def _kind(self, name):
+        if "wsgi" in name:
+            return self.trace_api.SpanKind.SERVER
+        elif ("db" in name or "http" in name or "api" in name):
+            return self.trace_api.SpanKind.CLIENT
+        return self.trace_api.SpanKind.INTERNAL
+
+    def _name(self, payload):
+        info = payload["info"]
+        if info.get("request"):
+            return "WSGI_{}_{}".format(
+                info["request"]["method"], info["request"]["path"])
+        elif info.get("db"):
+            return "SQL_{}".format(
+                info["db"]["statement"].split(' ', 1)[0].upper())
+        elif info.get("requests"):
+            return "REQUESTS_{}_{}".format(
+                info["requests"]["method"], info["requests"]["hostname"])
+        return payload["name"].rstrip("-start")
+
+    def notify(self, payload):
+        if payload["name"].endswith("start"):
+            parent = self.trace_api.SpanContext(
+                trace_id=utils.uuid_to_int128(payload["base_id"]),
+                span_id=utils.shorten_id(payload["parent_id"]),
+                is_remote=False,
+                trace_flags=self.trace_api.TraceFlags(
+                    self.trace_api.TraceFlags.SAMPLED))
+
+            ctx = self.trace_api.set_span_in_context(
+                self.trace_api.NonRecordingSpan(parent))
+
+            # OTLP Tracing span
+            span = self.tracer.start_span(
+                name=self._name(payload),
+                kind=self._kind(payload['name']),
+                attributes=self.create_span_tags(payload),
+                context=ctx)
+
+            span._context = self.trace_api.SpanContext(
+                trace_id=span.context.trace_id,
+                span_id=utils.shorten_id(payload["trace_id"]),
+                is_remote=span.context.is_remote,
+                trace_flags=span.context.trace_flags,
+                trace_state=span.context.trace_state)
+
+            self.spans.append(span)
+        else:
+            span = self.spans.pop()
+
+            # Store result of db call and function call
+            for call in ("db", "function"):
+                if payload.get("info", {}).get(call):
+                    span.set_attribute(
+                        "result", payload["info"][call]["result"])
+            # Store result of requests
+            if payload.get("info", {}).get("requests"):
+                span.set_attribute(
+                    "status_code", payload["info"]["requests"]["status_code"])
+            # Span error tag and log
+            if payload["info"].get("etype"):
+                span.set_attribute("error", True)
+                span.add_event("log", {
+                    "error.kind": payload["info"]["etype"],
+                    "message": payload["info"]["message"]})
+            span.end()
+
+    def get_report(self, base_id):
+        return self._parse_results()
+
+    def list_traces(self, fields=None):
+        return []
+
+    def list_error_traces(self):
+        return []
+
+    def create_span_tags(self, payload):
+        """Create tags an OpenTracing compatible span.
+
+        :param info: Information from OSProfiler trace.
+        :returns tags: A dictionary contains standard tags
+                       from OpenTracing sematic conventions,
+                       and some other custom tags related to http, db calls.
+        """
+        tags = {}
+        info = payload["info"]
+
+        if info.get("db"):
+            # DB calls
+            tags["db.statement"] = info["db"]["statement"]
+            tags["db.params"] = jsonutils.dumps(info["db"]["params"])
+        elif info.get("request"):
+            # WSGI call
+            tags["http.path"] = info["request"]["path"]
+            tags["http.query"] = info["request"]["query"]
+            tags["http.method"] = info["request"]["method"]
+            tags["http.scheme"] = info["request"]["scheme"]
+        elif info.get("requests"):
+            # requests call
+            tags["http.path"] = info["requests"]["path"]
+            tags["http.query"] = info["requests"]["query"]
+            tags["http.method"] = info["requests"]["method"]
+            tags["http.scheme"] = info["requests"]["scheme"]
+            tags["http.hostname"] = info["requests"]["hostname"]
+            tags["http.port"] = info["requests"]["port"]
+        elif info.get("function"):
+            # RPC, function calls
+            if "args" in info["function"]:
+                tags["args"] = info["function"]["args"]
+            if "kwargs" in info["function"]:
+                tags["kwargs"] = info["function"]["kwargs"]
+            tags["name"] = info["function"]["name"]
+
+        return tags
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-3.4.3/osprofiler/drivers/redis_driver.py 
new/osprofiler-4.1.0/osprofiler/drivers/redis_driver.py
--- old/osprofiler-3.4.3/osprofiler/drivers/redis_driver.py     2022-05-05 
11:53:10.000000000 +0200
+++ new/osprofiler-4.1.0/osprofiler/drivers/redis_driver.py     2023-07-13 
17:46:21.000000000 +0200
@@ -37,7 +37,7 @@
                                     service=service, host=host,
                                     conf=conf, **kwargs)
         try:
-            from redis import StrictRedis
+            from redis import Redis as _Redis
         except ImportError:
             raise exc.CommandError(
                 "To use OSProfiler with Redis driver, "
@@ -46,7 +46,7 @@
 
         # only connection over network is supported with schema
         # redis://[:password]@host[:port][/db]
-        self.db = StrictRedis.from_url(self.connection_str)
+        self.db = _Redis.from_url(self.connection_str)
         self.namespace_opt = "osprofiler_opt:"
         self.namespace = "osprofiler:"  # legacy
         self.namespace_error = "osprofiler_error:"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-3.4.3/osprofiler/initializer.py 
new/osprofiler-4.1.0/osprofiler/initializer.py
--- old/osprofiler-3.4.3/osprofiler/initializer.py      2022-05-05 
11:53:10.000000000 +0200
+++ new/osprofiler-4.1.0/osprofiler/initializer.py      2023-07-13 
17:46:21.000000000 +0200
@@ -14,6 +14,7 @@
 #    under the License.
 
 from osprofiler import notifier
+from osprofiler import requests
 from osprofiler import web
 
 
@@ -39,3 +40,5 @@
         **kwargs)
     notifier.set(_notifier)
     web.enable(conf.profiler.hmac_keys)
+    if conf.profiler.trace_requests:
+        requests.enable()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-3.4.3/osprofiler/opts.py 
new/osprofiler-4.1.0/osprofiler/opts.py
--- old/osprofiler-3.4.3/osprofiler/opts.py     2022-05-05 11:53:10.000000000 
+0200
+++ new/osprofiler-4.1.0/osprofiler/opts.py     2023-07-13 17:46:21.000000000 
+0200
@@ -64,9 +64,26 @@
   higher level of operations. Single SQL queries cannot be analyzed this way.
 """)
 
+_trace_requests_opt = cfg.BoolOpt(
+    "trace_requests",
+    default=False,
+    help="""
+Enable python requests package profiling.
+
+Supported drivers: jaeger+otlp
+
+Default value is False.
+
+Possible values:
+
+* True: Enables requests profiling.
+* False: Disables requests profiling.
+""")
+
 _hmac_keys_opt = cfg.StrOpt(
     "hmac_keys",
     default="SECRET_KEY",
+    secret=True,
     help="""
 Secret key(s) to use for encrypting context data for performance profiling.
 
@@ -158,6 +175,7 @@
 _PROFILER_OPTS = [
     _enabled_opt,
     _trace_sqlalchemy_opt,
+    _trace_requests_opt,
     _hmac_keys_opt,
     _connection_string_opt,
     _es_doc_type_opt,
@@ -170,6 +188,46 @@
 
 cfg.CONF.register_opts(_PROFILER_OPTS, group=_profiler_opt_group)
 
+_jaegerprofiler_opt_group = cfg.OptGroup(
+    "profiler_jaeger",
+    title="Jaeger's profiler driver related options")
+
+_service_name_prefix = cfg.StrOpt(
+    "service_name_prefix",
+    help="""
+Set service name prefix to Jaeger service name.
+""")
+
+_process_tags = cfg.DictOpt(
+    "process_tags",
+    default={},
+    help="""
+Set process tracer tags.
+""")
+
+_JAEGER_OPTS = [
+    _service_name_prefix,
+    _process_tags
+]
+
+cfg.CONF.register_opts(_JAEGER_OPTS, group=_jaegerprofiler_opt_group)
+
+_otlp_profiler_opt_group = cfg.OptGroup(
+    "profiler_otlp",
+    title="OTLP's profiler driver related options")
+
+_otlp_service_name_prefix = cfg.StrOpt(
+    "service_name_prefix",
+    help="""
+Set service name prefix to OTLP exporters.
+""")
+
+_OTLP_OPTS = [
+    _otlp_service_name_prefix,
+]
+
+cfg.CONF.register_opts(_OTLP_OPTS, group=_otlp_profiler_opt_group)
+
 
 def set_defaults(conf, enabled=None, trace_sqlalchemy=None, hmac_keys=None,
                  connection_string=None, es_doc_type=None,
@@ -239,4 +297,6 @@
 
 
 def list_opts():
-    return [(_profiler_opt_group.name, _PROFILER_OPTS)]
+    return [(_profiler_opt_group.name, _PROFILER_OPTS),
+            (_jaegerprofiler_opt_group, _JAEGER_OPTS),
+            (_otlp_profiler_opt_group, _OTLP_OPTS)]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-3.4.3/osprofiler/requests.py 
new/osprofiler-4.1.0/osprofiler/requests.py
--- old/osprofiler-3.4.3/osprofiler/requests.py 1970-01-01 01:00:00.000000000 
+0100
+++ new/osprofiler-4.1.0/osprofiler/requests.py 2023-07-13 17:46:21.000000000 
+0200
@@ -0,0 +1,73 @@
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import logging as log
+from urllib import parse as parser
+
+from osprofiler import profiler
+from osprofiler import web
+
+
+# Register an OSProfiler HTTP Adapter that will profile any call made with
+# requests.
+
+LOG = log.getLogger(__name__)
+
+_FUNC = None
+
+try:
+    from requests.adapters import HTTPAdapter
+except ImportError:
+    pass
+else:
+    def send(self, request, *args, **kwargs):
+        parsed_url = parser.urlparse(request.url)
+
+        # Best effort guessing port if needed
+        port = parsed_url.port or ""
+        if not port and parsed_url.scheme == "http":
+            port = 80
+        elif not port and parsed_url.scheme == "https":
+            port = 443
+
+        profiler.start(parsed_url.scheme, info={"requests": {
+            "method": request.method,
+            "query": parsed_url.query,
+            "path": parsed_url.path,
+            "hostname": parsed_url.hostname,
+            "port": port,
+            "scheme": parsed_url.scheme}})
+
+        # Profiling headers are overrident to take in account this new
+        # context/span.
+        request.headers.update(
+            web.get_trace_id_headers())
+
+        response = _FUNC(self, request, *args, **kwargs)
+
+        profiler.stop(info={"requests": {
+            "status_code": response.status_code}})
+
+        return response
+
+    _FUNC = HTTPAdapter.send
+
+
+def enable():
+    if _FUNC:
+        HTTPAdapter.send = send
+        LOG.debug("profiling requests enabled")
+    else:
+        LOG.warning("unable to activate profiling for requests, "
+                    "please ensure that python requests is installed.")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osprofiler-3.4.3/osprofiler/tests/unit/drivers/test_jaeger.py 
new/osprofiler-4.1.0/osprofiler/tests/unit/drivers/test_jaeger.py
--- old/osprofiler-3.4.3/osprofiler/tests/unit/drivers/test_jaeger.py   
2022-05-05 11:53:10.000000000 +0200
+++ new/osprofiler-4.1.0/osprofiler/tests/unit/drivers/test_jaeger.py   
2023-07-13 17:46:21.000000000 +0200
@@ -15,14 +15,24 @@
 
 from unittest import mock
 
+from oslo_config import cfg
+
 from osprofiler.drivers import jaeger
+from osprofiler import opts
 from osprofiler.tests import test
 
+from jaeger_client import Config
+
 
 class JaegerTestCase(test.TestCase):
 
     def setUp(self):
         super(JaegerTestCase, self).setUp()
+
+        opts.set_defaults(cfg.CONF)
+        cfg.CONF.set_default(
+            "process_tags", "k1:v1,k2:v2", "profiler_jaeger")
+
         self.payload_start = {
             "name": "api-start",
             "base_id": "4e3e0ec6-2938-40b1-8504-09eb1d4b0dee",
@@ -48,8 +58,12 @@
             }
         }
 
+        # Force to False as if already initialized, tracer will be None.
+        # see: jaeger_client/config.py#L374
+        Config._initialized = False
         self.driver = jaeger.Jaeger("jaeger://127.0.0.1:6831",
-                                    project="nova", service="api")
+                                    project="nova", service="api",
+                                    conf=cfg.CONF)
 
     @mock.patch("osprofiler._utils.shorten_id")
     def test_notify_start(self, mock_shorten_id):
@@ -76,3 +90,21 @@
         mock_time.reset_mock()
 
         span.finish.assert_called_once_with(finish_time=fake_time)
+
+    def test_service_name_default(self):
+        self.assertEqual("pr1-svc1", self.driver._get_service_name(
+            cfg.CONF, "pr1", "svc1"))
+
+    def test_service_name_prefix(self):
+        cfg.CONF.set_default(
+            "service_name_prefix", "prx1", "profiler_jaeger")
+        self.assertEqual("prx1-pr1-svc1", self.driver._get_service_name(
+            cfg.CONF, "pr1", "svc1"))
+
+    def test_process_tags(self):
+        tags = self.driver.tracer.tags
+        # Let's remove variable tags generated by Jaeger client
+        del tags['hostname']
+        del tags['jaeger.version']
+        del tags['ip']
+        self.assertEqual({'k1': 'v1', 'k2': 'v2'}, tags)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osprofiler-3.4.3/osprofiler/tests/unit/drivers/test_otlp.py 
new/osprofiler-4.1.0/osprofiler/tests/unit/drivers/test_otlp.py
--- old/osprofiler-3.4.3/osprofiler/tests/unit/drivers/test_otlp.py     
1970-01-01 01:00:00.000000000 +0100
+++ new/osprofiler-4.1.0/osprofiler/tests/unit/drivers/test_otlp.py     
2023-07-13 17:46:21.000000000 +0200
@@ -0,0 +1,84 @@
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from unittest import mock
+
+from oslo_config import cfg
+
+from osprofiler.drivers import otlp
+from osprofiler import opts
+from osprofiler.tests import test
+
+
+class OTLPTestCase(test.TestCase):
+
+    def setUp(self):
+        super(OTLPTestCase, self).setUp()
+
+        opts.set_defaults(cfg.CONF)
+
+        self.payload_start = {
+            "name": "api-start",
+            "base_id": "4e3e0ec6-2938-40b1-8504-09eb1d4b0dee",
+            "trace_id": "1c089ea8-28fe-4f3d-8c00-f6daa2bc32f1",
+            "parent_id": "e2715537-3d1c-4f0c-b3af-87355dc5fc5b",
+            "timestamp": "2018-05-03T04:31:51.781381",
+            "info": {
+                "host": "test"
+            }
+        }
+
+        self.payload_stop = {
+            "name": "api-stop",
+            "base_id": "4e3e0ec6-2938-40b1-8504-09eb1d4b0dee",
+            "trace_id": "1c089ea8-28fe-4f3d-8c00-f6daa2bc32f1",
+            "parent_id": "e2715537-3d1c-4f0c-b3af-87355dc5fc5b",
+            "timestamp": "2018-05-03T04:31:51.781381",
+            "info": {
+                "host": "test",
+                "function": {
+                    "result": 1
+                }
+            }
+        }
+
+        self.driver = otlp.OTLP(
+            "otlp://127.0.0.1:6831",
+            project="nova", service="api",
+            conf=cfg.CONF)
+
+    def test_notify_start(self):
+        self.driver.notify(self.payload_start)
+        self.assertEqual(1, len(self.driver.spans))
+
+    def test_notify_stop(self):
+        mock_end = mock.MagicMock()
+        self.driver.notify(self.payload_start)
+        self.driver.spans[0].end = mock_end
+        self.driver.notify(self.payload_stop)
+        mock_end.assert_called_once()
+
+    def test_service_name_default(self):
+        self.assertEqual("pr1-svc1", self.driver._get_service_name(
+            cfg.CONF, "pr1", "svc1"))
+
+    def test_service_name_prefix(self):
+        cfg.CONF.set_default(
+            "service_name_prefix", "prx1", "profiler_otlp")
+        self.assertEqual("prx1-pr1-svc1", self.driver._get_service_name(
+            cfg.CONF, "pr1", "svc1"))
+
+    def test_process_tags(self):
+        # Need to be implemented.
+        pass
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-3.4.3/osprofiler.egg-info/PKG-INFO 
new/osprofiler-4.1.0/osprofiler.egg-info/PKG-INFO
--- old/osprofiler-3.4.3/osprofiler.egg-info/PKG-INFO   2022-05-05 
11:53:50.000000000 +0200
+++ new/osprofiler-4.1.0/osprofiler.egg-info/PKG-INFO   2023-07-13 
17:46:48.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: osprofiler
-Version: 3.4.3
+Version: 4.1.0
 Summary: OpenStack Profiler Library
 Home-page: https://docs.openstack.org/osprofiler/latest/
 Author: OpenStack
@@ -45,11 +45,10 @@
 Classifier: Operating System :: POSIX :: Linux
 Classifier: Programming Language :: Python
 Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.6
-Classifier: Programming Language :: Python :: 3.7
 Classifier: Programming Language :: Python :: 3.8
+Classifier: Programming Language :: Python :: 3.9
 Classifier: Programming Language :: Python :: 3 :: Only
 Classifier: Programming Language :: Python :: Implementation :: CPython
-Requires-Python: >=3.6
+Requires-Python: >=3.8
 Provides-Extra: oslo_config
 Provides-Extra: test
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-3.4.3/osprofiler.egg-info/SOURCES.txt 
new/osprofiler-4.1.0/osprofiler.egg-info/SOURCES.txt
--- old/osprofiler-3.4.3/osprofiler.egg-info/SOURCES.txt        2022-05-05 
11:53:50.000000000 +0200
+++ new/osprofiler-4.1.0/osprofiler.egg-info/SOURCES.txt        2023-07-13 
17:46:48.000000000 +0200
@@ -43,6 +43,7 @@
 osprofiler/notifier.py
 osprofiler/opts.py
 osprofiler/profiler.py
+osprofiler/requests.py
 osprofiler/sqlalchemy.py
 osprofiler/web.py
 osprofiler.egg-info/PKG-INFO
@@ -65,6 +66,7 @@
 osprofiler/drivers/loginsight.py
 osprofiler/drivers/messaging.py
 osprofiler/drivers/mongodb.py
+osprofiler/drivers/otlp.py
 osprofiler/drivers/redis_driver.py
 osprofiler/drivers/sqlalchemy_driver.py
 osprofiler/hacking/__init__.py
@@ -93,11 +95,18 @@
 osprofiler/tests/unit/drivers/test_loginsight.py
 osprofiler/tests/unit/drivers/test_messaging.py
 osprofiler/tests/unit/drivers/test_mongodb.py
+osprofiler/tests/unit/drivers/test_otlp.py
 osprofiler/tests/unit/drivers/test_redis_driver.py
 playbooks/osprofiler-post.yaml
 releasenotes/notes/add-reno-996dd44974d53238.yaml
+releasenotes/notes/add-requests-profiling-761e09f243d36966.yaml
+releasenotes/notes/drop-jaeger-container-when-unstacking-e8fcdc036f80158a.yaml
 releasenotes/notes/drop-python-2-7-73d3113c69d724d6.yaml
+releasenotes/notes/jaeger-add-process-tags-79d5f5d7a0b049ef.yaml
+releasenotes/notes/jaeger-service-name-prefix-72878a930f700878.yaml
+releasenotes/notes/otlp-driver-cb932038ad580ac2.yaml
 releasenotes/notes/redis-improvement-d4c91683fc89f570.yaml
+releasenotes/notes/remove-strict-redis-9eb43d30c9c1fc43.yaml
 releasenotes/source/conf.py
 releasenotes/source/index.rst
 releasenotes/source/ocata.rst
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-3.4.3/osprofiler.egg-info/pbr.json 
new/osprofiler-4.1.0/osprofiler.egg-info/pbr.json
--- old/osprofiler-3.4.3/osprofiler.egg-info/pbr.json   2022-05-05 
11:53:50.000000000 +0200
+++ new/osprofiler-4.1.0/osprofiler.egg-info/pbr.json   2023-07-13 
17:46:48.000000000 +0200
@@ -1 +1 @@
-{"git_version": "3286301", "is_release": true}
\ No newline at end of file
+{"git_version": "3c5fead", "is_release": true}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-3.4.3/osprofiler.egg-info/requires.txt 
new/osprofiler-4.1.0/osprofiler.egg-info/requires.txt
--- old/osprofiler-3.4.3/osprofiler.egg-info/requires.txt       2022-05-05 
11:53:50.000000000 +0200
+++ new/osprofiler-4.1.0/osprofiler.egg-info/requires.txt       2023-07-13 
17:46:48.000000000 +0200
@@ -21,6 +21,8 @@
 flake8-import-order==0.18.1
 hacking<3.2.0,>=3.1.0
 jaeger-client>=3.8.0
+opentelemetry-exporter-otlp>=1.16.0
+opentelemetry-sdk>=1.16.0
 pre-commit>=2.6.0
 pymongo!=3.1,>=3.0.2
 redis>=2.10.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osprofiler-3.4.3/releasenotes/notes/add-requests-profiling-761e09f243d36966.yaml
 
new/osprofiler-4.1.0/releasenotes/notes/add-requests-profiling-761e09f243d36966.yaml
--- 
old/osprofiler-3.4.3/releasenotes/notes/add-requests-profiling-761e09f243d36966.yaml
        1970-01-01 01:00:00.000000000 +0100
+++ 
new/osprofiler-4.1.0/releasenotes/notes/add-requests-profiling-761e09f243d36966.yaml
        2023-07-13 17:46:21.000000000 +0200
@@ -0,0 +1,5 @@
+---
+features:
+  - |
+    New profiler for python requests. Currently only OTLP driver is
+    supporting it, see `profiler/trace_requests`'s option.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osprofiler-3.4.3/releasenotes/notes/drop-jaeger-container-when-unstacking-e8fcdc036f80158a.yaml
 
new/osprofiler-4.1.0/releasenotes/notes/drop-jaeger-container-when-unstacking-e8fcdc036f80158a.yaml
--- 
old/osprofiler-3.4.3/releasenotes/notes/drop-jaeger-container-when-unstacking-e8fcdc036f80158a.yaml
 1970-01-01 01:00:00.000000000 +0100
+++ 
new/osprofiler-4.1.0/releasenotes/notes/drop-jaeger-container-when-unstacking-e8fcdc036f80158a.yaml
 2023-07-13 17:46:21.000000000 +0200
@@ -0,0 +1,7 @@
+---
+issues:
+  - |
+    Using devstack, when unstacking, the docker container running
+    Jaeger tracing will be deleted that to correctly clean processes
+    started by devstack.. This also avoid `./stack.sh` to fail when
+    recreating the environnement.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osprofiler-3.4.3/releasenotes/notes/jaeger-add-process-tags-79d5f5d7a0b049ef.yaml
 
new/osprofiler-4.1.0/releasenotes/notes/jaeger-add-process-tags-79d5f5d7a0b049ef.yaml
--- 
old/osprofiler-3.4.3/releasenotes/notes/jaeger-add-process-tags-79d5f5d7a0b049ef.yaml
       1970-01-01 01:00:00.000000000 +0100
+++ 
new/osprofiler-4.1.0/releasenotes/notes/jaeger-add-process-tags-79d5f5d7a0b049ef.yaml
       2023-07-13 17:46:21.000000000 +0200
@@ -0,0 +1,5 @@
+---
+features:
+  - |
+    Add ability to set tracer process tags to Jaeger via a
+    configuration option introduced, `profiler_jaeger/process_tags`.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osprofiler-3.4.3/releasenotes/notes/jaeger-service-name-prefix-72878a930f700878.yaml
 
new/osprofiler-4.1.0/releasenotes/notes/jaeger-service-name-prefix-72878a930f700878.yaml
--- 
old/osprofiler-3.4.3/releasenotes/notes/jaeger-service-name-prefix-72878a930f700878.yaml
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/osprofiler-4.1.0/releasenotes/notes/jaeger-service-name-prefix-72878a930f700878.yaml
    2023-07-13 17:46:21.000000000 +0200
@@ -0,0 +1,5 @@
+---
+features:
+  - |
+    Introduces service name prefix for Jaeger driver. Please consider
+    using option `profiler_jaeger/service_name_prefix` to set it.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osprofiler-3.4.3/releasenotes/notes/otlp-driver-cb932038ad580ac2.yaml 
new/osprofiler-4.1.0/releasenotes/notes/otlp-driver-cb932038ad580ac2.yaml
--- old/osprofiler-3.4.3/releasenotes/notes/otlp-driver-cb932038ad580ac2.yaml   
1970-01-01 01:00:00.000000000 +0100
+++ new/osprofiler-4.1.0/releasenotes/notes/otlp-driver-cb932038ad580ac2.yaml   
2023-07-13 17:46:21.000000000 +0200
@@ -0,0 +1,8 @@
+---
+features:
+  - |
+    An OTLP (OpenTelemetry) exporter is now supported. The current
+    support is experimental but the aim is to deprecate and remove
+    legacy Jaeger driver which is using the already deprecated python
+    library jaeger client. Operators who want to use it should enable
+    `otlp`. OTLP is comptatible with Jaeger backend.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osprofiler-3.4.3/releasenotes/notes/remove-strict-redis-9eb43d30c9c1fc43.yaml
 
new/osprofiler-4.1.0/releasenotes/notes/remove-strict-redis-9eb43d30c9c1fc43.yaml
--- 
old/osprofiler-3.4.3/releasenotes/notes/remove-strict-redis-9eb43d30c9c1fc43.yaml
   1970-01-01 01:00:00.000000000 +0100
+++ 
new/osprofiler-4.1.0/releasenotes/notes/remove-strict-redis-9eb43d30c9c1fc43.yaml
   2023-07-13 17:46:21.000000000 +0200
@@ -0,0 +1,4 @@
+---
+upgrade:
+  - |
+    The minimum redis-py version required is now >= 3.0.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-3.4.3/releasenotes/source/conf.py 
new/osprofiler-4.1.0/releasenotes/source/conf.py
--- old/osprofiler-3.4.3/releasenotes/source/conf.py    2022-05-05 
11:53:10.000000000 +0200
+++ new/osprofiler-4.1.0/releasenotes/source/conf.py    2023-07-13 
17:46:21.000000000 +0200
@@ -58,8 +58,8 @@
 master_doc = 'index'
 
 # General information about the project.
-project = u'osprofiler Release Notes'
-copyright = u'2016, osprofiler Developers'
+project = 'osprofiler Release Notes'
+copyright = '2016, osprofiler Developers'
 
 # Release notes do not need a version in the title, they span
 # multiple versions.
@@ -209,8 +209,8 @@
 #  author, documentclass [howto, manual, or own class]).
 latex_documents = [
     ('index', 'osprofilerReleaseNotes.tex',
-     u'osprofiler Release Notes Documentation',
-     u'osprofiler Developers', 'manual'),
+     'osprofiler Release Notes Documentation',
+     'osprofiler Developers', 'manual'),
 ]
 
 # The name of an image file (relative to this directory) to place at the top of
@@ -240,8 +240,8 @@
 # (source start file, name, description, authors, manual section).
 man_pages = [
     ('index', 'osprofilerReleaseNotes',
-     u'osprofiler Release Notes Documentation',
-     [u'osprofiler Developers'], 1)
+     'osprofiler Release Notes Documentation',
+     ['osprofiler Developers'], 1)
 ]
 
 # If true, show URL addresses after external links.
@@ -255,8 +255,8 @@
 #  dir menu entry, description, category)
 texinfo_documents = [
     ('index', 'osprofilerReleaseNotes',
-     u'osprofiler Release Notes Documentation',
-     u'osprofiler Developers', 'osprofilerReleaseNotes',
+     'osprofiler Release Notes Documentation',
+     'osprofiler Developers', 'osprofilerReleaseNotes',
      'One line description of project.',
      'Miscellaneous'),
 ]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-3.4.3/releasenotes/source/index.rst 
new/osprofiler-4.1.0/releasenotes/source/index.rst
--- old/osprofiler-3.4.3/releasenotes/source/index.rst  2022-05-05 
11:53:10.000000000 +0200
+++ new/osprofiler-4.1.0/releasenotes/source/index.rst  2023-07-13 
17:46:21.000000000 +0200
@@ -2,15 +2,15 @@
  osprofiler Release Notes
 ==========================
 
- .. toctree::
-    :maxdepth: 1
+.. toctree::
+   :maxdepth: 1
 
-    unreleased
-    victoria
-    ussuri
-    train
-    stein
-    rocky
-    queens
-    pike
-    ocata
+   unreleased
+   victoria
+   ussuri
+   train
+   stein
+   rocky
+   queens
+   pike
+   ocata
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-3.4.3/setup.cfg 
new/osprofiler-4.1.0/setup.cfg
--- old/osprofiler-3.4.3/setup.cfg      2022-05-05 11:53:51.025370600 +0200
+++ new/osprofiler-4.1.0/setup.cfg      2023-07-13 17:46:48.875940000 +0200
@@ -1,12 +1,12 @@
 [metadata]
 name = osprofiler
 summary = OpenStack Profiler Library
-description-file = 
+description_file = 
        README.rst
 author = OpenStack
-author-email = openstack-disc...@lists.openstack.org
-home-page = https://docs.openstack.org/osprofiler/latest/
-python-requires = >=3.6
+author_email = openstack-disc...@lists.openstack.org
+home_page = https://docs.openstack.org/osprofiler/latest/
+python_requires = >=3.8
 classifier = 
        Environment :: OpenStack
        Intended Audience :: Developers
@@ -15,9 +15,8 @@
        Operating System :: POSIX :: Linux
        Programming Language :: Python
        Programming Language :: Python :: 3
-       Programming Language :: Python :: 3.6
-       Programming Language :: Python :: 3.7
        Programming Language :: Python :: 3.8
+       Programming Language :: Python :: 3.9
        Programming Language :: Python :: 3 :: Only
        Programming Language :: Python :: Implementation :: CPython
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-3.4.3/test-requirements.txt 
new/osprofiler-4.1.0/test-requirements.txt
--- old/osprofiler-3.4.3/test-requirements.txt  2022-05-05 11:53:10.000000000 
+0200
+++ new/osprofiler-4.1.0/test-requirements.txt  2023-07-13 17:46:21.000000000 
+0200
@@ -20,5 +20,7 @@
 
 # For Jaeger Tracing
 jaeger-client>=3.8.0 # Apache-2.0
+opentelemetry-exporter-otlp>=1.16.0
+opentelemetry-sdk>=1.16.0
 
 pre-commit>=2.6.0 # MIT
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-3.4.3/tox.ini new/osprofiler-4.1.0/tox.ini
--- old/osprofiler-3.4.3/tox.ini        2022-05-05 11:53:10.000000000 +0200
+++ new/osprofiler-4.1.0/tox.ini        2023-07-13 17:46:21.000000000 +0200
@@ -1,16 +1,14 @@
 [tox]
 minversion = 3.18.0
-# Needed to create ChangeLog for docs building
-skipsdist = False
 envlist = py3,pep8
-ignore_basepython_conflict = True
+ignore_basepython_conflict = true
 
 [testenv]
 basepython = python3
-setenv = VIRTUAL_ENV={envdir}
-         LANG=en_US.UTF-8
-         LANGUAGE=en_US:en
-         LC_ALL=C
+setenv =
+  LANG=en_US.UTF-8
+  LANGUAGE=en_US:en
+  LC_ALL=C
 deps =
   
-c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
   -r{toxinidir}/requirements.txt
@@ -19,19 +17,14 @@
 commands = stestr run --slowest {posargs}
 distribute = false
 
-[testenv:functional]
-setenv = {[testenv]setenv}
-         OS_TEST_PATH=./osprofiler/tests/functional
+[testenv:functional{,-py38,-py39}]
+setenv =
+  {[testenv]setenv}
+  OS_TEST_PATH=./osprofiler/tests/functional
 deps =
   {[testenv]deps}
   oslo.messaging
 
-[testenv:functional-py36]
-basepython = python3.6
-setenv = {[testenv:functional]setenv}
-deps =
-  {[testenv:functional]deps}
-
 [testenv:pep8]
 commands =
   pre-commit run -a
@@ -44,22 +37,23 @@
 
 [testenv:cover]
 setenv =
-    PYTHON=coverage run --source osprofiler --parallel-mode
+  PYTHON=coverage run --source osprofiler --parallel-mode
 commands =
-    stestr run {posargs}
-    coverage combine
-    coverage html -d cover
-    coverage xml -o cover/coverage.xml
+  stestr run {posargs}
+  coverage combine
+  coverage html -d cover
+  coverage xml -o cover/coverage.xml
 
 [testenv:docs]
 deps =
-    
-c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
-    -r{toxinidir}/requirements.txt
-    -r{toxinidir}/doc/requirements.txt
+  
-c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
+  -r{toxinidir}/requirements.txt
+  -r{toxinidir}/doc/requirements.txt
 allowlist_externals = rm
 commands =
   rm -rf doc/build api-guide/build api-ref/build doc/source/contributor/modules
   sphinx-build -W --keep-going -b html -d doc/build/doctrees doc/source 
doc/build/html
+usedevelop = false
 
 [testenv:bandit]
 commands = bandit -r osprofiler -n5
@@ -76,22 +70,22 @@
 
 [flake8:local-plugins]
 extension =
-    N301 = checks:check_assert_methods_from_mock
-    N320 = checks:assert_true_instance
-    N321 = checks:assert_equal_type
-    N322 = checks:assert_equal_none
-    N323 = checks:assert_true_or_false_with_in
-    N324 = checks:assert_equal_in
-    N351 = checks:check_no_constructor_data_struct
-    N352 = checks:check_dict_formatting_in_string
-    N353 = checks:check_using_unicode
-    N354 = checks:check_raises
+  N301 = checks:check_assert_methods_from_mock
+  N320 = checks:assert_true_instance
+  N321 = checks:assert_equal_type
+  N322 = checks:assert_equal_none
+  N323 = checks:assert_true_or_false_with_in
+  N324 = checks:assert_equal_in
+  N351 = checks:check_no_constructor_data_struct
+  N352 = checks:check_dict_formatting_in_string
+  N353 = checks:check_using_unicode
+  N354 = checks:check_raises
 paths = ./osprofiler/hacking
 
 [testenv:releasenotes]
 deps =
-    
-c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
-    -r{toxinidir}/doc/requirements.txt
+  
-c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
+  -r{toxinidir}/doc/requirements.txt
 allowlist_externals = rm
 commands =
   rm -rf releasenotes/build

Reply via email to