wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/src/core_roam_metrics.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 02 Feb 2010 02:03:13 +0200
changeset 0 c40eb8fe8501
permissions -rw-r--r--
Revision: 201003 Kit: 201005

/*
* Copyright (c) 2006-2007 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of the License "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:  Class for storing roaming metrics.
*
*/

/*
* %version: 6 %
*/

#include "core_roam_metrics.h"
#include "core_am_tools.h"
#include "core_tools.h"
#include "am_debug.h"

// ======== MEMBER FUNCTIONS ========

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
core_roam_metrics_c::core_roam_metrics_c() :
    roam_ts_userdata_disabled_m( 0 ),
    roam_ts_userdata_enabled_m( 0 ),
    roam_ts_connect_start_m( 0 ),
    roam_ts_connect_completed_m( 0 ),
    roam_success_count_m( 0 )
    {
    clear_metrics(); 
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
core_roam_metrics_c::~core_roam_metrics_c()
    {    
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
void core_roam_metrics_c::clear_metrics()
    {
    roam_ts_userdata_disabled_m = 0;
    roam_ts_userdata_enabled_m = 0;
    roam_ts_connect_start_m = 0;
    roam_ts_connect_completed_m = 0;
    roam_success_count_m = 0;

    core_tools_c::fillz(
        &roam_attempt_count_m[0],
        sizeof ( roam_attempt_count_m ) );
    core_tools_c::fillz(
        &roam_attempt_failed_count_m[0],
        sizeof ( roam_attempt_failed_count_m ) );
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
u64_t core_roam_metrics_c::roam_ts_userdata_disabled() const
    {
    return roam_ts_userdata_disabled_m;
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//  
void core_roam_metrics_c::set_roam_ts_userdata_disabled()
    {
    roam_ts_userdata_disabled_m = core_am_tools_c::timestamp();  
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
u64_t core_roam_metrics_c::roam_ts_userdata_enabled() const
    {
    return roam_ts_userdata_enabled_m;
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//    
void core_roam_metrics_c::set_roam_ts_userdata_enabled()
    {
    roam_ts_userdata_enabled_m = core_am_tools_c::timestamp();
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
u64_t core_roam_metrics_c::roam_ts_connect_started() const
    {
    return roam_ts_connect_start_m;
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//  
void core_roam_metrics_c::set_roam_ts_connect_started()
    {
    roam_ts_connect_start_m = core_am_tools_c::timestamp();
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
u64_t core_roam_metrics_c::roam_ts_connect_completed() const
    {
    return roam_ts_connect_completed_m;
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
// 
void core_roam_metrics_c::set_roam_ts_connect_completed()
    {
    roam_ts_connect_completed_m = core_am_tools_c::timestamp();
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
u32_t core_roam_metrics_c::roam_total_delay() const
    {
    return static_cast<u64_t>( roam_ts_userdata_enabled_m - roam_ts_userdata_disabled_m );
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
u32_t core_roam_metrics_c::roam_connect_delay() const
    {
    return static_cast<u64_t>( roam_ts_connect_completed_m - roam_ts_connect_start_m );
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
u16_t core_roam_metrics_c::roam_success_count() const
    {
    return roam_success_count_m;
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
void core_roam_metrics_c::inc_roam_success_count()
    {
    ++roam_success_count_m;
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
u16_t core_roam_metrics_c::roam_attempt_count(
    core_roam_reason_e reason ) const
    {
    return roam_attempt_count_m[reason];
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
void core_roam_metrics_c::inc_roam_attempt_count(
    core_roam_reason_e reason )
    {
    ++roam_attempt_count_m[reason];
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
u16_t core_roam_metrics_c::roam_attempt_failed_count(
    core_roam_failed_reason_e reason ) const
    {
    return roam_attempt_failed_count_m[reason];
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//       
void core_roam_metrics_c::inc_roam_attempt_failed_count(
    core_roam_failed_reason_e reason )
    {
    ++roam_attempt_failed_count_m[reason];
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
void core_roam_metrics_c::trace_current_roam_metrics() const
    {
#ifdef _DEBUG
    DEBUG( "core_roam_metrics_c::next_state() - current roam metrics:" );
    DEBUG1( "core_roam_metrics_c::next_state() - last roam total delay in ms:                  %u",
    roam_total_delay() / MILLISECONDS_FROM_MICROSECONDS );
    DEBUG1( "core_roam_metrics_c::next_state() - last roam connect delay in ms:                %u",
        roam_connect_delay() / MILLISECONDS_FROM_MICROSECONDS );
    DEBUG1( "core_roam_metrics_c::next_state() - roam success count:                           %u",
        roam_success_count() );

    DEBUG1( "core_roam_metrics_c::next_state() - roam attempts due to initial connect:         %u",
        roam_attempt_count( core_roam_reason_initial_connect ) );
    DEBUG1( "core_roam_metrics_c::next_state() - roam attempts due to BSS lost:                %u",
        roam_attempt_count( core_roam_reason_bss_lost ) );
    DEBUG1( "core_roam_metrics_c::next_state() - roam attempts due to media disconnect:        %u",
        roam_attempt_count( core_roam_reason_media_disconnect ) );
    DEBUG1( "core_roam_metrics_c::next_state() - roam attempts due to signal strength:         %u",
        roam_attempt_count( core_roam_reason_signal_strength ) );
    DEBUG1( "core_roam_metrics_c::next_state() - roam attempts due to signal prediction:       %u",
        roam_attempt_count( core_roam_reason_signal_loss_prediction ) );
    DEBUG1( "core_roam_metrics_c::next_state() - roam attempts due to failed reauth:           %u",
        roam_attempt_count( core_roam_reason_failed_reauthentication ) );
    DEBUG1( "core_roam_metrics_c::next_state() - roam attempts due to directed roam request:   %u",
        roam_attempt_count( core_roam_reason_directed_roam ) );
    
    DEBUG1( "core_roam_metrics_c::next_state() - roam attempts failed due to timeout:          %u",
        roam_attempt_failed_count( core_roam_failed_reason_timeout ) );
    DEBUG1( "core_roam_metrics_c::next_state() - roam attempts failed due to no suitable ap:   %u",
        roam_attempt_failed_count( core_roam_failed_reason_no_suitable_ap ) );
    DEBUG1( "core_roam_metrics_c::next_state() - roam attempts failed due to AP's status code: %u",
        roam_attempt_failed_count( core_roam_failed_reason_ap_status_code ) );
    DEBUG1( "core_roam_metrics_c::next_state() - roam attempts failed due to EAPOL failure:    %u",
        roam_attempt_failed_count( core_roam_failed_reason_eapol_failure ) );
    DEBUG1( "core_roam_metrics_c::next_state() - roam attempts failed due to other failure:    %u",
        roam_attempt_failed_count( core_roam_failed_reason_other_failure ) );
#endif // _DEBUG    
    }