Skip to content

Instantly share code, notes, and snippets.

@davidjmerritt
Last active December 14, 2015 06:50
Show Gist options
  • Save davidjmerritt/106e43749ebeb88a6530 to your computer and use it in GitHub Desktop.
Save davidjmerritt/106e43749ebeb88a6530 to your computer and use it in GitHub Desktop.
import psutil, os, json
def get_folders(path):
if os.access(path, os.X_OK) == True:
files_and_folders = os.listdir(path)
folders = []
for f in files_and_folders:
if f[0] not in ['.','~']:
full_path = path+'/'+f
if os.path.isdir(full_path) == True:
folders.append(full_path)
results = folders
else:
results = []
return results
class Activity(object):
def __init__(self):
self.all = {
'hardware' : self.hardware(),
'processes' : self.processes()
}
def hardware(self,interval_in_seconds=1,mount_point='/Volumes'):
disk_usage = []
for mount in get_folders('/Volumes'):
disk_usage.append({
'mount_point': mount,
'disk_percent': int(psutil.disk_usage(mount).percent),
'disk_total_in_bytes': int(psutil.disk_usage(mount).total),
})
results = {
'disk_usage': disk_usage,
'cpu_percent': psutil.cpu_percent(interval=interval_in_seconds, percpu=True),
'memory_virtual_percent': int(psutil.virtual_memory().percent),
'memory_virtual_total_in_bytes': int(psutil.virtual_memory().total),
'memory_swap_percent': int(psutil.swap_memory().percent),
'memory_swap_total_in_bytes': int(psutil.swap_memory().total)
}
results['memory_total_percent'] = int(sum([results['memory_virtual_percent'],results['memory_swap_percent']])/2)
results['memory_total_in_bytes'] = int(sum([results['memory_virtual_total_in_bytes'],results['memory_swap_total_in_bytes']])/2)
results['cpu_count'] = len(results['cpu_percent'])
results['cpu_percent_total'] = int(sum(results['cpu_percent'])/results['cpu_count'])
return results
def processes(self,relevant_process_names=["Python","ffmpeg","mediainfo","ffprobe"]):
pids = psutil.pids()
relevant_processes = []
for pid in pids:
process_data = self.process_by_pid(pid)
if process_data != False:
if os.path.basename(__file__) not in process_data['command']:
if process_data['name'].lower() in [item.lower() for item in relevant_process_names]:
relevant_processes.append(process_data)
results = {
'number_of_processes': len(pids),
'number_of_relevant_processes': len(relevant_processes),
'relevant_processes': relevant_processes
}
return results
def process_by_pid(self,pid):
p = psutil.Process(pid)
try:
results = {
'pid': pid,
'name': p.name(),
'command': p.cmdline(),
'threads': p.num_threads(),
'cpu_percent':p.cpu_percent()
}
except:
results = False
return results
def process_by_key(self,key):
processes = self.processes()
results = []
for process in processes['relevant_processes']:
if key.lower() in ' '.join(process['command']).lower():
results.append(process)
if len(results) == 0:
results = False
return results
if __name__ == "__main__":
activity = Activity()
print json.dumps(activity.all, sort_keys=True,indent=4, separators=(',', ': '))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment