Skip to content
This repository was archived by the owner on Apr 19, 2021. It is now read-only.

Commit 25e9d8f

Browse files
committed
added exclude process_builder
1 parent a8d15c3 commit 25e9d8f

6 files changed

Lines changed: 340 additions & 78 deletions

File tree

json_tool.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,17 @@ def __init__(self, filename="log.json"):
1212

1313
def open_file(self):
1414
self.file = open(self.filename, "r")
15-
self.fileContent = self.file.read()
1615

1716
def create_file(self):
1817
self.file = open(self.filename, "w")
1918

2019
def get_file_content(self):
20+
self.fileContent = self.file.read()
2121
return self.fileContent
2222

23+
def get_json(self):
24+
return json.loads(self.get_file_content())
25+
2326
def write_process_list_to_file(self, process_object_list):
2427
self.create_file()
2528
if self.file is not None:
@@ -28,6 +31,10 @@ def write_process_list_to_file(self, process_object_list):
2831
self.process_list.append(process.to_json())
2932
json.dump(self.process_list, self.file, indent=2)
3033

34+
def write_settings_to_file(self, settings):
35+
self.create_file()
36+
json.dump(settings.to_json(), self.file, indent=2)
37+
3138
def get_existing_process_list(self):
3239
if self.fileContent is not None:
3340
process_object_list = []

main.py

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
#!/usr/bin/python3
2+
from setting import Setting
3+
from process_tracker import ProcessTracker
4+
from settings_builder import SettingsBuilder
5+
import threading
6+
import sys
7+
import getopt
8+
import time
9+
10+
11+
def show_help():
12+
print("\n")
13+
print("--------USAGE--------")
14+
print("-h --help : prints this help page")
15+
print("-l <arg> --load <arg> : load settings file from <arg>")
16+
print("-o <arg> --output <arg> : specify output filename")
17+
print("-i 'arg1 arg2 arg3' ... --include 'arg1 arg2 arg3' ... : set processes that should be tracked")
18+
print("-e 'arg1 arg2 arg3' ... --exclude 'arg1 arg2 arg3' ... : set processes that shouldn't be tracked")
19+
print("---------------------")
20+
print("\n")
21+
sys.exit(0)
22+
23+
24+
def main():
25+
settings = Setting()
26+
try:
27+
opts, args = getopt.getopt(sys.argv[1:], "hl:o:i:e:b:",
28+
["help", "load=", "output=", "included=", "excluded=", "build="])
29+
except getopt.GetoptError as err:
30+
# print help information and exit:
31+
print(err) # will print something like "option -a not recognized"
32+
sys.exit(2)
33+
34+
for o, a in opts:
35+
if o in ("-h", "--help"):
36+
show_help()
37+
elif o in ("-l", "--load"):
38+
try:
39+
settings.load_from_file("settings/" + a)
40+
print(a)
41+
except:
42+
print("settings file not found")
43+
exit(1)
44+
elif o in ("-o", "--output"):
45+
settings.set_log_filename(a)
46+
elif o in ("-i", "--included"):
47+
processes_to_track = a.split(' ')
48+
settings.set_processes_to_track(processes_to_track)
49+
elif o in ("-e", "--excluded"):
50+
excluded_processes = a.split(' ')
51+
settings.set_excluded_processes(excluded_processes)
52+
elif o in ("-b", "--build"):
53+
settings_builder = SettingsBuilder()
54+
settings_builder.build_exclude_settings()
55+
settings_builder.save_settings("settings/" + a)
56+
print("settings saved in " + a)
57+
sys.exit(0)
58+
59+
else:
60+
assert False, "unhandled option"
61+
62+
print("time_delay=" + str(settings.get_time_delay()))
63+
process_tracker = ProcessTracker(settings)
64+
thread = threading.Thread(target=process_tracker.start_logging, args=(settings.get_time_delay(), ))
65+
"""thread dies, if main dies"""
66+
thread.setDaemon(True)
67+
thread.start()
68+
time.sleep(2)
69+
print("------------------------------")
70+
input("Press return to stop logging\n------------------------------\n")
71+
process_tracker.stop_logging()
72+
"""wait for thread to finish"""
73+
thread.join()
74+
process_tracker.write_process_list()
75+
76+
if __name__ == '__main__':
77+
main()

process_tracker.py

Lines changed: 6 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,8 @@
1-
#!/usr/bin/python3
2-
import getopt
3-
import sys
41
import psutil
5-
import threading
62
import time
73
from task import Task
84
from process import Process
95
from json_tool import JsonReaderWriter
10-
from setting import Setting
116

127

138
class ProcessTracker:
@@ -16,8 +11,7 @@ def __init__(self, settings):
1611
self.json_reader_writer = JsonReaderWriter(self.filename)
1712
self.running = False
1813
self.process_object_list = []
19-
self.processes_to_track = settings.get_processes_to_track()
20-
self.excluded_processes = settings.get_excluded_processes()
14+
self.settings = settings
2115

2216
def is_name_already_in_process_list(self, process_name):
2317
is_contained = False
@@ -29,15 +23,15 @@ def is_name_already_in_process_list(self, process_name):
2923
def user_include_filter_processes(self, return_process_list):
3024
filtered_list = []
3125
for process in return_process_list:
32-
for u_process in self.processes_to_track:
26+
for u_process in self.settings.get_processes_to_track():
3327
if process == u_process:
3428
filtered_list.append(process)
3529
return filtered_list
3630

3731
def user_exclude_filter_processes(self, return_process_list):
38-
filtered_list = return_process_list
32+
filtered_list = return_process_list.copy()
3933
for process in return_process_list:
40-
for u_process in self.excluded_processes:
34+
for u_process in self.settings.get_excluded_processes():
4135
if process == u_process:
4236
filtered_list.remove(process)
4337
return filtered_list
@@ -51,9 +45,9 @@ def get_process_list_without_doubles(self):
5145
return_process_list.append(process.name())
5246

5347
"""excluded processes are priority"""
54-
if len(self.excluded_processes) > 0:
48+
if len(self.settings.get_excluded_processes()) > 0:
5549
return self.user_exclude_filter_processes(return_process_list)
56-
elif len(self.processes_to_track) > 0:
50+
elif len(self.settings.get_processes_to_track()) > 0:
5751
"""filters out processes, which the user doesn't want to see"""
5852
return self.user_include_filter_processes(return_process_list)
5953
else:
@@ -137,66 +131,3 @@ def write_process_list(self):
137131
self.json_reader_writer.write_process_list_to_file(self.process_object_list)
138132

139133

140-
def show_help():
141-
print("\n")
142-
print("--------USAGE--------")
143-
print("-h --help : prints this help page")
144-
print("-l <arg> --load <arg> : load settings file from <arg>")
145-
print("-o <arg> --output <arg> : specify output filename")
146-
print("-i 'arg1 arg2 arg3' ... --include 'arg1 arg2 arg3' ... : set processes that should be tracked")
147-
print("-e 'arg1 arg2 arg3' ... --exclude 'arg1 arg2 arg3' ... : set processes that shouldn't be tracked")
148-
print("---------------------")
149-
print("\n")
150-
sys.exit(0)
151-
152-
153-
def main():
154-
settings = Setting()
155-
try:
156-
opts, args = getopt.getopt(sys.argv[1:], "hl:o:i:e:b:",
157-
["help", "load=", "output=", "included=", "excluded=", "build="])
158-
except getopt.GetoptError as err:
159-
# print help information and exit:
160-
print(err) # will print something like "option -a not recognized"
161-
sys.exit(2)
162-
163-
for o, a in opts:
164-
if o in ("-h", "--help"):
165-
show_help()
166-
elif o in ("-l", "--load"):
167-
try:
168-
settings.load_from_file("settings/" + a)
169-
print(a)
170-
except:
171-
print("settings file not found")
172-
exit(1)
173-
elif o in ("-o", "--output"):
174-
settings.set_log_filename(a)
175-
elif o in ("-i", "--included"):
176-
processes_to_track = a.split(' ')
177-
settings.set_processes_to_track(processes_to_track)
178-
elif o in ("-e", "--excluded"):
179-
excluded_processes = a.split(' ')
180-
settings.set_excluded_processes(excluded_processes)
181-
elif o in ("-b", "--build"):
182-
excluded_processes = a.split(' ')
183-
settings.set_excluded_processes(excluded_processes)
184-
else:
185-
assert False, "unhandled option"
186-
187-
print("time_delay=" + str(settings.get_time_delay()))
188-
process_tracker = ProcessTracker(settings)
189-
thread = threading.Thread(target=process_tracker.start_logging, args=(settings.get_time_delay(), ))
190-
"""thread dies, if main dies"""
191-
thread.setDaemon(True)
192-
thread.start()
193-
time.sleep(2)
194-
print("------------------------------")
195-
input("Press return to stop logging\n------------------------------\n")
196-
process_tracker.stop_logging()
197-
"""wait for thread to finish"""
198-
thread.join()
199-
process_tracker.write_process_list()
200-
201-
if __name__ == '__main__':
202-
main()

setting.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import json
2+
from json_tool import JsonReaderWriter
23

34

45
class Setting:
@@ -36,13 +37,23 @@ def get_excluded_processes(self):
3637
def set_excluded_processes(self, excluded_processes):
3738
self.excluded_processes = excluded_processes
3839

40+
def to_json(self):
41+
settings = {
42+
"processes_to_track": self.processes_to_track,
43+
"time_delay": self.time_delay,
44+
"excluded_processes": self.excluded_processes,
45+
"log_filename": self.log_filename
46+
}
47+
return settings
48+
3949
def parse(self):
4050
self.processes_to_track = self.file_content_object["processes_to_track"]
4151
self.time_delay = self.file_content_object["time_delay"]
4252
self.excluded_processes = self.file_content_object["excluded_processes"]
4353
self.log_filename = self.file_content_object["log_filename"]
4454

4555
def read_json(self):
46-
self.file = open(self.filename)
47-
self.file_content_object = json.loads(self.file.read())
56+
json_reader = JsonReaderWriter(filename=self.filename)
57+
json_reader.open_file()
58+
self.file_content_object = json_reader.get_json()
4859
self.parse()

0 commit comments

Comments
 (0)