コード例 #1
0
ファイル: models.py プロジェクト: LACNIC/natmeter
    def get_v4_nat_percentage(self):
        """
        :return: NAT % (percentage) for NAT 44
        """

        from app.caching.caching import cache as custom_cache
        from management.commands.set_caches import get_announcements
        announcements = custom_cache.get_or_set(
            custom_cache.keys.announcements,
            call=get_announcements
        )

        v4 = self.get_v4_results()

        # weigh by country
        total_region_ips = 0
        total_region_natted_ips = 0
        ccs = ['BB', 'KY', 'CU', 'DM', 'DO', 'GD', 'GP', 'HT', 'JM', 'BZ', 'AW', 'BS', 'SV', 'GT', 'HN', 'AR', 'BO',
               'BR', 'CL', 'GY', 'GF', 'EC', 'CO', 'LC', 'VC', 'TT', 'TC', 'VG', 'VI', 'MX', 'MS', 'PR', 'NI', 'PA',
               'PE', 'VE', 'UY', 'SR', 'PY', 'AI', 'AG', 'MQ', 'KN', 'CR',
               'FK']  # list(set([s.get_country() for s in v4]))  # unique countries only
        for cc in ccs:  # TODO only lac announcements
            if cc not in ccs:
                continue

            cc_msms = [s for s in v4 if s.get_country() == cc]
            cc_msms_natted = [s for s in cc_msms if s.is_natted(protocol=4)]
            if len(cc_msms_natted) == 0:
                continue

            adv = int(announcements[cc])  # announced prefixes
            cc_natted_ratio = 1.0 * len(cc_msms_natted) / len(cc_msms)
            adv_natted_ips = adv * cc_natted_ratio
            total_region_ips += adv
            total_region_natted_ips += adv_natted_ips

        return 100.0 * total_region_natted_ips / total_region_ips
コード例 #2
0
ファイル: views.py プロジェクト: LACNIC/natmeter
def charts(request):
    """
    :param request:
    :return:
    """

    v6_avg_cached = custom_cache.get_or_set(custom_cache.keys.v6_avg, call=StunMeasurement.objects.v6_count_avg)
    v4_avg_cached = custom_cache.get_or_set(custom_cache.keys.v4_avg, call=StunMeasurement.objects.v4_count_avg)
    v6_max_cached = custom_cache.get_or_set(custom_cache.keys.v6_max, call=StunMeasurement.objects.v6_count_max)
    v4_max_cached = custom_cache.get_or_set(custom_cache.keys.v4_max, call=StunMeasurement.objects.v4_count_max)
    all_nat_cached = custom_cache.get_or_set(custom_cache.keys.all_nat, call=StunMeasurement.objects.nat_stats)
    v4_nat_cached = custom_cache.get_or_set(custom_cache.keys.v4_nat, call=StunMeasurement.objects.get_v4_nat_percentage)
    v6_nat_cached = custom_cache.get_or_set(custom_cache.keys.v6_nat, call=StunMeasurement.objects.get_v6_nat_percentage)
    v6_hosts_with_v4_capacity_cached = custom_cache.get_or_set(custom_cache.keys.v6_with_v4_capacity, call=StunMeasurement.objects.get_v6_hosts_with_v4_capability_percentage)
    dualstack_cached = custom_cache.get_or_set(custom_cache.keys.dualstack, call=StunMeasurement.objects.get_dualstack_percentage)
    is_npt_cached = custom_cache.get_or_set(custom_cache.keys.npt, call=StunMeasurement.objects.get_npt_percentage)
    nat_pressure_cached = custom_cache.get_or_set(custom_cache.keys.nat_pressure, call=StunMeasurement.objects.get_nat_time_pressure)
    country_participation_counter_cached = custom_cache.get_or_set(custom_cache.keys.country_participation, call=StunMeasurement.objects.get_country_participation)

    # Country participation chart

    total = sum(country_participation_counter_cached.values())
    most_common = country_participation_counter_cached.most_common(n=5)
    country_participation_top = [(p[0], 1.0 * p[1]) for p in most_common]
    country_participation_top.append(
        ("Others", 1.0 * (total - sum(p[1] for p in most_common)))
    )  # Others
    data = dict(
        data=json.dumps([[p[0] for p in country_participation_top], [p[1] for p in country_participation_top]]),
        divId="country-participation",
        labels=json.dumps(["Horas hasta ver un nuevo prefijo"]),
        kind='PieChart',
        colors=json.dumps(['#C53425', '#B21100', '#990F00', '#7F0C00', '#660A00', '#4C0700']),
        xAxis='string'
    )
    country_participation_chart = requests.post("https://charts.dev.lacnic.net/code/", data=data).text

    # NAT pressure chart

    hours = [int(1.0 * dt.seconds / (60 * 60)) for dt in nat_pressure_cached]
    data = dict(
        data=json.dumps(list(hours)),
        divId="div-id",
        labels=json.dumps(["Horas hasta ver un nuevo prefijo"]),
        colors=json.dumps(['#c53526']),
    )
    nat_pressure_chart = requests.post("https://charts.dev.lacnic.net/hist/code/", data=data).text

    ctx = RequestContext(
        request,
        {
            "v6_avg": v6_avg_cached,
            "v4_avg": v4_avg_cached,
            "v6_max": v6_max_cached,
            "v4_max": v4_max_cached,
            "all_nat": all_nat_cached,
            "v4_nat": v4_nat_cached,
            "v6_nat": v6_nat_cached,
            "v6_with_v4_capacity": v6_hosts_with_v4_capacity_cached,
            "dualstack": dualstack_cached,
            "npt": is_npt_cached,
            "hours": Counter(hours).most_common(n=1)[0][0],
            "nat_pressure_chart": nat_pressure_chart,
            "country_participation_chart": country_participation_chart
        }
    )

    return render_to_response("charts.html", ctx)