-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
98 lines (70 loc) · 3.03 KB
/
main.py
File metadata and controls
98 lines (70 loc) · 3.03 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import platform
import time
import datetime
import json
import os
import logging
from Process_OS.windows_process import main_windows, write_log
from Process_OS.linux_process import main_linux
from Process_OS.unix_process import main_unix
def set_timer(init, endt, student_info=None):
os_type = platform.system().lower()
if student_info:
configure_log(student_info)
blocked_processes = []
now = datetime.datetime.now()
start_time = datetime.datetime.combine(now.date(), init)
end_time = datetime.datetime.combine(now.date(), endt)
if end_time <= start_time:
end_time += datetime.timedelta(days=1)
write_log("\n****************************** Start Report *******************************\n", "info")
print(f"Waiting until {start_time.time()} to start monitoring...")
while datetime.datetime.now() < start_time:
time.sleep(1)
print(f"Monitoring active until {end_time.time()}...\n")
while datetime.datetime.now() < end_time:
if os_type == "windows":
blocked_processes += main_windows()
elif os_type == "linux":
blocked_processes += main_linux()
elif os_type == "darwin":
blocked_processes += main_unix()
time.sleep(1)
print("Monitoring finished.")
if student_info:
save_report_json(student_info, init, endt, blocked_processes)
write_log("\n****************************** End Report *******************************\n", "info")
def save_report_json(info, start, end, blocked_processes):
filename = f"{info['student_id']}_{info['name'].replace(' ', '_')}.json"
data = {
"name": info["name"],
"student_id": info["student_id"],
"email": info.get("email", ""),
"date": str(datetime.date.today()),
"start_time": str(start),
"end_time": str(end),
"blocked_processes": blocked_processes
}
with open(filename, "w", encoding="utf-8") as f:
json.dump(data, f, indent=4)
print(f"Report saved as {filename}")
def configure_log(student_info):
log_file = f"{student_info['student_id']}_{student_info['name'].replace(' ', '_')}.log"
# Reset logging handlers if one already exists.
for handler in logging.root.handlers[:]:
logging.root.removeHandler(handler)
logging.basicConfig(
filename=log_file,
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s',
datefmt='%Y-%m-%d %H:%M:%S'
)
def main():
init = datetime.datetime.strptime(input("Start Time (HH:MM): "), "%H:%M").time()
endt = datetime.datetime.strptime(input("End Time (HH:MM): "), "%H:%M").time()
write_log("\n****************************** Report *******************************\n", "info")
# For testing without GUI (no student data).
set_timer(init, endt)
write_log("\n****************************** End Report *******************************\n", "info")
if __name__ == "__main__":
main()