def print_communities(dispersy): stats = dispersy.statistics community_list = sorted(stats.communities, key=lambda community: (not community.dispersy_enable_candidate_walker, community.classification, community.cid) ) print >> sys.stderr, u"\n\n===== Dispersy Communities =====" print >> sys.stderr, u"- %15s | %7s | %7s | %5s | %7s | %5s | %5s | %14s | %14s | %14s | %14s" %\ (u"Class", u"ID", u"Member", u"DB ID", u"GTime", u"Cands", u"PK_cr", u"PK_sent", u"PK_recv", u"PK_succ", u"PK_drop") for community in community_list: print >> sys.stderr, u"- %15s | %7s | %7s | %5s | %7s | %5s | %5s | %14s | %14s | %14s | %14s" %\ (community.classification.replace('Community', ''), community.hex_cid[:7], community.hex_mid[:7], community.database_id, str(community.global_time)[:7], len(community.candidates), community.msg_statistics.created_count, compute_ratio(community.msg_statistics.outgoing_count, community.msg_statistics.outgoing_count + community.msg_statistics.total_received_count), compute_ratio(community.msg_statistics.total_received_count, community.msg_statistics.outgoing_count + community.msg_statistics.total_received_count), compute_ratio(community.msg_statistics.success_count, community.msg_statistics.total_received_count), compute_ratio(community.msg_statistics.drop_count, community.msg_statistics.total_received_count),) print >> sys.stderr, u"====================\n\n"
def _create_community_data(self, dispersy): """ Creates a dictionary of community statistics data. :param dispersy: The dispersy instance. :return: A dictionary of community statistics data. """ community_data_dict = {} for community in dispersy.statistics.communities: median_global_time = u"%d (%d difference)" % \ (community.acceptable_global_time - community.dispersy_acceptable_global_time_range, community.acceptable_global_time - community.global_time - community.dispersy_acceptable_global_time_range) candidate_list = None if community.dispersy_enable_candidate_walker or \ community.dispersy_enable_candidate_walker_responses: candidate_count = u"%d " % len(community.candidates) candidate_list = [ (u"%s" % global_time, u"%s:%s" % lan, u"%s:%s" % wan, u"%s" % binascii.hexlify(mid) if mid else DATA_NONE) for lan, wan, global_time, mid in community.candidates ] candidate_list.sort() elif community.candidates: candidate_count = u"%d*" % len(community.candidates) else: candidate_count = u"-" database_list = [] if community.database: database_str = u"%d packets" % \ sum(count for count in community.database.itervalues()) for name, count in sorted(community.database.iteritems(), key=lambda tup: tup[1]): database_list.append((u"%s" % count, u"%s" % name)) else: database_str = u"? packets" community_data = { u"Identifier": u"%s" % community.hex_cid, u"Member": u"%s" % community.hex_mid, u"Classification": u"%s" % community.classification, u"Database id": u"%s" % community.database_id, u"Global time": u"%s" % community.global_time, u"Median global time": u"%s" % median_global_time, u"Acceptable range": u"%s" % community.dispersy_acceptable_global_time_range, u"Sync bloom created": u"%s" % community.sync_bloom_new, u"Sync bloom reused": u"%s" % community.sync_bloom_reuse, u"Sync bloom skipped": u"%s" % community.sync_bloom_skip, u"Candidates": u"%s" % candidate_count, u"Candidate_list": candidate_list, u"Database": database_str, u"Database_list": database_list, u"Packets Created": u"%s" % community.msg_statistics.created_count, u"Packets Sent": u"%s" % compute_ratio( community.msg_statistics.outgoing_count, community.msg_statistics.outgoing_count + community.msg_statistics.total_received_count), u"Packets Received": u"%s" % compute_ratio( community.msg_statistics.total_received_count, community.msg_statistics.outgoing_count + community.msg_statistics.total_received_count), u"Packets Success": compute_ratio(community.msg_statistics.success_count, community.msg_statistics.total_received_count), u"Packets Dropped": compute_ratio(community.msg_statistics.drop_count, community.msg_statistics.total_received_count), u"Packets Delayed Sent": compute_ratio(community.msg_statistics.delay_send_count, community.msg_statistics.total_received_count), u"Packets Delayed Received": compute_ratio(community.msg_statistics.delay_received_count, community.msg_statistics.total_received_count), u"Packets Delayed Success": compute_ratio(community.msg_statistics.delay_success_count, community.msg_statistics.delay_received_count), u"Packets Delayed Timeout": compute_ratio(community.msg_statistics.delay_timeout_count, community.msg_statistics.delay_received_count), u"Statistics": self._get_community_rawinfo(community), } key = u"<%s>: %s" % (community.classification, community.hex_cid) community_data_dict[key] = community_data return community_data_dict
def _create_community_data(self, dispersy): """ Creates a dictionary of community statistics data. :param dispersy: The dispersy instance. :return: A dictionary of community statistics data. """ community_data_dict = {} for community in dispersy.statistics.communities: median_global_time = u"%d (%d difference)" % ( community.acceptable_global_time - community.dispersy_acceptable_global_time_range, community.acceptable_global_time - community.global_time - community.dispersy_acceptable_global_time_range, ) candidate_list = None if community.dispersy_enable_candidate_walker or community.dispersy_enable_candidate_walker_responses: candidate_count = u"%d " % len(community.candidates) candidate_list = [ ( u"%s" % global_time, u"%s:%s" % lan, u"%s:%s" % wan, u"%s" % binascii.hexlify(mid) if mid else DATA_NONE, ) for lan, wan, global_time, mid in community.candidates ] candidate_list.sort() elif community.candidates: candidate_count = u"%d*" % len(community.candidates) else: candidate_count = u"-" database_list = [] if community.database: database_str = u"%d packets" % sum(count for count in community.database.itervalues()) for name, count in sorted(community.database.iteritems(), key=lambda tup: tup[1]): database_list.append((u"%s" % count, u"%s" % name)) else: database_str = u"? packets" community_data = { u"Identifier": u"%s" % community.hex_cid, u"Member": u"%s" % community.hex_mid, u"Classification": u"%s" % community.classification, u"Database id": u"%s" % community.database_id, u"Global time": u"%s" % community.global_time, u"Median global time": u"%s" % median_global_time, u"Acceptable range": u"%s" % community.dispersy_acceptable_global_time_range, u"Sync bloom created": u"%s" % community.sync_bloom_new, u"Sync bloom reused": u"%s" % community.sync_bloom_reuse, u"Sync bloom skipped": u"%s" % community.sync_bloom_skip, u"Candidates": u"%s" % candidate_count, u"Candidate_list": candidate_list, u"Database": database_str, u"Database_list": database_list, u"Packets Created": u"%s" % community.msg_statistics.created_count, u"Packets Sent": u"%s" % compute_ratio( community.msg_statistics.outgoing_count, community.msg_statistics.outgoing_count + community.msg_statistics.total_received_count, ), u"Packets Received": u"%s" % compute_ratio( community.msg_statistics.total_received_count, community.msg_statistics.outgoing_count + community.msg_statistics.total_received_count, ), u"Packets Success": compute_ratio( community.msg_statistics.success_count, community.msg_statistics.total_received_count ), u"Packets Dropped": compute_ratio( community.msg_statistics.drop_count, community.msg_statistics.total_received_count ), u"Packets Delayed Sent": compute_ratio( community.msg_statistics.delay_send_count, community.msg_statistics.total_received_count ), u"Packets Delayed Received": compute_ratio( community.msg_statistics.delay_received_count, community.msg_statistics.total_received_count ), u"Packets Delayed Success": compute_ratio( community.msg_statistics.delay_success_count, community.msg_statistics.delay_received_count ), u"Packets Delayed Timeout": compute_ratio( community.msg_statistics.delay_timeout_count, community.msg_statistics.delay_received_count ), u"Statistics": self._get_community_rawinfo(community), } key = u"<%s>: %s" % (community.classification, community.hex_cid) community_data_dict[key] = community_data return community_data_dict
def print_info(dispersy): stats = dispersy.statistics print >> sys.stderr, u"\n\n===== Dispersy Info =====" print >> sys.stderr, u"- WAN Address %s:%d" % stats.wan_address print >> sys.stderr, u"- LAN Address %s:%d" % stats.lan_address print >> sys.stderr, u"- Connection: %s" % unicode(stats.connection_type) print >> sys.stderr, u"- Runtime: %s" % eta_value(stats.timestamp - stats.start) print >> sys.stderr, u"- Download: %s or %s/s" % (size_format(stats.total_down), size_format(int(stats.total_down / (stats.timestamp - stats.start)))) print >> sys.stderr, u"- Upload: %s or %s/s" % (size_format(stats.total_up), size_format(int(stats.total_up / (stats.timestamp - stats.start)))) print >> sys.stderr, u"- Packets Sent: %s" % compute_ratio(stats.total_send, stats.total_received + stats.total_send) print >> sys.stderr, u"- Packets Received: %s" % compute_ratio(stats.total_received, stats.total_received + stats.total_send) print >> sys.stderr, u"- Packets Success: %s" % compute_ratio(stats.msg_statistics.success_count, stats.total_received) print >> sys.stderr, u"- Packets Dropped: %s" % compute_ratio(stats.msg_statistics.drop_count, stats.total_received) print >> sys.stderr, u"- Packets Delayed: %s" % compute_ratio(stats.msg_statistics.delay_received_count, stats.total_received) print >> sys.stderr, u"- Packets Delayed send: %s" % compute_ratio(stats.msg_statistics.delay_send_count, stats.msg_statistics.delay_received_count) print >> sys.stderr, u"- Packets Delayed success: %s" % compute_ratio(stats.msg_statistics.delay_success_count, stats.msg_statistics.delay_received_count) print >> sys.stderr, u"- Packets Delayed timeout: %s" % compute_ratio(stats.msg_statistics.delay_timeout_count, stats.msg_statistics.delay_received_count) print >> sys.stderr, u"- Walker Success: %s" % compute_ratio(stats.walk_success_count, stats.walk_attempt_count) print >> sys.stderr, u"- Sync-Messages Created: %s" % stats.msg_statistics.created_count print >> sys.stderr, u"- Bloom New: %s" % compute_ratio(sum(c.sync_bloom_new for c in stats.communities), sum(c.sync_bloom_send + c.sync_bloom_skip for c in stats.communities)) print >> sys.stderr, u"- Bloom Reused: %s" % compute_ratio(sum(c.sync_bloom_reuse for c in stats.communities), sum(c.sync_bloom_send + c.sync_bloom_skip for c in stats.communities)) print >> sys.stderr, u"- Bloom Skipped: %s" % compute_ratio(sum(c.sync_bloom_skip for c in stats.communities), sum(c.sync_bloom_send + c.sync_bloom_skip for c in stats.communities)) print >> sys.stderr, u"- Debug Mode: %s" % u"yes" if __debug__ else u"no" print >> sys.stderr, u"====================\n\n"
def UpdateInfo(self, stats): community_list = sorted(stats.communities, key=lambda community: (not community.dispersy_enable_candidate_walker, community.classification, community.cid)) self.__community_data_list = [] reselect_community_idx = None idx = 0 community_list_for_update = [] for community in community_list: candidate_list = None if community.dispersy_enable_candidate_walker or \ community.dispersy_enable_candidate_walker_responses: candidate_count = "%d " % len(community.candidates) candidate_list = [("%s" % global_time, "%s:%s" % lan, "%s:%s" % wan, "%s" % binascii.hexlify(mid) if mid else DATA_NONE) for lan, wan, global_time, mid in community.candidates] candidate_list.sort() elif community.candidates: candidate_count = "%d*" % len(community.candidates) else: candidate_count = "-" median_global_time = "%d (%d difference)" % \ (community.acceptable_global_time - community.dispersy_acceptable_global_time_range, community.acceptable_global_time - community.global_time - community.dispersy_acceptable_global_time_range) database_list = [] if community.database: database_str = "%d packets" % \ sum(count for count in community.database.itervalues()) for name, count in sorted(community.database.iteritems(), key=lambda tup: tup[1]): database_list.append(("%s" % count, "%s" % name)) else: database_str = "? packets" community_data = { "Identifier": "%s" % community.hex_cid, "Member": "%s" % community.hex_mid, "Classification": "%s" % community.classification, "Database id": "%s" % community.database_id, "Global time": "%s" % community.global_time, "Median global time": "%s" % median_global_time, "Acceptable range": "%s" % community.dispersy_acceptable_global_time_range, "Walk success": "%s" % compute_ratio(community.msg_statistics.walk_success_count, community.msg_statistics.walk_attempt_count), "Sync bloom created": "%s" % community.sync_bloom_new, "Sync bloom reused": "%s" % community.sync_bloom_reuse, "Sync bloom skipped": "%s" % community.sync_bloom_skip, "Candidates": "%s" % candidate_count, "Candidate_list": candidate_list, "Database": database_str, "Database_list": database_list, "Packets Created": "%s" % community.msg_statistics.created_count, "Packets Sent": "%s" % compute_ratio(community.msg_statistics.outgoing_count, community.msg_statistics.outgoing_count + community.msg_statistics.total_received_count), "Packets Received": "%s" % compute_ratio(community.msg_statistics.total_received_count, community.msg_statistics.outgoing_count + community.msg_statistics.total_received_count), "Packets Success": compute_ratio(community.msg_statistics.success_count, community.msg_statistics.total_received_count), "Packets Dropped": compute_ratio(community.msg_statistics.drop_count, community.msg_statistics.total_received_count), "Packets Delayed Sent": compute_ratio(community.msg_statistics.delay_send_count, community.msg_statistics.total_received_count), "Packets Delayed Received": compute_ratio(community.msg_statistics.delay_received_count, community.msg_statistics.total_received_count), "Packets Delayed Success": compute_ratio(community.msg_statistics.delay_success_count, community.msg_statistics.delay_received_count), "Packets Delayed Timeout": compute_ratio(community.msg_statistics.delay_timeout_count, community.msg_statistics.delay_received_count), "Statistics": community, } # update community data list self.__community_data_list.append(community_data) community_list_for_update.append((community_data["Classification"], community_data["Identifier"][:7], community_data["Database id"], community_data["Member"][:7], community_data["Candidates"]) ) if self.__selected_community_identifier == community_data["Identifier"]: reselect_community_idx = idx idx += 1 # update community detail self.__listctrl.UpdateData(community_list_for_update) community_data_for_update = None community_statistics = None if reselect_community_idx is not None: self.__listctrl.Select(reselect_community_idx) community_data_for_update = self.__community_data_list[reselect_community_idx] self.__detail_panel.UpdateInfo(community_data_for_update)
def UpdateInfo(self, stats, to_cleanup=False): if to_cleanup: for info in self.__info_list: info[1] = DATA_NONE else: self.__info_list[0][1] = "%s:%d" % stats.wan_address self.__info_list[1][1] = "%s:%d" % stats.lan_address self.__info_list[2][1] = unicode(stats.connection_type) self.__info_list[3][1] = "%s" % eta_value(stats.timestamp - stats.start) self.__info_list[4][1] = "%s or %s/s" % ( size_format(stats.total_down), size_format(int(stats.total_down / (stats.timestamp - stats.start))) ) self.__info_list[5][1] = "%s or %s/s" % ( size_format(stats.total_up), size_format(int(stats.total_up / (stats.timestamp - stats.start))) ) self.__info_list[6][1] = compute_ratio(stats.total_send, stats.total_received + stats.total_send) self.__info_list[7][1] = compute_ratio(stats.total_received, stats.total_received + stats.total_send) self.__info_list[8][1] = compute_ratio(stats.msg_statistics.success_count, stats.total_received) self.__info_list[9][1] = compute_ratio(stats.msg_statistics.drop_count, stats.total_received) self.__info_list[10][1] = compute_ratio(stats.msg_statistics.delay_received_count, stats.total_received) self.__info_list[11][1] = compute_ratio(stats.msg_statistics.delay_send_count, stats.msg_statistics.delay_received_count) self.__info_list[12][1] = compute_ratio(stats.msg_statistics.delay_success_count, stats.msg_statistics.delay_received_count) self.__info_list[13][1] = compute_ratio(stats.msg_statistics.delay_timeout_count, stats.msg_statistics.delay_received_count) self.__info_list[14][1] = compute_ratio(stats.walk_success_count, stats.walk_attempt_count) self.__info_list[15][1] = "%s" % stats.msg_statistics.created_count self.__info_list[16][1] = compute_ratio(sum(c.sync_bloom_new for c in stats.communities), sum(c.sync_bloom_send + c.sync_bloom_skip for c in stats.communities)) self.__info_list[17][1] = compute_ratio(sum(c.sync_bloom_reuse for c in stats.communities), sum(c.sync_bloom_send + c.sync_bloom_skip for c in stats.communities)) self.__info_list[18][1] = compute_ratio(sum(c.sync_bloom_skip for c in stats.communities), sum(c.sync_bloom_send + c.sync_bloom_skip for c in stats.communities)) self.__info_list[19][1] = "yes" if __debug__ else "no" for key, value, _ in self.__info_list: self.__text_dict[key].SetLabel(value) self.SetupScrolling()
def UpdateInfo(self, stats): community_list = sorted( stats.communities, key=lambda community: (not community.dispersy_enable_candidate_walker, community. classification, community.cid)) self.__community_data_list = [] reselect_community_idx = None idx = 0 community_list_for_update = [] for community in community_list: candidate_list = None if community.dispersy_enable_candidate_walker or \ community.dispersy_enable_candidate_walker_responses: candidate_count = "%d " % len(community.candidates) candidate_list = [ ("%s" % global_time, "%s:%s" % lan, "%s:%s" % wan, "%s" % binascii.hexlify(mid) if mid else DATA_NONE) for lan, wan, global_time, mid in community.candidates ] candidate_list.sort() elif community.candidates: candidate_count = "%d*" % len(community.candidates) else: candidate_count = "-" median_global_time = "%d (%d difference)" % \ (community.acceptable_global_time - community.dispersy_acceptable_global_time_range, community.acceptable_global_time - community.global_time - community.dispersy_acceptable_global_time_range) database_list = [] if community.database: database_str = "%d packets" % \ sum(count for count in community.database.itervalues()) for name, count in sorted(community.database.iteritems(), key=lambda tup: tup[1]): database_list.append(("%s" % count, "%s" % name)) else: database_str = "? packets" community_data = { "Identifier": "%s" % community.hex_cid, "Member": "%s" % community.hex_mid, "Classification": "%s" % community.classification, "Database id": "%s" % community.database_id, "Global time": "%s" % community.global_time, "Median global time": "%s" % median_global_time, "Acceptable range": "%s" % community.dispersy_acceptable_global_time_range, "Walk success": "%s" % compute_ratio(community.msg_statistics.walk_success_count, community.msg_statistics.walk_attempt_count), "Sync bloom created": "%s" % community.sync_bloom_new, "Sync bloom reused": "%s" % community.sync_bloom_reuse, "Sync bloom skipped": "%s" % community.sync_bloom_skip, "Candidates": "%s" % candidate_count, "Candidate_list": candidate_list, "Database": database_str, "Database_list": database_list, "Packets Created": "%s" % community.msg_statistics.created_count, "Packets Sent": "%s" % compute_ratio( community.msg_statistics.outgoing_count, community.msg_statistics.outgoing_count + community.msg_statistics.total_received_count), "Packets Received": "%s" % compute_ratio( community.msg_statistics.total_received_count, community.msg_statistics.outgoing_count + community.msg_statistics.total_received_count), "Packets Success": compute_ratio(community.msg_statistics.success_count, community.msg_statistics.total_received_count), "Packets Dropped": compute_ratio(community.msg_statistics.drop_count, community.msg_statistics.total_received_count), "Packets Delayed Sent": compute_ratio(community.msg_statistics.delay_send_count, community.msg_statistics.total_received_count), "Packets Delayed Received": compute_ratio(community.msg_statistics.delay_received_count, community.msg_statistics.total_received_count), "Packets Delayed Success": compute_ratio(community.msg_statistics.delay_success_count, community.msg_statistics.delay_received_count), "Packets Delayed Timeout": compute_ratio(community.msg_statistics.delay_timeout_count, community.msg_statistics.delay_received_count), "Statistics": community, } # update community data list self.__community_data_list.append(community_data) community_list_for_update.append( (community_data["Classification"], community_data["Identifier"][:7], community_data["Database id"], community_data["Member"][:7], community_data["Candidates"])) if self.__selected_community_identifier == community_data[ "Identifier"]: reselect_community_idx = idx idx += 1 # update community detail self.__listctrl.UpdateData(community_list_for_update) community_data_for_update = None community_statistics = None if reselect_community_idx is not None: self.__listctrl.Select(reselect_community_idx) community_data_for_update = self.__community_data_list[ reselect_community_idx] self.__detail_panel.UpdateInfo(community_data_for_update)
def UpdateInfo(self, stats, to_cleanup=False): if to_cleanup: for info in self.__info_list: info[1] = DATA_NONE else: self.__info_list[0][1] = "%s:%d" % stats.wan_address self.__info_list[1][1] = "%s:%d" % stats.lan_address self.__info_list[2][1] = unicode(stats.connection_type) self.__info_list[3][1] = "%s" % eta_value(stats.timestamp - stats.start) self.__info_list[4][1] = "%s or %s/s" % ( size_format(stats.total_down), size_format( int(stats.total_down / (stats.timestamp - stats.start)))) self.__info_list[5][1] = "%s or %s/s" % ( size_format(stats.total_up), size_format( int(stats.total_up / (stats.timestamp - stats.start)))) self.__info_list[6][1] = compute_ratio( stats.total_send, stats.total_received + stats.total_send) self.__info_list[7][1] = compute_ratio( stats.total_received, stats.total_received + stats.total_send) self.__info_list[8][1] = compute_ratio( stats.msg_statistics.success_count, stats.total_received) self.__info_list[9][1] = compute_ratio( stats.msg_statistics.drop_count, stats.total_received) self.__info_list[10][1] = compute_ratio( stats.msg_statistics.delay_received_count, stats.total_received) self.__info_list[11][1] = compute_ratio( stats.msg_statistics.delay_send_count, stats.msg_statistics.delay_received_count) self.__info_list[12][1] = compute_ratio( stats.msg_statistics.delay_success_count, stats.msg_statistics.delay_received_count) self.__info_list[13][1] = compute_ratio( stats.msg_statistics.delay_timeout_count, stats.msg_statistics.delay_received_count) self.__info_list[14][1] = compute_ratio(stats.walk_success_count, stats.walk_attempt_count) self.__info_list[15][1] = "%s" % stats.msg_statistics.created_count self.__info_list[16][1] = compute_ratio( sum(c.sync_bloom_new for c in stats.communities), sum(c.sync_bloom_send + c.sync_bloom_skip for c in stats.communities)) self.__info_list[17][1] = compute_ratio( sum(c.sync_bloom_reuse for c in stats.communities), sum(c.sync_bloom_send + c.sync_bloom_skip for c in stats.communities)) self.__info_list[18][1] = compute_ratio( sum(c.sync_bloom_skip for c in stats.communities), sum(c.sync_bloom_send + c.sync_bloom_skip for c in stats.communities)) self.__info_list[19][1] = "yes" if __debug__ else "no" for key, value, _ in self.__info_list: self.__text_dict[key].SetLabel(value) self.SetupScrolling()