Note: This bug is displayed in read-only format because the product is no longer active in Red Hat Bugzilla.

Bug 1110086

Summary: [RFE][ceilometer]: Osprofiler notification plugin
Product: Red Hat OpenStack Reporter: RHOS Integration <rhos-integ>
Component: RFEsAssignee: RHOS Maint <rhos-maint>
Status: CLOSED UPSTREAM QA Contact:
Severity: unspecified Docs Contact:
Priority: unspecified    
Version: unspecifiedCC: markmc, yeylon
Target Milestone: ---Keywords: FutureFeature
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
URL: https://blueprints.launchpad.net/ceilometer/+spec/osprofiler-notification-plugin
Whiteboard: upstream_milestone_none upstream_definition_new upstream_status_unknown
Fixed In Version: Doc Type: Enhancement
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2015-03-19 17:08:42 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On: 1136957    
Bug Blocks:    

Description RHOS Integration 2014-06-17 04:03:17 UTC
Cloned from launchpad blueprint https://blueprints.launchpad.net/ceilometer/+spec/osprofiler-notification-plugin.

Description:


OSprofiler - is cross service/project profiler based on ceilometer notifier API.


OSprofiler has 2 major methods: 

profiler.start() and profiler.stop() . Both of these methods will send 1 notification per call. In this notification in payload we have useful information + 3 uuids (that are used to build tree of calls). 


Actually osprofiler works like a stack. (start push new id at then end, stop pop from end)

For example:

profiler.init(base_id=1, parent_id=1) # stack = [1, 1]

profiler.start() # stack = [1, 1, rand1], send notification with (base_id=1, parent_id=1, trace_id=rand1)

profiler.start() # stack = [1, 1, rand1, rand2], send notification with (base_id=1, parent_id=rand1, trace_id=rand2)
profiler.stop() # stack = [1, 1, rand1], send notification with (base_id=1, parent_id=rand1, trace_id=rand2)

profiler.start() # stack = [1, 1, rand1, rand3], send notification with (base_id=1, parent_id=rand1, trace_id=rand3)
profiler.stop()# stack = [1, 1, rand1], send notification with (base_id=1, parent_id=rand1, trace_id=rand3)

profiler.stop() # stack = [1, 1], send notification with (base_id=1, parent_id=1, trace_id=1)


As a result we are getting 6 notifications for 3 events, and we are able to restore tree of calls. 



This plugin will be used to collect notification that are send by osprofiler library:  https://github.com/stackforge/osprofiler

This is the oslo.messaging notification plugin (actually it will send notification to ceilometer using notifier API)

https://github.com/boris-42/oslo.messaging/commit/ee762e584913f9f96672951ff0d7ec1b7e1b509d

This is the sample of integration in nova:
nova: https://github.com/boris-42/nova/commit/9ebe86bf5b4cc7150251396cfb302dd05e89085d
and
python-novaclinet https://github.com/boris-42/python-novaclient/commit/e9d092efd42facb3fc909481ed354f59f661dbf8


The collected result will be notification like these (they are bit out of date and with some mistake):
https://gist.github.com/boris-42/9a8f905d3c5bc7496984

Osprofiler lib can transform them to the tree: https://gist.github.com/boris-42/c3c3ee1c2c7db40de236


And Rally script can display them into graphic like this:
http://pavlovic.me/rally/profiler/
 

Specification URL (additional information):

None