Hello community,

here is the log from the commit of package python-osprofiler for 
openSUSE:Factory checked in at 2019-05-03 22:43:02
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-osprofiler (Old)
 and      /work/SRC/openSUSE:Factory/.python-osprofiler.new.5148 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-osprofiler"

Fri May  3 22:43:02 2019 rev:9 rq:692872 version:2.6.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-osprofiler/python-osprofiler.changes      
2019-03-13 09:13:08.675399651 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-osprofiler.new.5148/python-osprofiler.changes
    2019-05-03 22:43:04.079322490 +0200
@@ -1,0 +2,31 @@
+Mon Apr  8 14:04:49 UTC 2019 - [email protected]
+
+- update to version 2.6.0
+  - Switch to stestr
+  - When shortening span-ids, check if they're already short
+  - Do not insert osprofiler filter into Neutron api-paste pipeline
+  - Change python3.5 job to python3.7 job on Stein+
+  - import zuul job settings from project-config
+  - [devstack] Add support for elasticsearch backend
+  - Change openstack-dev to openstack-discuss
+  - Update reno for stable/rocky
+  - Update min tox version to 2.0
+  - Don't quote {posargs} in tox.ini
+  - add python 3.6 unit test job
+  - Make tracing of SQL statements configurable in DevStack plugin
+  - add lib-forward-testing-python3 test job
+  - build universal wheels
+  - Reload keystone to apply osprofiler config
+  - Allow test path to be overridden
+  - Add sqlalchemy collector
+  - Configure Jaeger collector in DevStack
+  - add password for connecting redis-sentinel
+  - Add support for mongodb backend in devstack plugin
+  - In DevStack install Redis client library via pip, not as system package
+  - Use $STACK_USER variable in install_jaeger function
+  - Change http to https in reference link
+  - In case of an error, always add message
+  - Use templates for cover and lower-constraints
+- remove 0001-Add-sqlalchemy-collector.patch and 
0001-Don-t-fail-if-sqlalchemy-driver-fails-to-initialize.patch
+
+-------------------------------------------------------------------

Old:
----
  0001-Add-sqlalchemy-collector.patch
  0001-Don-t-fail-if-sqlalchemy-driver-fails-to-initialize.patch
  osprofiler-2.3.0.tar.gz

New:
----
  osprofiler-2.6.0.tar.gz

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

Other differences:
------------------
++++++ python-osprofiler.spec ++++++
--- /var/tmp/diff_new_pack.FTmZVM/_old  2019-05-03 22:43:04.651323694 +0200
+++ /var/tmp/diff_new_pack.FTmZVM/_new  2019-05-03 22:43:04.655323703 +0200
@@ -17,22 +17,19 @@
 
 
 Name:           python-osprofiler
-Version:        2.3.0
+Version:        2.6.0
 Release:        0
 Summary:        OpenStack Profiler Library
 License:        Apache-2.0
 Group:          Development/Languages/Python
 URL:            https://launchpad.net/osprofiler
-Source0:        
https://files.pythonhosted.org/packages/source/o/osprofiler/osprofiler-2.3.0.tar.gz
-# backport sql collector -- 
https://github.com/openstack/osprofiler/commit/032a21861854c5f63a039c997a58b4a979e62750
-Patch0:         0001-Add-sqlalchemy-collector.patch
-# https://review.openstack.org/#/c/642407/
-Patch1:         0001-Don-t-fail-if-sqlalchemy-driver-fails-to-initialize.patch
+Source0:        
https://files.pythonhosted.org/packages/source/o/osprofiler/osprofiler-2.6.0.tar.gz
 BuildRequires:  openstack-macros
 BuildRequires:  python-devel
 BuildRequires:  python2-PrettyTable >= 0.7.2
 BuildRequires:  python2-WebOb >= 1.7.1
 BuildRequires:  python2-ddt
+BuildRequires:  python2-docutils
 BuildRequires:  python2-elasticsearch
 BuildRequires:  python2-mock
 BuildRequires:  python2-oslo.concurrency >= 3.26.0
@@ -43,12 +40,13 @@
 BuildRequires:  python2-python-subunit
 BuildRequires:  python2-redis
 BuildRequires:  python2-six >= 1.10.0
-BuildRequires:  python2-testrepository
+BuildRequires:  python2-stestr
 BuildRequires:  python2-testtools
 BuildRequires:  python3-PrettyTable >= 0.7.2
 BuildRequires:  python3-WebOb >= 1.7.1
 BuildRequires:  python3-ddt
 BuildRequires:  python3-devel
+BuildRequires:  python3-docutils
 BuildRequires:  python3-elasticsearch
 BuildRequires:  python3-mock
 BuildRequires:  python3-oslo.concurrency >= 3.26.0
@@ -59,7 +57,7 @@
 BuildRequires:  python3-python-subunit
 BuildRequires:  python3-redis
 BuildRequires:  python3-six >= 1.10.0
-BuildRequires:  python3-testrepository
+BuildRequires:  python3-stestr
 BuildRequires:  python3-testtools
 Requires:       python-PrettyTable >= 0.7.2
 Requires:       python-WebOb >= 1.7.1
@@ -97,9 +95,8 @@
 Documentation for OSProfiler.
 
 %prep
-%autosetup -p1 -n osprofiler-2.3.0
+%autosetup -p1 -n osprofiler-2.6.0
 %py_req_cleanup
-sed -i 's/^warning-is-error.*/warning-is-error = 0/g' setup.cfg
 
 %build
 %{python_build}
@@ -120,9 +117,7 @@
 %python_uninstall_alternative osprofiler
 
 %check
-%{python_expand rm -rf .testrepository
-$python setup.py testr --testr-args 
'(?!^osprofiler.tests.unit.drivers.test_jaeger.JaegerTestCase.*$)(^.*$)'
-}
+%python_exec -m stestr.cli run --black-regex 
'(^osprofiler.tests.unit.drivers.test_jaeger.JaegerTestCase.*$)'
 
 %files %{python_files}
 %license LICENSE

++++++ _service ++++++
--- /var/tmp/diff_new_pack.FTmZVM/_old  2019-05-03 22:43:04.671323737 +0200
+++ /var/tmp/diff_new_pack.FTmZVM/_new  2019-05-03 22:43:04.675323745 +0200
@@ -1,8 +1,8 @@
 <services>
   <service mode="disabled" name="renderspec">
-    <param 
name="input-template">https://raw.githubusercontent.com/openstack/rpm-packaging/stable/rocky/openstack/osprofiler/osprofiler.spec.j2</param>
+    <param 
name="input-template">https://raw.githubusercontent.com/openstack/rpm-packaging/stable/stein/openstack/osprofiler/osprofiler.spec.j2</param>
     <param name="output-name">python-osprofiler.spec</param>
-    <param 
name="requirements">https://raw.githubusercontent.com/openstack/osprofiler/stable/rocky/requirements.txt</param>
+    <param 
name="requirements">https://raw.githubusercontent.com/openstack/osprofiler/stable/stein/requirements.txt</param>
     <param name="changelog-email">[email protected]</param>
     <param name="changelog-provider">gh,openstack,osprofiler</param>
   </service>

++++++ osprofiler-2.3.0.tar.gz -> osprofiler-2.6.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-2.3.0/.stestr.conf 
new/osprofiler-2.6.0/.stestr.conf
--- old/osprofiler-2.3.0/.stestr.conf   1970-01-01 01:00:00.000000000 +0100
+++ new/osprofiler-2.6.0/.stestr.conf   2019-02-18 22:52:33.000000000 +0100
@@ -0,0 +1,4 @@
+[DEFAULT]
+test_path=${OS_TEST_PATH:-./osprofiler/tests/unit}
+top_dir=./
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-2.3.0/.testr.conf 
new/osprofiler-2.6.0/.testr.conf
--- old/osprofiler-2.3.0/.testr.conf    2018-07-10 00:57:10.000000000 +0200
+++ new/osprofiler-2.6.0/.testr.conf    1970-01-01 01:00:00.000000000 +0100
@@ -1,4 +0,0 @@
-[DEFAULT]
-test_command=OS_STDOUT_CAPTURE=1 OS_STDERR_CAPTURE=1 ${PYTHON:-python} -m 
subunit.run discover -t ./ ${OS_TEST_PATH:-./osprofiler/tests/unit} $LISTOPT 
$IDOPTION
-test_id_option=--load-list $IDFILE
-test_list_option=--list
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-2.3.0/.zuul.yaml 
new/osprofiler-2.6.0/.zuul.yaml
--- old/osprofiler-2.3.0/.zuul.yaml     2018-07-10 00:57:10.000000000 +0200
+++ new/osprofiler-2.6.0/.zuul.yaml     2019-02-18 22:52:33.000000000 +0100
@@ -1,11 +1,21 @@
 - project:
+    templates:
+      - check-requirements
+      - lib-forward-testing
+      - lib-forward-testing-python3
+      - openstack-cover-jobs
+      - openstack-lower-constraints-jobs
+      - openstack-python-jobs
+      - openstack-python36-jobs
+      - openstack-python37-jobs
+      - periodic-stable-jobs
+      - publish-openstack-docs-pti
+      - release-notes-jobs-python3
     check:
       jobs:
         - openstack-tox-functional
         - openstack-tox-functional-py35
-        - openstack-tox-lower-constraints
     gate:
       jobs:
         - openstack-tox-functional
         - openstack-tox-functional-py35
-        - openstack-tox-lower-constraints
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-2.3.0/AUTHORS new/osprofiler-2.6.0/AUTHORS
--- old/osprofiler-2.3.0/AUTHORS        2018-07-10 00:59:13.000000000 +0200
+++ new/osprofiler-2.6.0/AUTHORS        2019-02-18 22:53:41.000000000 +0100
@@ -5,11 +5,13 @@
 Andreas Jaeger <[email protected]>
 Andreas Jaeger <[email protected]>
 Andrey Kurilin <[email protected]>
+Andrey Kurilin <[email protected]>
 Atsushi SAKAI <[email protected]>
 BENJAMIN VANHAVERMAET <[email protected]>
 Boris Pavlovic <[email protected]>
 Carlos Goncalves <[email protected]>
 ChangBo Guo(gcb) <[email protected]>
+Corey Bryant <[email protected]>
 Davanum Srinivas <[email protected]>
 Dina Belova <[email protected]>
 Doug Hellmann <[email protected]>
@@ -29,12 +31,15 @@
 Moshe Levi <[email protected]>
 Munoz, Obed N <[email protected]>
 Nguyen Van Duc <[email protected]>
+Nguyen Van Trung <[email protected]>
 Oleksii Chuprykov <[email protected]>
 Omer Anson <[email protected]>
 Ondřej Nový <[email protected]>
 OpenStack Release Bot <[email protected]>
 Roman Podoliaka <[email protected]>
+Shoham Peller <[email protected]>
 Simon Pasquier <[email protected]>
+Slawek Kaplonski <[email protected]>
 Stephen Finucane <[email protected]>
 Stuart Grace <[email protected]>
 Thomas Bechtold <[email protected]>
@@ -42,14 +47,15 @@
 Tony Xu <[email protected]>
 Tovin Seven <[email protected]>
 Victor Morales <[email protected]>
+Vieri <[email protected]>
 Vipin Balachandran <[email protected]>
 Vu Cong Tuan <[email protected]>
 Zhi Yan Liu <[email protected]>
-Zuul <[email protected]>
 chenxu <[email protected]>
 gecong1973 <[email protected]>
 howardlee <[email protected]>
 kavithahr <[email protected]>
+lipan <[email protected]>
 lvdongbing <[email protected]>
 melissaml <[email protected]>
 qingszhao <[email protected]>
@@ -60,3 +66,4 @@
 sunyandi <[email protected]>
 uppi <[email protected]>
 wangxiyuan <[email protected]>
+zhouxinyong <[email protected]>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-2.3.0/ChangeLog 
new/osprofiler-2.6.0/ChangeLog
--- old/osprofiler-2.3.0/ChangeLog      2018-07-10 00:59:13.000000000 +0200
+++ new/osprofiler-2.6.0/ChangeLog      2019-02-18 22:53:41.000000000 +0100
@@ -1,6 +1,51 @@
 CHANGES
 =======
 
+2.6.0
+-----
+
+* Add sqlalchemy collector
+* Change python3.5 job to python3.7 job on Stein+
+* Use $STACK\_USER variable in install\_jaeger function
+* Add support for mongodb backend in devstack plugin
+* Reload keystone to apply osprofiler config
+* Do not insert osprofiler filter into Neutron api-paste pipeline
+* Allow test path to be overridden
+
+2.5.2
+-----
+
+* In case of an error, always add message
+* Change http to https in reference link
+* [devstack] Add support for elasticsearch backend
+* Change openstack-dev to openstack-discuss
+* Configure Jaeger collector in DevStack
+
+2.5.1
+-----
+
+* Update min tox version to 2.0
+* In DevStack install Redis client library via pip, not as system package
+* When shortening span-ids, check if they're already short
+* Don't quote {posargs} in tox.ini
+
+2.5.0
+-----
+
+* build universal wheels
+* Make tracing of SQL statements configurable in DevStack plugin
+
+2.4.1
+-----
+
+* Use templates for cover and lower-constraints
+* add password for connecting redis-sentinel
+* add lib-forward-testing-python3 test job
+* add python 3.6 unit test job
+* import zuul job settings from project-config
+* Update reno for stable/rocky
+* Switch to stestr
+
 2.3.0
 -----
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-2.3.0/PKG-INFO 
new/osprofiler-2.6.0/PKG-INFO
--- old/osprofiler-2.3.0/PKG-INFO       2018-07-10 00:59:13.000000000 +0200
+++ new/osprofiler-2.6.0/PKG-INFO       2019-02-18 22:53:41.000000000 +0100
@@ -1,10 +1,10 @@
 Metadata-Version: 2.1
 Name: osprofiler
-Version: 2.3.0
+Version: 2.6.0
 Summary: OpenStack Profiler Library
 Home-page: https://docs.openstack.org/osprofiler/latest/
 Author: OpenStack
-Author-email: [email protected]
+Author-email: [email protected]
 License: UNKNOWN
 Description: ========================
         Team and repository tags
@@ -51,5 +51,5 @@
 Classifier: Programming Language :: Python :: 2
 Classifier: Programming Language :: Python :: 2.7
 Classifier: Programming Language :: Python :: 3.5
-Provides-Extra: test
 Provides-Extra: oslo_config
+Provides-Extra: test
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-2.3.0/RELEASENOTES.rst 
new/osprofiler-2.6.0/RELEASENOTES.rst
--- old/osprofiler-2.3.0/RELEASENOTES.rst       2018-07-10 00:59:13.000000000 
+0200
+++ new/osprofiler-2.6.0/RELEASENOTES.rst       1970-01-01 01:00:00.000000000 
+0100
@@ -1,3 +0,0 @@
-==========
-osprofiler
-==========
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-2.3.0/devstack/README.rst 
new/osprofiler-2.6.0/devstack/README.rst
--- old/osprofiler-2.3.0/devstack/README.rst    2018-07-10 00:57:10.000000000 
+0200
+++ new/osprofiler-2.6.0/devstack/README.rst    2019-02-18 22:52:33.000000000 
+0100
@@ -16,6 +16,7 @@
 
   * ``<empty>`` - default messaging driver is used
   * ``redis`` - Redis is installed
+  * ``jaeger`` - Jaeger is installed
 
   The default value of ``OSPROFILER_CONNECTION_STRING`` is set automatically
   depending on ``OSPROFILER_COLLECTOR`` value.
@@ -29,6 +30,7 @@
   * ``elasticsearch://host:port`` - use Elasticsearch as trace storage
   * ``mongodb://host:port`` - use MongoDB as trace storage
   * ``loginsight://username:password@host`` - use LogInsight as trace 
collector/storage
+  * ``jaeger://host:port`` - use Jaeger as trace collector
 
 
 To configure DevStack and enable OSProfiler edit ``${DEVSTACK_DIR}/local.conf``
@@ -69,7 +71,7 @@
 **OSPROFILER_CONNECTION_STRING** - connection string to identify the driver.
 Default value is ``messaging://`` refers to messaging driver. For a full
 list of drivers please refer to
-``http://git.openstack.org/cgit/openstack/osprofiler/tree/osprofiler/drivers``.
+``https://git.openstack.org/cgit/openstack/osprofiler/tree/osprofiler/drivers``.
 Example: enable ElasticSearch driver with the server running on localhost::
 
     OSPROFILER_CONNECTION_STRING=elasticsearch://127.0.0.1:9200
@@ -80,3 +82,9 @@
 Example: enable Redis collector::
 
     OSPROFILER_COLLECTOR=redis
+
+**OSPROFILER_TRACE_SQLALCHEMY** - controls tracing of SQL statements. If 
enabled,
+all SQL statements processed by SQL Alchemy are added into traces. By default 
enabled.
+Example: disable SQL statements tracing::
+
+    OSPROFILER_TRACE_SQLALCHEMY=False
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-2.3.0/devstack/lib/osprofiler 
new/osprofiler-2.6.0/devstack/lib/osprofiler
--- old/osprofiler-2.3.0/devstack/lib/osprofiler        2018-07-10 
00:57:10.000000000 +0200
+++ new/osprofiler-2.6.0/devstack/lib/osprofiler        2019-02-18 
22:52:33.000000000 +0100
@@ -42,16 +42,59 @@
 
 function install_redis() {
     if is_fedora; then
-        install_package redis python-redis
+        install_package redis
     elif is_ubuntu; then
-        install_package redis-server python-redis
+        install_package redis-server
     elif is_suse; then
-        install_package redis python-redis
+        install_package redis
     else
         exit_distro_not_supported "redis installation"
     fi
 
     start_service redis
+
+    pip_install_gr redis
+}
+
+function install_jaeger() {
+    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"
+    else
+        exit_distro_not_supported "docker.io installation"
+    fi
+
+    pip_install jaeger-client
+}
+
+function install_elasticsearch() {
+    if is_ubuntu; then
+        install_package docker.io
+        start_service docker
+        add_user_to_group $STACK_USER docker
+        # 
https://www.elastic.co/guide/en/elasticsearch/reference/5.6/docker.html#docker-cli-run-dev-mode
+        sg docker -c 'docker run -d --name elasticsearch -p 9200:9200 -p 
9300:9300 -e "discovery.type=single-node" 
docker.elastic.co/elasticsearch/elasticsearch:5.6.14'
+    else
+        exit_distro_not_supported "docker.io installation"
+    fi
+
+    pip_install elasticsearch
+}
+
+function install_mongodb {
+    pip_install pymongo
+    if is_ubuntu; then
+        install_package mongodb-server
+        start_service mongodb
+    elif is_fedora; then
+        install_package mongodb
+        install_package mongodb-server
+        start_service mongod
+    else
+        exit_distro_not_supported "mongodb installation"
+    fi
 }
 
 function install_osprofiler_collector() {
@@ -60,6 +103,15 @@
     elif [ "$OSPROFILER_COLLECTOR" == "redis" ]; then
         install_redis
         
OSPROFILER_CONNECTION_STRING=${OSPROFILER_CONNECTION_STRING:-"redis://localhost:6379"}
+    elif [ "$OSPROFILER_COLLECTOR" == "jaeger" ]; then
+        install_jaeger
+        
OSPROFILER_CONNECTION_STRING=${OSPROFILER_CONNECTION_STRING:-"jaeger://localhost:6831"}
+    elif [ "$OSPROFILER_COLLECTOR" == "elasticsearch" ]; then
+        install_elasticsearch
+        
OSPROFILER_CONNECTION_STRING=${OSPROFILER_CONNECTION_STRING:-"elasticsearch://elastic:changeme@localhost:9200"}
+    elif [ "$OSPROFILER_COLLECTOR" == "mongodb" ]; then
+        install_mongodb
+        
OSPROFILER_CONNECTION_STRING=${OSPROFILER_CONNECTION_STRING:-"mongodb://localhost:27017"}
     else
         die $LINENO "OSProfiler collector $OSPROFILER_COLLECTOR is not 
supported"
     fi
@@ -71,18 +123,14 @@
         if [ -f $conf ]
         then
             iniset $conf profiler enabled True
-            iniset $conf profiler trace_sqlalchemy True
+            iniset $conf profiler trace_sqlalchemy $OSPROFILER_TRACE_SQLALCHEMY
             iniset $conf profiler hmac_keys $OSPROFILER_HMAC_KEYS
             iniset $conf profiler connection_string 
$OSPROFILER_CONNECTION_STRING
         fi
     done
 
-    # Insert osprofiler filter into Neutron paste configuration
-    if [ -f $Q_API_PASTE_FILE ]; then
-        VAL=$(iniget $Q_API_PASTE_FILE composite:neutronapi_v2_0 keystone)
-        VAL=${VAL/catch_errors/catch_errors osprofiler}
-        iniset $Q_API_PASTE_FILE composite:neutronapi_v2_0 keystone "$VAL"
-    fi
+    # Keystone is already running, should be reloaded to apply osprofiler 
config
+    reload_service devstack@keystone
 }
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-2.3.0/devstack/plugin.sh 
new/osprofiler-2.6.0/devstack/plugin.sh
--- old/osprofiler-2.3.0/devstack/plugin.sh     2018-07-10 00:57:10.000000000 
+0200
+++ new/osprofiler-2.6.0/devstack/plugin.sh     2019-02-18 22:52:33.000000000 
+0100
@@ -7,7 +7,7 @@
 
 source $DEST/osprofiler/devstack/lib/osprofiler
 
-if [[ "$1" == "stack" && "$2" == "pre-install" ]]; then
+if [[ "$1" == "stack" && "$2" == "install" ]]; then
     echo_summary "Configuring system services for OSProfiler"
     install_osprofiler_collector
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-2.3.0/devstack/settings 
new/osprofiler-2.6.0/devstack/settings
--- old/osprofiler-2.3.0/devstack/settings      2018-07-10 00:57:10.000000000 
+0200
+++ new/osprofiler-2.6.0/devstack/settings      2019-02-18 22:52:33.000000000 
+0100
@@ -5,4 +5,7 @@
 # requests that specify one of these keys in HTTP headers.
 OSPROFILER_HMAC_KEYS=${OSPROFILER_HMAC_KEYS:-"SECRET_KEY"}
 
+# Set whether tracing of SQL requests is enabled or not
+OSPROFILER_TRACE_SQLALCHEMY="True"
+
 enable_service osprofiler
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-2.3.0/doc/source/user/collectors.rst 
new/osprofiler-2.6.0/doc/source/user/collectors.rst
--- old/osprofiler-2.3.0/doc/source/user/collectors.rst 2018-07-10 
00:57:10.000000000 +0200
+++ new/osprofiler-2.6.0/doc/source/user/collectors.rst 2019-02-18 
22:52:33.000000000 +0100
@@ -39,3 +39,28 @@
       value. Defaults to: 0.1 seconds
     * sentinel_service_name: The name of the Sentinel service to use.
       Defaults to: "mymaster"
+
+SQLAlchemy
+----------
+
+The SQLAlchemy collector allows you to store profiling data into a database
+supported by SQLAlchemy.
+
+Usage
+=====
+To use the driver, the `connection_string` in the `[osprofiler]` config section
+needs to be set to a connection string that `SQLAlchemy understands`_
+For example::
+
+  [osprofiler]
+  connection_string = 
mysql+pymysql://username:[email protected]/profiler?charset=utf8
+
+where `username` is the database username, `password` is the database password,
+`192.168.192.81` is the database IP address and `profiler` is the database 
name.
+
+The database (in this example called `profiler`) needs to be created manually 
and
+the database user (in this example called `username`) needs to have priviliges
+to create tables and select and insert rows.
+
+
+.. _SQLAlchemy understands: 
https://docs.sqlalchemy.org/en/latest/core/engines.html#database-urls
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-2.3.0/lower-constraints.txt 
new/osprofiler-2.6.0/lower-constraints.txt
--- old/osprofiler-2.3.0/lower-constraints.txt  2018-07-10 00:57:10.000000000 
+0200
+++ new/osprofiler-2.6.0/lower-constraints.txt  2019-02-18 22:52:33.000000000 
+0100
@@ -18,6 +18,6 @@
 requests===2.14.2
 six===1.10.0
 sphinx===1.6.2
-testrepository===0.0.18
+stestr==2.0.0
 testtools===2.2.0
 WebOb===1.7.1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-2.3.0/osprofiler/_utils.py 
new/osprofiler-2.6.0/osprofiler/_utils.py
--- old/osprofiler-2.3.0/osprofiler/_utils.py   2018-07-10 00:57:10.000000000 
+0200
+++ new/osprofiler-2.6.0/osprofiler/_utils.py   2019-02-18 22:52:33.000000000 
+0100
@@ -153,8 +153,11 @@
 
 def shorten_id(span_id):
     """Convert from uuid4 to 64 bit id for OpenTracing"""
+    int64_max = (1 << 64) - 1
+    if isinstance(span_id, six.integer_types):
+        return span_id & int64_max
     try:
-        short_id = uuid.UUID(span_id).int & (1 << 64) - 1
+        short_id = uuid.UUID(span_id).int & int64_max
     except ValueError:
         # Return a new short id for this
         short_id = shorten_id(uuidutils.generate_uuid())
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-2.3.0/osprofiler/drivers/__init__.py 
new/osprofiler-2.6.0/osprofiler/drivers/__init__.py
--- old/osprofiler-2.3.0/osprofiler/drivers/__init__.py 2018-07-10 
00:57:10.000000000 +0200
+++ new/osprofiler-2.6.0/osprofiler/drivers/__init__.py 2019-02-18 
22:52:33.000000000 +0100
@@ -5,3 +5,4 @@
 from osprofiler.drivers import messaging  # noqa
 from osprofiler.drivers import mongodb  # noqa
 from osprofiler.drivers import redis_driver  # noqa
+from osprofiler.drivers import sqlalchemy_driver  # noqa
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-2.3.0/osprofiler/drivers/base.py 
new/osprofiler-2.6.0/osprofiler/drivers/base.py
--- old/osprofiler-2.3.0/osprofiler/drivers/base.py     2018-07-10 
00:57:10.000000000 +0200
+++ new/osprofiler-2.6.0/osprofiler/drivers/base.py     2019-02-18 
22:52:33.000000000 +0100
@@ -36,6 +36,12 @@
               connection_string)
 
     backend = parsed_connection.scheme
+    # NOTE(toabctl): To be able to use the connection_string for as sqlalchemy
+    # connection string, transform the backend to the correct driver
+    # See https://docs.sqlalchemy.org/en/latest/core/engines.html#database-urls
+    if backend in ["mysql", "mysql+pymysql", "mysql+mysqldb",
+                   "postgresql", "postgresql+psycopg2"]:
+        backend = "sqlalchemy"
     for driver in _utils.itersubclasses(Driver):
         if backend == driver.get_name():
             return driver(connection_string, *args, **kwargs)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-2.3.0/osprofiler/drivers/redis_driver.py 
new/osprofiler-2.6.0/osprofiler/drivers/redis_driver.py
--- old/osprofiler-2.3.0/osprofiler/drivers/redis_driver.py     2018-07-10 
00:57:10.000000000 +0200
+++ new/osprofiler-2.6.0/osprofiler/drivers/redis_driver.py     2019-02-18 
22:52:33.000000000 +0100
@@ -175,6 +175,7 @@
         socket_timeout = self.conf.profiler.socket_timeout
         parsed_url = parser.urlparse(self.connection_str)
         sentinel = Sentinel([(parsed_url.hostname, int(parsed_url.port))],
+                            password=parsed_url.password,
                             socket_timeout=socket_timeout)
         self.db = sentinel.master_for(self.conf.profiler.sentinel_service_name,
                                       socket_timeout=socket_timeout)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osprofiler-2.3.0/osprofiler/drivers/sqlalchemy_driver.py 
new/osprofiler-2.6.0/osprofiler/drivers/sqlalchemy_driver.py
--- old/osprofiler-2.3.0/osprofiler/drivers/sqlalchemy_driver.py        
1970-01-01 01:00:00.000000000 +0100
+++ new/osprofiler-2.6.0/osprofiler/drivers/sqlalchemy_driver.py        
2019-02-18 22:52:33.000000000 +0100
@@ -0,0 +1,119 @@
+# Copyright 2019 SUSE Linux GmbH
+# 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
+
+from oslo_serialization import jsonutils
+
+from osprofiler.drivers import base
+from osprofiler import exc
+
+LOG = logging.getLogger(__name__)
+
+
+class SQLAlchemyDriver(base.Driver):
+    def __init__(self, connection_str, project=None, service=None, host=None,
+                 **kwargs):
+        super(SQLAlchemyDriver, self).__init__(connection_str, project=project,
+                                               service=service, host=host)
+
+        try:
+            from sqlalchemy import create_engine
+            from sqlalchemy import Table, MetaData, Column
+            from sqlalchemy import String, JSON, Integer
+        except ImportError:
+            raise exc.CommandError(
+                "To use this command, you should install 'SQLAlchemy'")
+
+        self._engine = create_engine(connection_str)
+        self._conn = self._engine.connect()
+        self._metadata = MetaData()
+        self._data_table = Table(
+            "data", self._metadata,
+            Column("id", Integer, primary_key=True),
+            # timestamp - date/time of the trace point
+            Column("timestamp", String(26), index=True),
+            # base_id - uuid common for all notifications related to one trace
+            Column("base_id", String(255), index=True),
+            # parent_id - uuid of parent element in trace
+            Column("parent_id", String(255), index=True),
+            # trace_id - uuid of current element in trace
+            Column("trace_id", String(255), index=True),
+            Column("project", String(255), index=True),
+            Column("host", String(255), index=True),
+            Column("service", String(255), index=True),
+            # name - trace point name
+            Column("name", String(255), index=True),
+            Column("data", JSON)
+        )
+
+        # FIXME(toabctl): Not the best idea to create the table on every
+        # startup when using the sqlalchemy driver...
+        self._metadata.create_all(self._engine, checkfirst=True)
+
+    @classmethod
+    def get_name(cls):
+        return "sqlalchemy"
+
+    def notify(self, info, context=None):
+        """Write a notification the the database"""
+        data = info.copy()
+        base_id = data.pop("base_id", None)
+        timestamp = data.pop("timestamp", None)
+        parent_id = data.pop("parent_id", None)
+        trace_id = data.pop("trace_id", None)
+        project = data.pop("project", self.project)
+        host = data.pop("host", self.host)
+        service = data.pop("service", self.service)
+        name = data.pop("name", None)
+
+        ins = self._data_table.insert().values(
+            timestamp=timestamp,
+            base_id=base_id,
+            parent_id=parent_id,
+            trace_id=trace_id,
+            project=project,
+            service=service,
+            host=host,
+            name=name,
+            data=jsonutils.dumps(data)
+        )
+        try:
+            self._conn.execute(ins)
+        except Exception:
+            LOG.exception("Can not store osprofiler tracepoint {} "
+                          "(base_id {})".format(trace_id, base_id))
+
+    def get_report(self, base_id):
+        try:
+            from sqlalchemy.sql import select
+        except ImportError:
+            raise exc.CommandError(
+                "To use this command, you should install 'SQLAlchemy'")
+        stmt = select([self._data_table]).where(
+            self._data_table.c.base_id == base_id)
+        results = self._conn.execute(stmt).fetchall()
+        for n in results:
+            timestamp = n["timestamp"]
+            trace_id = n["trace_id"]
+            parent_id = n["parent_id"]
+            name = n["name"]
+            project = n["project"]
+            service = n["service"]
+            host = n["host"]
+            data = jsonutils.loads(n["data"])
+            self._append_results(trace_id, parent_id, name, project, service,
+                                 host, timestamp, data)
+        return self._parse_results()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-2.3.0/osprofiler/profiler.py 
new/osprofiler-2.6.0/osprofiler/profiler.py
--- old/osprofiler-2.3.0/osprofiler/profiler.py 2018-07-10 00:57:27.000000000 
+0200
+++ new/osprofiler-2.6.0/osprofiler/profiler.py 2019-02-18 22:52:33.000000000 
+0100
@@ -17,6 +17,7 @@
 import datetime
 import functools
 import inspect
+import six
 import socket
 import threading
 
@@ -158,7 +159,10 @@
                 start(name, info=info_)
                 result = f(*args, **kwargs)
             except Exception as ex:
-                stop_info = {"etype": reflection.get_class_name(ex)}
+                stop_info = {
+                    "etype": reflection.get_class_name(ex),
+                    "message": six.text_type(ex)
+                }
                 raise
             else:
                 if not hide_result:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-2.3.0/osprofiler/sqlalchemy.py 
new/osprofiler-2.6.0/osprofiler/sqlalchemy.py
--- old/osprofiler-2.3.0/osprofiler/sqlalchemy.py       2018-07-10 
00:57:10.000000000 +0200
+++ new/osprofiler-2.6.0/osprofiler/sqlalchemy.py       2019-02-18 
22:52:33.000000000 +0100
@@ -105,6 +105,7 @@
 
     info = {
         "etype": exception_class_name,
+        "message": original_exception,
         "db": {
             "original_exception": original_exception,
             "chained_exception": chained_exception
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osprofiler-2.3.0/osprofiler/tests/unit/test_profiler.py 
new/osprofiler-2.6.0/osprofiler/tests/unit/test_profiler.py
--- old/osprofiler-2.3.0/osprofiler/tests/unit/test_profiler.py 2018-07-10 
00:57:27.000000000 +0200
+++ new/osprofiler-2.6.0/osprofiler/tests/unit/test_profiler.py 2019-02-18 
22:52:33.000000000 +0100
@@ -69,6 +69,13 @@
         expected = "850409eb1d4b0dee"
         self.assertEqual(expected, result)
 
+    def test_profiler_get_shorten_id_int(self):
+        short_id_int = 42
+        prof = profiler._Profiler("secret", base_id="1", parent_id="2")
+        result = prof.get_shorten_id(short_id_int)
+        expected = "2a"
+        self.assertEqual(expected, result)
+
     def test_profiler_get_base_id(self):
         prof = profiler._Profiler("secret", base_id="1", parent_id="2")
         self.assertEqual(prof.get_base_id(), "1")
@@ -253,7 +260,7 @@
                 "name": "osprofiler.tests.unit.test_profiler.test_fn_exc"
             }
         }
-        expected_stop_info = {"etype": "ValueError"}
+        expected_stop_info = {"etype": "ValueError", "message": ""}
         mock_start.assert_called_once_with("foo", info=expected_info)
         mock_stop.assert_called_once_with(info=expected_stop_info)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osprofiler-2.3.0/osprofiler/tests/unit/test_sqlalchemy.py 
new/osprofiler-2.6.0/osprofiler/tests/unit/test_sqlalchemy.py
--- old/osprofiler-2.3.0/osprofiler/tests/unit/test_sqlalchemy.py       
2018-07-10 00:57:10.000000000 +0200
+++ new/osprofiler-2.6.0/osprofiler/tests/unit/test_sqlalchemy.py       
2019-02-18 22:52:33.000000000 +0100
@@ -62,6 +62,7 @@
         sqlalchemy.handle_error(sqlalchemy_exception_ctx)
         expected_info = {
             "etype": "Exception",
+            "message": "error",
             "db": {
                 "original_exception": str(original_exception),
                 "chained_exception": str(chained_exception),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-2.3.0/osprofiler.egg-info/PKG-INFO 
new/osprofiler-2.6.0/osprofiler.egg-info/PKG-INFO
--- old/osprofiler-2.3.0/osprofiler.egg-info/PKG-INFO   2018-07-10 
00:59:13.000000000 +0200
+++ new/osprofiler-2.6.0/osprofiler.egg-info/PKG-INFO   2019-02-18 
22:53:41.000000000 +0100
@@ -1,10 +1,10 @@
 Metadata-Version: 2.1
 Name: osprofiler
-Version: 2.3.0
+Version: 2.6.0
 Summary: OpenStack Profiler Library
 Home-page: https://docs.openstack.org/osprofiler/latest/
 Author: OpenStack
-Author-email: [email protected]
+Author-email: [email protected]
 License: UNKNOWN
 Description: ========================
         Team and repository tags
@@ -51,5 +51,5 @@
 Classifier: Programming Language :: Python :: 2
 Classifier: Programming Language :: Python :: 2.7
 Classifier: Programming Language :: Python :: 3.5
-Provides-Extra: test
 Provides-Extra: oslo_config
+Provides-Extra: test
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-2.3.0/osprofiler.egg-info/SOURCES.txt 
new/osprofiler-2.6.0/osprofiler.egg-info/SOURCES.txt
--- old/osprofiler-2.3.0/osprofiler.egg-info/SOURCES.txt        2018-07-10 
00:59:13.000000000 +0200
+++ new/osprofiler-2.6.0/osprofiler.egg-info/SOURCES.txt        2019-02-18 
22:53:41.000000000 +0100
@@ -1,4 +1,4 @@
-.testr.conf
+.stestr.conf
 .zuul.yaml
 AUTHORS
 CONTRIBUTING.rst
@@ -64,6 +64,7 @@
 osprofiler/drivers/messaging.py
 osprofiler/drivers/mongodb.py
 osprofiler/drivers/redis_driver.py
+osprofiler/drivers/sqlalchemy_driver.py
 osprofiler/hacking/__init__.py
 osprofiler/hacking/checks.py
 osprofiler/tests/__init__.py
@@ -97,6 +98,7 @@
 releasenotes/source/ocata.rst
 releasenotes/source/pike.rst
 releasenotes/source/queens.rst
+releasenotes/source/rocky.rst
 releasenotes/source/unreleased.rst
 releasenotes/source/_static/.placeholder
 releasenotes/source/_templates/.placeholder
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-2.3.0/osprofiler.egg-info/pbr.json 
new/osprofiler-2.6.0/osprofiler.egg-info/pbr.json
--- old/osprofiler-2.3.0/osprofiler.egg-info/pbr.json   2018-07-10 
00:59:13.000000000 +0200
+++ new/osprofiler-2.6.0/osprofiler.egg-info/pbr.json   2019-02-18 
22:53:41.000000000 +0100
@@ -1 +1 @@
-{"git_version": "6d68170", "is_release": true}
\ No newline at end of file
+{"git_version": "da7a859", "is_release": true}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-2.3.0/osprofiler.egg-info/requires.txt 
new/osprofiler-2.6.0/osprofiler.egg-info/requires.txt
--- old/osprofiler-2.3.0/osprofiler.egg-info/requires.txt       2018-07-10 
00:59:13.000000000 +0200
+++ new/osprofiler-2.6.0/osprofiler.egg-info/requires.txt       2019-02-18 
22:53:41.000000000 +0100
@@ -15,7 +15,7 @@
 coverage>=4.0
 ddt>=1.0.1
 mock>=2.0.0
-testrepository>=0.0.18
+stestr>=2.0.0
 testtools>=2.2.0
 openstackdocstheme>=1.18.1
 sphinx>=1.6.2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-2.3.0/releasenotes/notes/reno.cache 
new/osprofiler-2.6.0/releasenotes/notes/reno.cache
--- old/osprofiler-2.3.0/releasenotes/notes/reno.cache  2018-07-10 
00:59:13.000000000 +0200
+++ new/osprofiler-2.6.0/releasenotes/notes/reno.cache  1970-01-01 
01:00:00.000000000 +0100
@@ -1,3 +0,0 @@
----
-file-contents: {}
-notes: []
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-2.3.0/releasenotes/source/index.rst 
new/osprofiler-2.6.0/releasenotes/source/index.rst
--- old/osprofiler-2.3.0/releasenotes/source/index.rst  2018-07-10 
00:57:10.000000000 +0200
+++ new/osprofiler-2.6.0/releasenotes/source/index.rst  2019-02-18 
22:52:33.000000000 +0100
@@ -6,6 +6,7 @@
     :maxdepth: 1
 
     unreleased
+    rocky
     queens
     pike
     ocata
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-2.3.0/releasenotes/source/rocky.rst 
new/osprofiler-2.6.0/releasenotes/source/rocky.rst
--- old/osprofiler-2.3.0/releasenotes/source/rocky.rst  1970-01-01 
01:00:00.000000000 +0100
+++ new/osprofiler-2.6.0/releasenotes/source/rocky.rst  2019-02-18 
22:52:33.000000000 +0100
@@ -0,0 +1,6 @@
+===================================
+ Rocky Series Release Notes
+===================================
+
+.. release-notes::
+   :branch: stable/rocky
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-2.3.0/setup.cfg 
new/osprofiler-2.6.0/setup.cfg
--- old/osprofiler-2.3.0/setup.cfg      2018-07-10 00:59:13.000000000 +0200
+++ new/osprofiler-2.6.0/setup.cfg      2019-02-18 22:53:41.000000000 +0100
@@ -4,7 +4,7 @@
 description-file = 
        README.rst
 author = OpenStack
-author-email = [email protected]
+author-email = [email protected]
 home-page = https://docs.openstack.org/osprofiler/latest/
 classifier = 
        Environment :: OpenStack
@@ -43,6 +43,9 @@
 paste.filter_factory = 
        osprofiler = osprofiler.web:WsgiMiddleware.factory
 
+[wheel]
+universal = 1
+
 [egg_info]
 tag_build = 
 tag_date = 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-2.3.0/test-requirements.txt 
new/osprofiler-2.6.0/test-requirements.txt
--- old/osprofiler-2.3.0/test-requirements.txt  2018-07-10 00:57:10.000000000 
+0200
+++ new/osprofiler-2.6.0/test-requirements.txt  2019-02-18 22:52:33.000000000 
+0100
@@ -3,7 +3,7 @@
 coverage>=4.0 # Apache-2.0
 ddt>=1.0.1  # MIT
 mock>=2.0.0 # BSD
-testrepository>=0.0.18 # Apache-2.0/BSD
+stestr>=2.0.0 # Apache-2.0
 testtools>=2.2.0 # MIT
 
 openstackdocstheme>=1.18.1 # Apache-2.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osprofiler-2.3.0/tox.ini new/osprofiler-2.6.0/tox.ini
--- old/osprofiler-2.3.0/tox.ini        2018-07-10 00:57:10.000000000 +0200
+++ new/osprofiler-2.6.0/tox.ini        2019-02-18 22:52:33.000000000 +0100
@@ -1,5 +1,5 @@
 [tox]
-minversion = 1.6
+minversion = 2.0
 skipsdist = True
 envlist = py35,py27,pep8
 
@@ -14,12 +14,9 @@
   -r{toxinidir}/test-requirements.txt
 install_command = pip install -U {opts} {packages}
 usedevelop = True
-commands = python setup.py testr --slowest --testr-args='{posargs}'
+commands = stestr run --slowest {posargs}
 distribute = false
 
-[testenv:py27]
-basepython = python2.7
-
 [testenv:functional]
 basepython = python2.7
 setenv = {[testenv]setenv}
@@ -47,7 +44,13 @@
 
 [testenv:cover]
 basepython = python3
-commands = python setup.py testr --coverage --testr-args='{posargs}'
+setenv =
+    PYTHON=coverage run --source osprofiler --parallel-mode
+commands =
+    stestr run {posargs}
+    coverage combine
+    coverage html -d cover
+    coverage xml -o cover/coverage.xml
 
 [testenv:docs]
 basepython = python3


Reply via email to