54 lines
1.5 KiB
Python
54 lines
1.5 KiB
Python
from dataclasses import dataclass, field
|
|
|
|
from numpy import average
|
|
|
|
from entities import Request
|
|
from queues import Queue
|
|
|
|
|
|
@dataclass
|
|
class Stats:
|
|
total_plane_requests = 0
|
|
|
|
in_requests = 0
|
|
out_requests = 0
|
|
|
|
accepted_in_requests = 0
|
|
accepted_out_requests = 0
|
|
|
|
rejected_in_requests = 0
|
|
rejected_out_requests = 0
|
|
|
|
landings_count = 0
|
|
launches_count = 0
|
|
|
|
in_queued = 0
|
|
out_queued = 0
|
|
|
|
sleep_minutes = 0
|
|
|
|
in_waiting_time: list[float] = field(default_factory=list)
|
|
out_waiting_time: list[float] = field(default_factory=list)
|
|
|
|
def show_stats(stats: Stats) -> None:
|
|
string = f"""============
|
|
Total requests: {stats.total_plane_requests}
|
|
In requests: {stats.in_requests}
|
|
Out requests: {stats.out_requests}
|
|
Accepted in requests: {stats.accepted_in_requests}
|
|
Accepted out requests: {stats.accepted_out_requests}
|
|
Rejected in/out: {stats.rejected_in_requests}/{stats.rejected_out_requests}
|
|
Landings: {stats.landings_count}
|
|
Launches: {stats.launches_count}
|
|
Left in queues (in/out): {stats.in_queued}/{stats.out_queued}
|
|
Sleep: {stats.sleep_minutes}
|
|
Average waiting time (in/out): {average(stats.in_waiting_time)}/{average(stats.out_waiting_time)}
|
|
"""
|
|
print(string)
|
|
|
|
def finalize_waiting_stats(stats: Stats, in_queue: Queue[Request], out_queue: Queue[Request], current_time: int) -> None:
|
|
for item in in_queue.queue:
|
|
stats.in_waiting_time.append(current_time - item.request_time)
|
|
for item in out_queue.queue:
|
|
stats.out_waiting_time.append(current_time - item.request_time)
|