Пример #1
0
def submit_ping_results(request):
    """Called by the client to submit the results of the addresses pinged."""
    global nb_submited_requests, nb_submited_results

    client_addr = get_client_ip(request)
    logger.debug('submit_ping_results request: %s', request.json_body)

    # Check that token is valid.  Always accept it even if it is bad
    # as otherwise this would block client Also, the "bad" token is
    # probably caused by a server problem, not people trying to push
    # wrong results.
    token = request.json_body.get('token')
    nick = request.json_body.get('userid')
    uuid = request.json_body.get('uuid')

    # Store results.
    results = request.json_body.get('results')
    if results is None:
        # FB: should return 400 client error
        raise HTTPBadRequest('No "results" field.')

    results.insert(0, client_addr)
    results.append("TOKEN=" + token)
    results.append("NICK=" + nick)
    results.append("UUID=" + uuid)
    resources.store_results(results)
    resources.store_known_pignable(results)
    nb_submited_requests += 1
    nb_submited_results += len(results)

    # Update leaderboards if nick was passed.
    if nick is not None:
        resources.update_leaderboards(nick, results)

    return {'success': True}
Пример #2
0
def submit_ping_results(request):
    """Called by the client to submit the results of the addresses pinged."""
    global nb_submited_requests, nb_submited_results

    client_addr = get_client_ip(request)
    logger.debug('submit_ping_results request: %s', request.json_body)

    # Check that token is valid.  Always accept it even if it is bad
    # as otherwise this would block client Also, the "bad" token is
    # probably caused by a server problem, not people trying to push
    # wrong results.
    token = request.json_body.get('token')
    nick = request.json_body.get('userid')
    uuid = request.json_body.get('uuid')

    # Store results.
    results = request.json_body.get('results')
    if results is None:
        # FB: should return 400 client error
        raise HTTPBadRequest('No "results" field.')

    results.insert(0, client_addr)
    results.append("TOKEN=" + token)
    results.append("NICK=" + nick)
    results.append("UUID=" + uuid)
    resources.store_results(results)
    resources.store_known_pignable(results)
    nb_submited_requests += 1
    nb_submited_results += len(results)

    # Update leaderboards if nick was passed.
    if nick is not None:
        resources.update_leaderboards(nick, results)

    return {'success': True}
Пример #3
0
def submit_ping_results(request):
    """Called by the client to submit the results of the addresses pinged."""
    logger.debug('submit_ping_results request: %s', request.json_body)

    # Check that token is valid.
    token = request.json_body.get('token')
    if not resources.check_token(token):
        raise HTTPForbidden('Invalid or absent token value.')

    # Store results.
    results = request.json_body.get('results')
    if results is None:
        raise HTTPBadRequest('No "results" field.')
    resources.store_results(results)
        
    # Update leaderboards if userid was passed.
    userid = request.json_body.get('userid')
    if userid is not None:
        resources.update_leaderboards(userid, results)
        
    return {'success': True}
Пример #4
0
def get_pings(request):
    """Called by the client to get a list of addresses to ping."""
    global nb_get_pings, min_round_time
    global last_time, last_nb_get_pings, time_table_idx
    global nb_submited_requests, nb_submited_results, last_nb_submited_requests
    global nb_feedback, last_nb_feedback

    client_addr = get_client_ip(request)
    logger.debug('get_pings request client address: %s', client_addr)

    ip_addresses = resources.get_pings(client_addr)
    token = resources.get_token()
    uuid = request.json_body.get("uuid")
    nick = request.json_body.get('userid')
    info = [
        "GET_PINGS", "TOKEN=" + token, "UUID=" + uuid, "NICK=" + nick,
        ip_addresses
    ]

    resources.store_results(info)
    nb_get_pings += 1
    now = time()
    spent = now - last_time

    if spent > 5:
        removed = resources.last_clients.remove_old(now)
        #number of pings per second since the last check
        p_s = (nb_get_pings - last_nb_get_pings) / spent
        submit_s = (nb_submited_requests - last_nb_submited_requests) / spent
        feedback_s = (nb_feedback - last_nb_feedback) / spent
        ratio_pings_on_expected = p_s / expected_get_pings_process_seconds

        if ratio_pings_on_expected > 1:
            time_table_idx = min(time_table_idx + 1, len(time_table))
        elif ratio_pings_on_expected < 0.5:
            time_table_idx = max(time_table_idx - 1, 0)

        size_clients_list = len(resources.last_clients)

        min_round_time = time_table[time_table_idx]
        print >> stats, (
            "nb_get_pings=%d, new_pings=%d,"
            " time=%.2f, elapsed_time(s)=%.2f,"
            " ping_per_second=%f, ratio_pings_on_expected=%f,"
            " time_table_index=%d, min_round_time=%d,"
            " size_clients_list=%d, removed=%d,"
            " nb_submit_requests=%d, nb_submit_results=%d,"
            " submit_req_per_second=%d,"
            " nb_feedback=%d, nb_feedback_per_second=%d" %
            (nb_get_pings, nb_get_pings - last_nb_get_pings, now,
             now - last_time, p_s, ratio_pings_on_expected, time_table_idx,
             min_round_time, size_clients_list, removed, nb_submited_requests,
             nb_submited_results, submit_s, nb_feedback, feedback_s))
        stats.flush()

        last_time = now
        last_nb_get_pings = nb_get_pings
        last_nb_submited_requests = nb_submited_requests
        last_nb_feedback = nb_feedback

    return {
        'token': token,
        'pings': ip_addresses,
        'geoip': resources.get_geoip_data(ip_addresses),
        'client_geoip': resources.get_geoip_data([client_addr])[0],
        'client_ip': client_addr,
        'min_round_time': min_round_time
    }  # in seconds
Пример #5
0
def get_pings(request):
    """Called by the client to get a list of addresses to ping."""
    global nb_get_pings, min_round_time
    global last_time, last_nb_get_pings, time_table_idx
    global nb_submited_requests, nb_submited_results, last_nb_submited_requests
    global nb_feedback, last_nb_feedback

    client_addr = get_client_ip(request)
    logger.debug('get_pings request client address: %s', client_addr)

    ip_addresses = resources.get_pings(client_addr)
    token = resources.get_token()
    uuid = request.json_body.get("uuid")
    nick = request.json_body.get('userid')
    info = ["GET_PINGS", "TOKEN=" + token, "UUID=" + uuid,
            "NICK=" + nick, ip_addresses]

    resources.store_results(info)
    nb_get_pings += 1
    now = time()
    spent = now - last_time

    if spent > 5:
        removed = resources.last_clients.remove_old(now)
        #number of pings per second since the last check
        p_s = (nb_get_pings - last_nb_get_pings) / spent
        submit_s = (nb_submited_requests - last_nb_submited_requests) / spent
        feedback_s = (nb_feedback - last_nb_feedback) / spent
        ratio_pings_on_expected = p_s / expected_get_pings_process_seconds

        if ratio_pings_on_expected > 1:
            time_table_idx = min(time_table_idx + 1,
                                 len(time_table))
        elif ratio_pings_on_expected < 0.5:
            time_table_idx = max(time_table_idx - 1, 0)

        size_clients_list = len(resources.last_clients)

        min_round_time = time_table[time_table_idx]
        print >>stats, ("nb_get_pings=%d, new_pings=%d,"
                        " time=%.2f, elapsed_time(s)=%.2f,"
                        " ping_per_second=%f, ratio_pings_on_expected=%f,"
                        " time_table_index=%d, min_round_time=%d,"
                        " size_clients_list=%d, removed=%d,"
                        " nb_submit_requests=%d, nb_submit_results=%d,"
                        " submit_req_per_second=%d,"
                        " nb_feedback=%d, nb_feedback_per_second=%d"% (
                            nb_get_pings, nb_get_pings - last_nb_get_pings,
                            now, now - last_time,
                            p_s, ratio_pings_on_expected,
                            time_table_idx, min_round_time,
                            size_clients_list, removed,
                            nb_submited_requests, nb_submited_results,
                            submit_s, nb_feedback, feedback_s))
        stats.flush()

        last_time = now
        last_nb_get_pings = nb_get_pings
        last_nb_submited_requests = nb_submited_requests
        last_nb_feedback = nb_feedback

    return {'token': token,
            'pings': ip_addresses,
            'geoip': resources.get_geoip_data(ip_addresses),
            'client_geoip': resources.get_geoip_data([client_addr])[0],
            'client_ip': client_addr,
            'min_round_time': min_round_time}  # in seconds