예제 #1
0
 def update_averages(self):
     #damage "in" latency: (the time it takes for damage requests to be processed only)
     if len(self.damage_in_latency) > 0:
         data = [(when, latency)
                 for when, _, _, latency in list(self.damage_in_latency)]
         self.avg_damage_in_latency, self.recent_damage_in_latency = calculate_time_weighted_average(
             data)
     #damage "out" latency: (the time it takes for damage requests to be processed and sent out)
     if len(self.damage_out_latency) > 0:
         data = [(when, latency)
                 for when, _, _, latency in list(self.damage_out_latency)]
         self.avg_damage_out_latency, self.recent_damage_out_latency = calculate_time_weighted_average(
             data)
     #client decode speed:
     if len(self.client_decode_time) > 0:
         #the elapsed time recorded is in microseconds, so multiply by 1000*1000 to get the real value:
         self.avg_decode_speed, self.recent_decode_speed = calculate_timesize_weighted_average(
             list(self.client_decode_time), sizeunit=1000 * 1000)
     #network send speed:
     if len(self.damage_send_speed) > 0:
         self.avg_send_speed, self.recent_send_speed = calculate_timesize_weighted_average(
             list(self.damage_send_speed))
     all_l = [
         0.1, self.avg_damage_in_latency, self.recent_damage_in_latency,
         self.avg_damage_out_latency, self.recent_damage_out_latency
     ]
     self.max_latency = max(all_l)
예제 #2
0
 def update_averages(self):
     #damage "in" latency: (the time it takes for damage requests to be processed only)
     dil = tuple(self.damage_in_latency)
     if dil:
         data = tuple((when, latency) for when, _, _, latency in dil)
         self.avg_damage_in_latency, self.recent_damage_in_latency = calculate_time_weighted_average(
             data)
     #damage "out" latency: (the time it takes for damage requests to be processed and sent out)
     dol = tuple(self.damage_out_latency)
     if dol:
         data = tuple((when, latency) for when, _, _, latency in dol)
         self.avg_damage_out_latency, self.recent_damage_out_latency = calculate_time_weighted_average(
             data)
     #client decode speed:
     cdt = tuple(self.client_decode_time)
     if cdt:
         #the elapsed time recorded is in microseconds:
         decode_speed = tuple(
             (event_time, size, int(size * 1000 * 1000 / elapsed))
             for event_time, size, elapsed in cdt)
         r = calculate_size_weighted_average(decode_speed)
         self.avg_decode_speed = int(r[0])
         self.recent_decode_speed = int(r[1])
     #network send speed:
     all_l = [
         0.1, self.avg_damage_in_latency, self.recent_damage_in_latency,
         self.avg_damage_out_latency, self.recent_damage_out_latency
     ]
     self.max_latency = max(all_l)
예제 #3
0
 def update_averages(self):
     if len(self.client_latency)>0:
         data = [(when, latency) for _, when, _, latency in list(self.client_latency)]
         self.min_client_latency = min([x for _,x in data])
         self.avg_client_latency, self.recent_client_latency = calculate_time_weighted_average(data)
     #client ping latency: from ping packets
     if len(self.client_ping_latency)>0:
         data = list(self.client_ping_latency)
         self.min_client_ping_latency = min([x for _,x in data])
         self.avg_client_ping_latency, self.recent_client_ping_latency = calculate_time_weighted_average(data)
     #server ping latency: from ping packets
     if len(self.server_ping_latency)>0:
         data = list(self.server_ping_latency)
         self.min_server_ping_latency = min([x for _,x in data])
         self.avg_server_ping_latency, self.recent_server_ping_latency = calculate_time_weighted_average(data)
예제 #4
0
 def update_averages(self):
     if len(self.client_latency) > 0:
         data = [(when, latency)
                 for _, when, _, latency in tuple(self.client_latency)]
         self.min_client_latency = min([x for _, x in data])
         self.avg_client_latency, self.recent_client_latency = calculate_time_weighted_average(
             data)
     #client ping latency: from ping packets
     if len(self.client_ping_latency) > 0:
         data = tuple(self.client_ping_latency)
         self.min_client_ping_latency = min([x for _, x in data])
         self.avg_client_ping_latency, self.recent_client_ping_latency = calculate_time_weighted_average(
             data)
     #server ping latency: from ping packets
     if len(self.server_ping_latency) > 0:
         data = tuple(self.server_ping_latency)
         self.min_server_ping_latency = min([x for _, x in data])
         self.avg_server_ping_latency, self.recent_server_ping_latency = calculate_time_weighted_average(
             data)
     #set to 0 if we have less than 2 events in the last 60 seconds:
     now = monotonic_time()
     min_time = now - 60
     css = tuple(x for x in self.congestion_send_speed if x[0] > min_time)
     acss = 0
     if len(css) >= 2:
         #weighted average of the send speed over the last minute:
         acss = int(calculate_size_weighted_average(css)[0])
         latest_ctime = self.congestion_send_speed[-1][0]
         elapsed = now - latest_ctime
         #require at least one recent event:
         if elapsed < 30:
             #as the last event recedes in the past, increase limit:
             acss *= 1 + elapsed
     self.avg_congestion_send_speed = int(acss)
     #how often we get congestion events:
     #first chunk it into second intervals
     min_time = now - 10
     cst = tuple(x[0] for x in css)
     cps = []
     for t in range(10):
         etime = now - t
         matches = tuple(
             1 for x in cst if x > etime - 1 and x <= etime) or (0, )
         cps.append((etime, sum(matches)))
     #log("cps(%s)=%s (now=%s)", cst, cps, now)
     self.congestion_value = time_weighted_average(cps)
예제 #5
0
 def update_averages(self):
     if len(self.client_latency) > 0:
         data = [(when, latency)
                 for _, when, _, latency in list(self.client_latency)]
         self.min_client_latency = min([x for _, x in data])
         self.avg_client_latency, self.recent_client_latency = calculate_time_weighted_average(
             data)
     #client ping latency: from ping packets
     if len(self.client_ping_latency) > 0:
         data = list(self.client_ping_latency)
         self.min_client_ping_latency = min([x for _, x in data])
         self.avg_client_ping_latency, self.recent_client_ping_latency = calculate_time_weighted_average(
             data)
     #server ping latency: from ping packets
     if len(self.server_ping_latency) > 0:
         data = list(self.server_ping_latency)
         self.min_server_ping_latency = min([x for _, x in data])
         self.avg_server_ping_latency, self.recent_server_ping_latency = calculate_time_weighted_average(
             data)
예제 #6
0
	def test_calculate_time_weighted_average(self):
		now = time.time()
		sample_size = 100
		data = []
		t = now - sample_size
		for _ in range(sample_size):
			v = random.random()
			data.append((t, v))
			t += 1
		a, ra = cystats.calculate_time_weighted_average(data)
		assert 0<a<1 and 0<ra<1
예제 #7
0
 def update_averages(self):
     #damage "in" latency: (the time it takes for damage requests to be processed only)
     if len(self.damage_in_latency)>0:
         data = [(when, latency) for when, _, _, latency in list(self.damage_in_latency)]
         self.avg_damage_in_latency, self.recent_damage_in_latency =  calculate_time_weighted_average(data)
     #damage "out" latency: (the time it takes for damage requests to be processed and sent out)
     if len(self.damage_out_latency)>0:
         data = [(when, latency) for when, _, _, latency in list(self.damage_out_latency)]
         self.avg_damage_out_latency, self.recent_damage_out_latency = calculate_time_weighted_average(data)
     #client decode speed:
     if len(self.client_decode_time)>0:
         #the elapsed time recorded is in microseconds, so multiply by 1000*1000 to get the real value:
         self.avg_decode_speed, self.recent_decode_speed = calculate_timesize_weighted_average(list(self.client_decode_time), sizeunit=1000*1000)
     #network send speed:
     if len(self.damage_send_speed)>0:
         self.avg_send_speed, self.recent_send_speed = calculate_timesize_weighted_average(list(self.damage_send_speed))
     all_l = [0.1,
              self.avg_damage_in_latency, self.recent_damage_in_latency,
              self.avg_damage_out_latency, self.recent_damage_out_latency]
     self.max_latency = max(all_l)
예제 #8
0
 def update_averages(self):
     if len(self.client_latency) > 0:
         data = [(when, latency)
                 for _, when, _, latency in tuple(self.client_latency)]
         self.min_client_latency = min([x for _, x in data])
         self.avg_client_latency, self.recent_client_latency = calculate_time_weighted_average(
             data)
     #client ping latency: from ping packets
     if len(self.client_ping_latency) > 0:
         data = tuple(self.client_ping_latency)
         self.min_client_ping_latency = min([x for _, x in data])
         self.avg_client_ping_latency, self.recent_client_ping_latency = calculate_time_weighted_average(
             data)
     #server ping latency: from ping packets
     if len(self.server_ping_latency) > 0:
         data = tuple(self.server_ping_latency)
         self.min_server_ping_latency = min([x for _, x in data])
         self.avg_server_ping_latency, self.recent_server_ping_latency = calculate_time_weighted_average(
             data)
     #set to 0 if we have less than 2 events in the last 60 seconds:
     min_time = monotonic_time() - 60
     css = tuple(x for x in self.congestion_send_speed if x[0] > min_time)
     if len(css) <= 2:
         self.avg_congestion_send_speed = 0
     else:
         self.avg_congestion_send_speed = int(
             calculate_size_weighted_average(
                 tuple(self.congestion_send_speed))[0])
     #how often we get congestion events:
     #first chunk it into second intervals
     now = monotonic_time()
     min_time = now - 10
     cst = tuple(x[0] for x in css)
     cps = []
     for t in range(10):
         etime = now - t
         cps.append(
             (etime, sum(1 for x in cst if x > etime - 1 and x <= etime)))
     #log("cps(%s)=%s (now=%s)", cst, cps, now)
     self.congestion_value = time_weighted_average(cps)
예제 #9
0
 def latency_averages(values):
     avg, recent = calculate_time_weighted_average(values)
     return max(0.001, avg), max(0.001, recent)