Last active
December 14, 2015 06:50
-
-
Save davidjmerritt/106e43749ebeb88a6530 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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