{% extends "skeleton.html" %} {% set sorted_by_label = sorted_by.split(',')[0].split('.')[1] %} {% block title %}Tor Relays :: Families By {{ sorted_by_label|replace('_', ' ')|title }}{% endblock %} {% block body %}

Home :: Families By {{ sorted_by_label|replace('_', ' ')|title }}

The set of all relay families with > 1 effective members, sorted by {{ sorted_by_label|replace('_', ' ') }}. The first seen parameter is taken from the oldest relay in the family.

{% if sorted_by_label == 'bandwidth' %} {% else %} {% endif %} {% if sorted_by_label == 'exit_count' %} {% else %} {% endif %} {% if sorted_by_label == 'middle_count' %} {% else %} {% endif %} {% if sorted_by_label == 'first_seen' %} {% else %} {% endif %} {% set processed = dict() %} {% for k, v in relays.json['sorted']['family'].items()|sort(attribute=sorted_by, reverse=True) %} {% if relays.json['relays'][v['relays'][0]]['fingerprint'] not in processed %} {% if v['bandwidth'] > 1000000 %} {% set obs_bandwidth = '%s %s'|format((v['bandwidth'] / 1000000)|round(2, 'common'), 'MB/s') %} {% else %} {% set obs_bandwidth = '%s %s'|format((v['bandwidth'] / 1000)|round(2, 'common'), 'KB/s') %}{% endif %} {% if v['contact'] %} {% else %} {% endif %} {% for r in v['relays'] %} {% set _dummy = processed.update({relays.json['relay_subset'][r]['fingerprint']: None}) %} {% endfor %} {% endif %} {% endfor %}
FamilyBandwidthBandwidthContactExit CountExit CountMiddle CountMiddle CountFirst SeenFirst Seen
{{ k|escape }} {{ obs_bandwidth }}{{ v['contact']|truncate(50)|escape }}none{{ v['exit_count'] }} {{ v['middle_count'] }} {{ v['first_seen'].split(' ', 1)[0]|escape }}
{% endblock %}