step_instance_base::step_instance_base( context_base & graph, int priority, scheduler_i & sched ) : schedulable( priority, sched ), m_context( graph ), m_getList(), m_timer( NULL ) { m_id = m_context.incrementStepInstanceCount(); LOG_STATS( m_context.stats(), step_created() ); }
void OsclSocketMethod::Run() { ADD_STATS(iSocketFxn, EOsclSocket_RequestAO_Timeout); //The socket request has timed out. MethodDone(); PVLOGGER_LOGMSG(PVLOGMSG_INST_MLDBG, iContainer.iLogger, PVLOGMSG_DEBUG , (0, "OsclSocket: %s %s ", TPVSocketFxnStr[iSocketFxn], TPVSocketEventStr[EPVSocketTimeout])); LOG_STATS(iSocketFxn); CLEAR_STATS(iSocketFxn); iContainer.iObserver->HandleSocketEvent(iContainer.iId, iSocketFxn, EPVSocketTimeout, 0); }
void OsclSocketRequestAO::Run() { //The server has completed the socket request. RequestDone(); // Check the request completion status switch (Status()) { case OSCL_REQUEST_ERR_NONE: ADD_STATS(iContainer.iSocketFxn, EOsclSocket_RequestAO_Success); Success(); LOGINFOMED((0, "OsclSocket(0x%x): %s %s ", SocketI(), TPVSocketFxnStr[iContainer.iSocketFxn], TPVSocketEventStr[EPVSocketSuccess])); LOG_STATS(iContainer.iSocketFxn); CLEAR_STATS(iContainer.iSocketFxn); SocketObserver()->HandleSocketEvent(Id(), iContainer.iSocketFxn, EPVSocketSuccess, 0); break; case OSCL_REQUEST_ERR_CANCEL: ADD_STATS(iContainer.iSocketFxn, EOsclSocket_RequestAO_Canceled); //Request was cancelled, either due to an API call or due to the //socket server shutting down before completing the operation. LOGINFOMED((0, "OsclSocket(0x%x): %s %s ", SocketI(), TPVSocketFxnStr[iContainer.iSocketFxn], TPVSocketEventStr[EPVSocketCancel])); LOG_STATS(iContainer.iSocketFxn); CLEAR_STATS(iContainer.iSocketFxn); SocketObserver()->HandleSocketEvent(Id(), iContainer.iSocketFxn, EPVSocketCancel, 0); break; default: ADD_STATS(iContainer.iSocketFxn, EOsclSocket_RequestAO_Error); //Some error. LOGINFOMED((0, "OsclSocket(0x%x): %s %s %d", SocketI(), TPVSocketFxnStr[iContainer.iSocketFxn], TPVSocketEventStr[EPVSocketFailure], GetSocketError())); LOG_STATS(iContainer.iSocketFxn); CLEAR_STATS(iContainer.iSocketFxn); SocketObserver()->HandleSocketEvent(Id(), iContainer.iSocketFxn, EPVSocketFailure, GetSocketError()); break; } }
/* called to setup the UL stack statistics/logging */ void ci_tcp_stats_init(ci_netif* ni, ci_tcp_state* ts) { int val; ci_assert( ni && ts ); LOG_STATS( ci_log("%s(%p, %p)", __FUNCTION__, ni, ts )); ts->stats_fmt = CI_IP_STATS_OUTPUT_DEFAULT; val = CI_TCONST_STATS; /* mS */ NI_CONF(ni).tconst_stats = val ? ci_tcp_time_ms2ticks(ni, val) : 0; LOG_STATS( ci_log("Statistics: %u ticks, %dmS, (format:%s)", NI_CONF(ni).tconst_stats, val, ts->stats_fmt ? "Text" : "XML" )); ci_tcp_stats_init_data( &ts->stats_snapshot ); ci_tcp_stats_init_data( &ts->stats_cumulative ); /* Setting the timeout to -1 implies collection through sockopt */ if( val ) ci_tcp_stats_action( ni, ts, CI_IP_STATS_START, CI_IP_STATS_OUTPUT_DEFAULT, NULL, NULL ); }
/*! Manage the statistics timer. * If the time is 0 the timer will be killed. * If the value is other than 0 then: * If the timer is pending it will be modified * else it will be set */ ci_inline void ci_tcp_stats_handle_timer(ci_netif* ni, ci_tcp_state* ts, ci_iptime_t timeout) { ci_ip_timer* it; ci_assert( ni && ts ); it = &ts->stats_tid; LOG_STATS( ci_log( "%s( %p, %p, %d)", __FUNCTION__, ni, ts, (int)timeout)); if( ci_ip_timer_pending(ni, it ) ) { if( timeout == 0 ) ci_ip_timer_clear(ni, it ); else ci_ip_timer_modify(ni, it, ci_tcp_time_now(ni)+timeout); } else { if( timeout != 0 ) ci_ip_timer_set(ni, it, ci_tcp_time_now(ni)+timeout); } }
/* Called when the statistics report timer fires OR at start/end of * the session or for a manual update through a sockopt * \param ni netif context * \param ts TCP state context * \param reason Action to perform * \param type Type of output (0=default, 1 = text, 2 = XML) * \param ptr Pointer to the memory where statistics is put on STATS_GET * action. It has no sense with other actions and should be set to * NULL. * \param which Type of statistics to report (TCP, netif or both) */ extern void ci_tcp_stats_action(__NI_STRUCT__ *ni, __STATE_STRUCT__ *ts, ci_ip_stats_action_type action, ci_ip_stats_output_fmt fmt, void *data, socklen_t *size) { ci_iptime_t it; ci_assert(ni); ci_assert( IPTIMER_STATE(ni) ); ci_assert(ts); LOG_STATS( ci_log( "%s( %p, %p, %d, %d, %p )", __FUNCTION__, ni, ts, action, fmt, data)); /* update snapshot timestamp */ ci_ip_time_get(IPTIMER_STATE(ni), &it); /* ci_ip_time_ticks2ms() is not defined in KERNEL space */ #ifndef __KERNEL__ ts->stats_snapshot.now = ci_ip_time_ticks2ms(ni, it); #endif switch (action) { case CI_IP_STATS_START: ci_tcp_stats_init_data( &ts->stats_snapshot); ci_tcp_stats_init_data( &ts->stats_cumulative); it = NI_CONF(ni).tconst_stats; ci_tcp_stats_handle_timer(ni, ts, it ); break; case CI_IP_STATS_GET: if ((data != NULL) && (size != NULL) && (*size >= 2 * sizeof(ci_ip_stats))){ /* assumed to be a valid user memory area to update */ ci_ip_sock_stats* ii = (ci_ip_sock_stats*)data; memcpy( &ii[0], &ts->stats_snapshot, sizeof(*ii) ); memcpy( &ii[1], &ts->stats_cumulative, sizeof(*ii)); *size = 2 * sizeof(ci_ip_sock_stats); } break; case CI_IP_STATS_REPORT: #if CI_CFG_SEND_STATS_TO_LOG ci_tcp_stats_report(ni, ts, ni->state->stats_fmt, NULL, 0); #else if ((data != NULL) && (size != NULL)) { *size = ci_tcp_stats_report(ni, ts, ni->state->stats_fmt, data, *size); } #endif break; case CI_IP_STATS_END: case CI_IP_STATS_FLUSH: ci_tcp_stats_update( ts ); /* Stop stats timer on CI_IP_STATS_END */ it = action != CI_IP_STATS_END ? NI_CONF(ni).tconst_stats : 0; ci_tcp_stats_handle_timer(ni, ts, it ); break; default: break; } }