initial commit
This commit is contained in:
128
procMon.py
Normal file
128
procMon.py
Normal file
@@ -0,0 +1,128 @@
|
||||
import promMon as pm
|
||||
import os
|
||||
import subprocess
|
||||
from time import sleep
|
||||
|
||||
result = subprocess.run(['getconf', 'CLK_TCK'], stdout=subprocess.PIPE)
|
||||
result = result.stdout.decode('utf-8')
|
||||
|
||||
tikspersec = int(result)
|
||||
|
||||
def getPIDs():
|
||||
pids = []
|
||||
for i in os.listdir("/proc"):
|
||||
if i.isdigit():
|
||||
pids.append(i)
|
||||
|
||||
return pids
|
||||
|
||||
def parseStatus(pid):
|
||||
with open("/proc/"+str(pid)+"/status", "r") as f:
|
||||
status = f.read().replace("\t","").split("\n")
|
||||
status.pop(-1)
|
||||
status_dict = {}
|
||||
for item in status:
|
||||
i = item.split(":")
|
||||
try:
|
||||
k = i[1].split(" ")
|
||||
data = []
|
||||
for j in k:
|
||||
if j != "":
|
||||
data.append(j)
|
||||
status_dict[i[0]] = data[0]+" "+data[1]
|
||||
except Exception as e:
|
||||
pass
|
||||
|
||||
return status_dict
|
||||
|
||||
def parseMeminfo():
|
||||
with open("/proc/meminfo", "r") as f:
|
||||
meminfo = f.read().split("\n")
|
||||
meminfo_dict = {}
|
||||
for i in meminfo:
|
||||
i = i.split(" ")
|
||||
vals = []
|
||||
for j in i:
|
||||
if j != "":
|
||||
vals.append(j.replace(":",""))
|
||||
try:
|
||||
meminfo_dict[vals[0]] = int(vals[1]) * byteMult(vals[2])
|
||||
except:
|
||||
pass
|
||||
return meminfo_dict
|
||||
|
||||
def byteMult(value):
|
||||
if value == "B":
|
||||
return 1
|
||||
elif value == "kB":
|
||||
return 1000
|
||||
elif value == "MB":
|
||||
return 1000000
|
||||
elif value == "GB":
|
||||
return 1000000000
|
||||
elif value == "TB":
|
||||
return 1000000000000
|
||||
|
||||
def exportProcesses(last_proc_stat=0):
|
||||
pids = getPIDs()
|
||||
processes = {}
|
||||
|
||||
with open("/proc/uptime", "r") as f:
|
||||
uptime = float(f.read().split(" ")[0])
|
||||
|
||||
for pid in pids:
|
||||
try:
|
||||
with open("/proc/"+pid+"/stat", "r") as f:
|
||||
stat = f.read().replace("(", "").split(") ")
|
||||
stat[1] = stat[1].replace('\n', "")
|
||||
s0 = stat[0].split(" ", 1)
|
||||
s1 = stat[1].split(" ")
|
||||
stat = s0 + s1
|
||||
|
||||
processes[pid] = {}
|
||||
processes[pid]["id"] = stat[0]
|
||||
processes[pid]["comm"] = stat[1]
|
||||
processes[pid]["virt"] = stat[22]
|
||||
processes[pid]["cpu_tiks_user"] = int(stat[13])
|
||||
processes[pid]["cpu_tiks_system"] = int(stat[14])
|
||||
processes[pid]["cpu_secs"] = (int(stat[13]) + int(stat[14])) / tikspersec
|
||||
processes[pid]["page_fault_major"] = stat[11]
|
||||
processes[pid]["page_fault_minor"] = stat[9]
|
||||
processes[pid]["starttime"] = int(stat[21]) / tikspersec
|
||||
processes[pid]["threadcnt"] = stat[19]
|
||||
processes[pid]["state"] = stat[2]
|
||||
processes[pid]["parent_pid"] = stat[3]
|
||||
processes[pid]["runtime_seconds"] = uptime - processes[pid]["starttime"]
|
||||
processes[pid]["cpu_total"] = 100 * processes[pid]["cpu_secs"] / processes[pid]["runtime_seconds"]
|
||||
processes[pid]["cpu"] = 0
|
||||
|
||||
if last_proc_stat != 0:
|
||||
try:
|
||||
cpu_secs = processes[pid]["cpu_secs"] - last_proc_stat[pid]["cpu_secs"]
|
||||
sampletime = processes[pid]["runtime_seconds"] - last_proc_stat[pid]["runtime_seconds"]
|
||||
processes[pid]["cpu"] = 100 * cpu_secs / sampletime
|
||||
except:
|
||||
pass
|
||||
|
||||
status = parseStatus(pid)
|
||||
meminfo = parseMeminfo()
|
||||
memory = status["VmData"].split(" ")
|
||||
if memory[0] == "":
|
||||
memory.pop(0)
|
||||
processes[pid]["memory"] = int(memory[0]) * byteMult(memory[1])
|
||||
processes[pid]["memory_percent"] = 100 * (int(memory[0]) * byteMult(memory[1])) / meminfo["MemTotal"]
|
||||
except Exception as e:
|
||||
# print(e)
|
||||
pass
|
||||
|
||||
return processes
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
proc = exportProcesses()
|
||||
for i in range(0,10):
|
||||
proc = exportProcesses(proc)
|
||||
for pid in proc:
|
||||
print(proc[pid])
|
||||
sleep(2)
|
||||
|
||||
Reference in New Issue
Block a user