Ved-vampir | f2e1383 | 2015-03-17 13:24:18 +0300 | [diff] [blame] | 1 | import os |
Ved-vampir | f2e1383 | 2015-03-17 13:24:18 +0300 | [diff] [blame] | 2 | |
| 3 | from discover import provides |
| 4 | from utils import SensorInfo, get_pid_name, get_pid_list |
| 5 | |
| 6 | |
| 7 | |
| 8 | @provides("perprocess-cpu") |
| 9 | def pscpu_stat(disallowed_prefixes=None, allowed_prefixes=None): |
| 10 | results = {} |
Ved-vampir | f2e1383 | 2015-03-17 13:24:18 +0300 | [diff] [blame] | 11 | pid_list = get_pid_list(disallowed_prefixes, allowed_prefixes) |
| 12 | |
| 13 | for pid in pid_list: |
| 14 | try: |
Ved-vampir | f2e1383 | 2015-03-17 13:24:18 +0300 | [diff] [blame] | 15 | dev_name = get_pid_name(pid) |
| 16 | |
| 17 | pid_stat1 = pid_stat(pid) |
Ved-vampir | f2e1383 | 2015-03-17 13:24:18 +0300 | [diff] [blame] | 18 | |
| 19 | sensor_name = "{0}.{1}".format(dev_name, pid) |
Ved-vampir | bb783a1 | 2015-03-18 11:21:48 +0300 | [diff] [blame] | 20 | results[sensor_name] = SensorInfo(pid_stat1, True) |
Ved-vampir | f2e1383 | 2015-03-17 13:24:18 +0300 | [diff] [blame] | 21 | except IOError: |
Ved-vampir | bb783a1 | 2015-03-18 11:21:48 +0300 | [diff] [blame] | 22 | # may be, proc has already terminated, skip it |
Ved-vampir | f2e1383 | 2015-03-17 13:24:18 +0300 | [diff] [blame] | 23 | continue |
| 24 | return results |
| 25 | |
| 26 | |
| 27 | def pid_stat(pid): |
| 28 | """ Return total cpu usage time from process""" |
| 29 | # read /proc/pid/stat |
| 30 | with open(os.path.join('/proc/', pid, 'stat'), 'r') as pidfile: |
| 31 | proctimes = pidfile.readline().split() |
Ved-vampir | 0fc1367 | 2015-03-18 11:13:17 +0300 | [diff] [blame] | 32 | # get utime from /proc/<pid>/stat, 14 item |
| 33 | utime = proctimes[13] |
| 34 | # get stime from proc/<pid>/stat, 15 item |
| 35 | stime = proctimes[14] |
| 36 | # count total process used time |
| 37 | proctotal = int(utime) + int(stime) |
| 38 | return float(proctotal) |