Fix GMR break with new psutil versions

psutil 2.x and above has a lot of API changes as described in:
https://github.com/giampaolo/psutil/blob/master/HISTORY.rst

So we should work correctly with both old and new psutil versions
by using a version check and use the correct method/attributes.

Note that we cannot remove the g-r cap until all the projects have
switched to oslo.reports (OR we fix oslo-incubator GMR code and have
sync'ed all the consuming projects). So this review is the first
step in a long process of switching all consumers of GMR to use
what we have in oslo.reports.


Depends-On: I0f07858e96ea3baf46f8a453e253b9ed29c7f7e2
Depends-On: I33bd2d9dff9cb7dc1a50177db7286b7317966784

Closes-Bug: #1430231
Change-Id: I52bc6898d098f599c12204fc6d6eb269e2c884cb
This commit is contained in:
Davanum Srinivas 2015-07-05 19:54:56 -04:00 committed by Davanum Srinivas (dims)
parent c5c53c593b
commit f62039a851

View File

@ -18,9 +18,13 @@ This module defines a class representing a process,
potentially with subprocesses. potentially with subprocesses.
""" """
import psutil
import oslo_reports.models.with_default_views as mwdv import oslo_reports.models.with_default_views as mwdv
import oslo_reports.views.text.process as text_views import oslo_reports.views.text.process as text_views
PS1 = psutil.version_info[0] == 1
class ProcessModel(mwdv.ModelWithDefaultViews): class ProcessModel(mwdv.ModelWithDefaultViews):
"""A Process Model """A Process Model
@ -36,27 +40,34 @@ class ProcessModel(mwdv.ModelWithDefaultViews):
text_view=text_views.ProcessView()) text_view=text_views.ProcessView())
self['pid'] = process.pid self['pid'] = process.pid
self['parent_pid'] = process.ppid self['parent_pid'] = (process.ppid if PS1 else process.ppid())
if hasattr(process, 'uids'): if hasattr(process, 'uids'):
self['uids'] = {'real': process.uids.real, self['uids'] = {
'effective': process.uids.effective, 'real': (process.uids.real if PS1 else process.uids().real),
'saved': process.uids.saved} 'effective': (process.uids.effective if PS1
else process.uids().effective),
'saved': (process.uids.saved if PS1 else process.uids().saved)
}
else: else:
self['uids'] = {'real': None, self['uids'] = {'real': None,
'effective': None, 'effective': None,
'saved': None} 'saved': None}
if hasattr(process, 'gids'): if hasattr(process, 'gids'):
self['gids'] = {'real': process.gids.real, self['gids'] = {
'effective': process.gids.effective, 'real': (process.gids.real if PS1 else process.gids().real),
'saved': process.gids.saved} 'effective': (process.gids.effective if PS1
else process.gids().effective),
'saved': (process.gids.saved if PS1 else process.gids().saved)
}
else: else:
self['gids'] = {'real': None, self['gids'] = {'real': None,
'effective': None, 'effective': None,
'saved': None} 'saved': None}
self['username'] = process.username self['username'] = process.username if PS1 else process.username()
self['command'] = process.cmdline self['command'] = process.cmdline if PS1 else process.cmdline()
self['state'] = process.status self['state'] = process.status if PS1 else process.status()
self['children'] = [ProcessModel(pr) for pr in process.get_children()] children = process.get_children() if PS1 else process.children()
self['children'] = [ProcessModel(pr) for pr in children]