Test Failed
Pull Request — master (#4197)
by W
03:53
created

CheckProcs.process()   C

Complexity

Conditions 9

Size

Total Lines 23

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 9
dl 0
loc 23
rs 6.6666
c 0
b 0
f 0
1
#!/usr/bin/env python
2
3
import os
4
import sys
5
import re
6
import json
7
8
9
class CheckProcs(object):
10
    myPid = 0
11
    state = ""
12
    name = ""
13
    pid = 0
14
    allProcs = []
15
    interestingProcs = []
16
    procDir = "/proc"
17
    debug = False
18
19
    def __init__(self):
20
        self.myPid = os.getpid()
21
22
    def setup(self, debug=False, pidlist=False):
23
        self.debug = debug
24
        self.pidlist = pidlist
25
26
        if debug is True:
27
            print("Debug is on")
28
29
        self.allProcs = [procs for procs in os.listdir(self.procDir) if procs.isdigit() and
30
                         int(procs) != int(self.myPid)]
31
32
    def process(self, criteria):
33
        for p in self.allProcs:
34
            try:
35
                fh = open(self.procDir + "/" + p + "/stat")
36
                pInfo = fh.readline().split()
37
                cmdfh = open(self.procDir + "/" + p + "/cmdline")
38
                cmd = cmdfh.readline()
39
                pInfo[1] = cmd
40
            except:
41
                continue
42
            finally:
43
                cmdfh.close()
44
                fh.close()
45
46
            if criteria == 'state':
47
                if pInfo[2] == self.state:
48
                    self.interestingProcs.append(pInfo)
49
            elif criteria == 'name':
50
                if re.search(self.name, pInfo[1]):
51
                    self.interestingProcs.append(pInfo)
52
            elif criteria == 'pid':
53
                if pInfo[0] == self.pid:
54
                    self.interestingProcs.append(pInfo)
55
56
    def byState(self, state):
57
        self.state = state
58
        self.process(criteria='state')
59
        self.show()
60
61
    def byPid(self, pid):
62
        self.pid = pid
63
        self.process(criteria='pid')
64
        self.show()
65
66
    def byName(self, name):
67
        self.name = name
68
        self.process(criteria='name')
69
        self.show()
70
71
    def run(self, foo, criteria):
72
        if foo == 'state':
73
            self.byState(criteria)
74
        elif foo == 'name':
75
            self.byName(criteria)
76
        elif foo == 'pid':
77
            self.byPid(criteria)
78
79
    def show(self):
80
        prettyOut = {}
81
        if len(self.interestingProcs) > 0:
82
            for proc in self.interestingProcs:
83
                #  prettyOut += "%s %s - time:%s\n" % (proc[0],proc[1],proc[13])
84
                prettyOut[proc[0]] = proc[1]
85
86
        if self.pidlist is True:
87
            pidlist = ' '.join(prettyOut.keys())
88
            sys.stderr.write(pidlist)
89
90
        print(json.dumps(prettyOut))
91
92
93
if __name__ == '__main__':
94
    if "pidlist" in sys.argv:
95
        pidlist = True
96
    else:
97
        pidlist = False
98
99
    foo = CheckProcs()
100
    foo.setup(debug=False, pidlist=pidlist)
101
    foo.run(sys.argv[1], sys.argv[2])
102