class Simulator: def __init__(self,params): number_of_servers=int(params["number_of_servers"]) self.number_of_requests = int(params["number_of_requests"]) self.number_of_types = len(params["types_of_requests"]) self.number_of_requests_per_sec = int(params["number_of_requests_per_sec"]) self.generator = RequestGenerator(params["types_of_requests"],int(params["number_of_requests_per_sec"])) request_type_capacity=[x["output_capacity"] for x in params["types_of_requests"].values()] server_capacity = self.distribute_output_capacity(number_of_servers,request_type_capacity) #print "server capacity:", server_capacity servers = [Server(server_capacity[z]) for z in range(number_of_servers)] self.loadbalancer = LoadBalancer(servers=servers,method=params["method"]) def distribute_output_capacity(self,number_of_servers,type_capacity): server_capacity = [[0 for z in range(self.number_of_types)] for server in range(number_of_servers)] for z in range(self.number_of_types): while (type_capacity[z]>0): for server in range(number_of_servers): if type_capacity[z] <= 0: break server_capacity[server][z]+=1 type_capacity[z]-=1 return server_capacity def number_of_servers(self): return self.loadbalancer.number_of_servers() def total_service_time(self): return self.loadbalancer.total_service_time() def total_wait_time(self): return self.loadbalancer.total_wait_time() def total_wait_requests(self): return self.loadbalancer.total_wait_requests() def number_of_requests_per_type(self): return self.loadbalancer.number_of_requests_per_type() def number_of_failed_requests_per_type(self): return self.loadbalancer.number_of_failed_requests_per_type() def simulate(self): arrival_time = 0 reqno = 0 while True: for req in self.generator.generate(number_of_requests=100): reqno += 1 request_type,delay,service_time=req arrival_time += delay #print "--- %s arrive at %f" % (request_type,arrival_time) self.loadbalancer.process(request_type,arrival_time,service_time) if reqno >=self.number_of_requests: break