diff --git a/branches/ucs-3.2/ucs-3.2-6/management/univention-management-console-module-top/umc/python/top/__init__.py b/branches/ucs-3.2/ucs-3.2-6/management/univention-management-console-module-top/umc/python/top/__init__.py index 9868510..0567cd0 100644 --- a/branches/ucs-3.2/ucs-3.2-6/management/univention-management-console-module-top/umc/python/top/__init__.py +++ b/branches/ucs-3.2/ucs-3.2-6/management/univention-management-console-module-top/umc/python/top/__init__.py @@ -34,7 +34,6 @@ import time import psutil -import univention.info_tools as uit import univention.management.console as umc import univention.management.console.modules as umcm from univention.management.console.log import MODULE @@ -45,18 +44,21 @@ from univention.management.console.modules.sanitizers import PatternSanitizer _ = umc.Translation('univention-management-console-module-top').translate + def kill(process): if hasattr(process, 'terminate'): process.kill() return process.kill(15) + def terminate(process): if hasattr(process, 'terminate'): process.terminate() return process.kill(9) + class Instance(umcm.Base): @sanitize(pattern=PatternSanitizer(default='.*')) def query(self, request): @@ -64,21 +66,20 @@ class Instance(umcm.Base): pattern = request.options.get('pattern') processes = [] for process in psutil.process_iter(): - listEntry = {} - # Temporary variables; used to calculate cpu percentage - listEntry['timestamp'] = [] - listEntry['cpu_time'] = [] - listEntry['timestamp'].append(time.time()) - (user_time, system_time, ) = process.get_cpu_times() - listEntry['cpu_time'].append(user_time + system_time) + try: + (user_time, system_time, ) = process.get_cpu_times() + listEntry = { + 'timestamp': time.time(), + 'cpu_time': user_time + system_time, + 'user': process.username, + 'pid': process.pid, + 'cpu': 0.0, + 'mem': process.get_memory_percent(), + 'command': ' '.join(process.cmdline) or process.name, + } + except psutil.NoSuchProcess: + continue - listEntry['user'] = process.username - listEntry['pid'] = process.pid - listEntry['cpu'] = 0.0 - listEntry['mem'] = process.get_memory_percent() - listEntry['command'] = ' '.join(process.cmdline) - if listEntry['command'] == '': - listEntry['command'] = process.name if category == 'all': for value in listEntry.itervalues(): if pattern.match(str(value)): @@ -93,20 +94,17 @@ class Instance(umcm.Base): for process_entry in processes: try: process = psutil.Process(process_entry['pid']) + (user_time, system_time, ) = process.get_cpu_times() except psutil.NoSuchProcess: pass else: - process_entry['timestamp'].append(time.time()) - (user_time, system_time, ) = process.get_cpu_times() - process_entry['cpu_time'].append(user_time + system_time) - - elapsed_time = process_entry['timestamp'][1] - process_entry['timestamp'][0] - elapsed_cpu_time = process_entry['cpu_time'][1] - process_entry['cpu_time'][0] + elapsed_time = time.time() - process_entry['timestamp'] + elapsed_cpu_time = user_time + system_time - process_entry['cpu_time'] cpu_percent = (elapsed_cpu_time / elapsed_time) * 100 process_entry['cpu'] = cpu_percent - # Cleanup request result - del process_entry['timestamp'] - del process_entry['cpu_time'] + # Cleanup request result + del process_entry['timestamp'] + del process_entry['cpu_time'] request.status = SUCCESS self.finished(request.id, processes)