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)