⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stat.cpp

📁 sipp is sip protocal testing tool.
💻 CPP
📖 第 1 页 / 共 4 页
字号:
  DISPLAY_CROSS_LINE ();  for (int i = 0; i < MAX_RTD_INFO_LENGTH; i++) {    char s[20];    if (M_counters[CPT_C_NbOfCallUsedForAverageResponseTime + i] == 0) {      continue;    }    sprintf(s, "Response Time %d", i + 1);    DISPLAY_TXT_COL (s,	msToHHMMSSmmm( M_counters [CPT_PD_AverageResponseTime + i] ),	msToHHMMSSmmm( M_counters [CPT_C_AverageResponseTime + i] ));  }  DISPLAY_TXT_COL ("Call Length",                    msToHHMMSSmmm( M_counters [CPT_PD_AverageCallLength] ),                    msToHHMMSSmmm( M_counters [CPT_C_AverageCallLength] ));}void CStat::displayRepartition (FILE *f){  DISPLAY_INFO("Average Response Time Repartition");  displayRepartition(f,                     M_ResponseTimeRepartition[0],                      M_SizeOfResponseTimeRepartition);  DISPLAY_INFO("Average Call Length Repartition");  displayRepartition(f,                     M_CallLengthRepartition,                      M_SizeOfCallLengthRepartition);}void CStat::displaySecondaryRepartition (FILE *f, int which){  DISPLAY_INFO("Average Response Time Repartition");  displayRepartition(f,                     M_ResponseTimeRepartition[which],                     M_SizeOfResponseTimeRepartition);}void CStat::dumpData (){  long   localElapsedTime, globalElapsedTime ;  struct timeval currentTime;  float  averageCallRate;  float  realInstantCallRate;  unsigned long numberOfCall;  // computing the real call rate  GET_TIME (&currentTime);  globalElapsedTime   = computeDiffTimeInMs (&currentTime, &M_startTime);  localElapsedTime    = computeDiffTimeInMs (&currentTime, &M_plStartTime);  // the call rate is for all the call : incoming and outgoing  numberOfCall        = (M_counters[CPT_C_IncomingCallCreated] +                          M_counters[CPT_C_OutgoingCallCreated]);  averageCallRate     = (globalElapsedTime > 0 ?                          1000*(float)numberOfCall/(float)globalElapsedTime :                          0.0);  numberOfCall        = (M_counters[CPT_PL_IncomingCallCreated] +                          M_counters[CPT_PL_OutgoingCallCreated]);  realInstantCallRate = (localElapsedTime  > 0 ?                         1000*(float)numberOfCall / (float)localElapsedTime :                         0.0);  if(M_outputStream == NULL) {    // if the file is still not opened, we opened it now    M_outputStream = new ofstream(M_fileName);    M_headerAlreadyDisplayed = false;        if(M_outputStream == NULL) {      cerr << "Unable to open stat file '" << M_fileName << "' !" << endl;      exit(EXIT_FATAL_ERROR);    }#ifndef __osf__    if(!M_outputStream->is_open())      {        cerr << "Unable to open stat file '" << M_fileName << "' !" << endl;        exit(EXIT_FATAL_ERROR);      }#endif  }  if(M_headerAlreadyDisplayed == false) {    // header - it's dump in file only one time at the beginning of the file    (*M_outputStream) << "StartTime" << stat_delimiter                      << "LastResetTime" << stat_delimiter                      << "CurrentTime" << stat_delimiter                      << "ElapsedTime(P)" << stat_delimiter                      << "ElapsedTime(C)" << stat_delimiter                      << "CallRate(P)" << stat_delimiter                      << "CallRate(C)" << stat_delimiter                      << "IncomingCall(P)" << stat_delimiter                      << "IncomingCall(C)" << stat_delimiter                      << "OutgoingCall(P)" << stat_delimiter                      << "OutgoingCall(C)" << stat_delimiter                      << "TotalCallCreated" << stat_delimiter                      << "CurrentCall" << stat_delimiter                      << "SuccessfulCall(P)" << stat_delimiter                      << "SuccessfulCall(C)" << stat_delimiter                      << "FailedCall(P)" << stat_delimiter                      << "FailedCall(C)" << stat_delimiter                      << "FailedCannotSendMessage(P)" << stat_delimiter                      << "FailedCannotSendMessage(C)" << stat_delimiter                      << "FailedMaxUDPRetrans(P)" << stat_delimiter                      << "FailedMaxUDPRetrans(C)" << stat_delimiter                      << "FailedUnexpectedMessage(P)" << stat_delimiter                      << "FailedUnexpectedMessage(C)" << stat_delimiter                      << "FailedCallRejected(P)" << stat_delimiter                      << "FailedCallRejected(C)" << stat_delimiter                      << "FailedCmdNotSent(P)" << stat_delimiter                      << "FailedCmdNotSent(C)" << stat_delimiter                      << "FailedRegexpDoesntMatch(P)" << stat_delimiter                      << "FailedRegexpDoesntMatch(C)" << stat_delimiter                      << "FailedRegexpHdrNotFound(P)" << stat_delimiter                      << "FailedRegexpHdrNotFound(C)" << stat_delimiter                      << "FailedOutboundCongestion(P)" << stat_delimiter                      << "FailedOutboundCongestion(C)" << stat_delimiter                      << "FailedTimeoutOnRecv(P)" << stat_delimiter                      << "FailedTimeoutOnRecv(C)" << stat_delimiter                      << "OutOfCallMsgs(P)" << stat_delimiter                      << "OutOfCallMsgs(C)" << stat_delimiter                      << "Retransmissions(P)" << stat_delimiter                      << "Retransmissions(C)" << stat_delimiter                      << "AutoAnswered(P)" << stat_delimiter                      << "AutoAnswered(C)" << stat_delimiter;    for (int i = 0; i < MAX_RTD_INFO_LENGTH; i++) {      char s_P[30];      char s_C[30];      sprintf(s_P, "ResponseTime%d(P)%s", i + 1, stat_delimiter);      sprintf(s_C, "ResponseTime%d(C)%s", i + 1, stat_delimiter);      (*M_outputStream) << s_P << s_C;      sprintf(s_P, "ResponseTime%dStDev(P)%s", i + 1, stat_delimiter);      sprintf(s_C, "ResponseTime%dStDev(C)%s", i + 1, stat_delimiter);      (*M_outputStream) << s_P << s_C;    }    (*M_outputStream) << "CallLength(P)" << stat_delimiter                      << "CallLength(C)" << stat_delimiter;    (*M_outputStream) << "CallLengthStDev(P)" << stat_delimiter                      << "CallLengthStDev(C)" << stat_delimiter;    for (int i = 0; i < MAX_COUNTER; i++) {      (*M_outputStream) << "GenericCounter" << (i + 1) << "(P)" << stat_delimiter;      (*M_outputStream) << "GenericCounter" << (i + 1) << "(C)" << stat_delimiter;    }    for (int i = 0; i < MAX_RTD_INFO_LENGTH; i++) {      char s[30];      sprintf(s, "ResponseTimeRepartition%d", i + 1);      (*M_outputStream) << sRepartitionHeader(M_ResponseTimeRepartition[i],					      M_SizeOfResponseTimeRepartition,					      s);    }    (*M_outputStream) << sRepartitionHeader(M_CallLengthRepartition,                                             M_SizeOfCallLengthRepartition,                                            (char*) "CallLengthRepartition");    (*M_outputStream) << endl;    M_headerAlreadyDisplayed = true;  }    // content  (*M_outputStream) << formatTime(&M_startTime)               << stat_delimiter;  (*M_outputStream) << formatTime(&M_plStartTime)             << stat_delimiter;  (*M_outputStream) << formatTime(&currentTime)               << stat_delimiter                    << msToHHMMSS(localElapsedTime)           << stat_delimiter;  (*M_outputStream) << msToHHMMSS(globalElapsedTime)          << stat_delimiter                    << realInstantCallRate                    << stat_delimiter                    << averageCallRate                        << stat_delimiter                    << M_counters[CPT_PL_IncomingCallCreated] << stat_delimiter                    << M_counters[CPT_C_IncomingCallCreated]  << stat_delimiter                    << M_counters[CPT_PL_OutgoingCallCreated] << stat_delimiter                    << M_counters[CPT_C_OutgoingCallCreated]  << stat_delimiter                    << (M_counters[CPT_C_IncomingCallCreated]+                         M_counters[CPT_C_OutgoingCallCreated])<< stat_delimiter                    << M_counters[CPT_C_CurrentCall]          << stat_delimiter                    << M_counters[CPT_PL_SuccessfulCall]      << stat_delimiter                    << M_counters[CPT_C_SuccessfulCall]       << stat_delimiter                    << M_counters[CPT_PL_FailedCall]          << stat_delimiter                    << M_counters[CPT_C_FailedCall]           << stat_delimiter                    << M_counters[CPT_PL_FailedCallCannotSendMessage]   << stat_delimiter                    << M_counters[CPT_C_FailedCallCannotSendMessage]    << stat_delimiter                    << M_counters[CPT_PL_FailedCallMaxUdpRetrans]       << stat_delimiter                    << M_counters[CPT_C_FailedCallMaxUdpRetrans     ]   << stat_delimiter                    << M_counters[CPT_PL_FailedCallUnexpectedMessage]   << stat_delimiter                    << M_counters[CPT_C_FailedCallUnexpectedMessage]    << stat_delimiter                    << M_counters[CPT_PL_FailedCallCallRejected]        << stat_delimiter                    << M_counters[CPT_C_FailedCallCallRejected]         << stat_delimiter                    << M_counters[CPT_PL_FailedCallCmdNotSent]          << stat_delimiter                    << M_counters[CPT_C_FailedCallCmdNotSent]           << stat_delimiter                    << M_counters[CPT_PL_FailedCallRegexpDoesntMatch]   << stat_delimiter                    << M_counters[CPT_C_FailedCallRegexpDoesntMatch]    << stat_delimiter                    << M_counters[CPT_PL_FailedCallRegexpHdrNotFound]   << stat_delimiter                    << M_counters[CPT_C_FailedCallRegexpHdrNotFound]    << stat_delimiter                    << M_counters[CPT_PL_FailedOutboundCongestion]      << stat_delimiter                    << M_counters[CPT_C_FailedOutboundCongestion]       << stat_delimiter                    << M_counters[CPT_PL_FailedTimeoutOnRecv]           << stat_delimiter                    << M_counters[CPT_C_FailedTimeoutOnRecv]            << stat_delimiter                    << M_counters[CPT_PL_OutOfCallMsgs]                 << stat_delimiter                    << M_counters[CPT_C_OutOfCallMsgs]                  << stat_delimiter                    << M_counters[CPT_PL_Retransmissions]               << stat_delimiter                    << M_counters[CPT_C_Retransmissions]                << stat_delimiter                    << M_counters[CPT_PL_AutoAnswered]                  << stat_delimiter                    << M_counters[CPT_C_AutoAnswered]                   << stat_delimiter;  // SF917289 << M_counters[CPT_C_UnexpectedMessage]    << stat_delimiter;  for (int i = 0; i < MAX_RTD_INFO_LENGTH; i++) {    (*M_outputStream)       << msToHHMMSSmmm( M_counters [CPT_PL_AverageResponseTime + i] ) << stat_delimiter;    (*M_outputStream)       << msToHHMMSSmmm( M_counters [CPT_C_AverageResponseTime  + i] ) << stat_delimiter;    (*M_outputStream)      << msToHHMMSSmmm( computeStdev((E_CounterName)(CPT_PL_AverageResponseTime + i),				     (E_CounterName)(CPT_PL_NbOfCallUsedForAverageResponseTime + i),				     (E_CounterName)(CPT_PL_AverageResponseTime_Squares + i)) ) << stat_delimiter;    (*M_outputStream)      << msToHHMMSSmmm( computeStdev((E_CounterName)(CPT_C_AverageResponseTime + i),				     (E_CounterName)(CPT_C_NbOfCallUsedForAverageResponseTime + i),				     (E_CounterName)(CPT_C_AverageResponseTime_Squares + i)) ) << stat_delimiter;  }  (*M_outputStream)     << msToHHMMSSmmm( M_counters [CPT_PL_AverageCallLength  ] ) << stat_delimiter;  (*M_outputStream)     << msToHHMMSSmmm( M_counters [CPT_C_AverageCallLength   ] ) << stat_delimiter;  (*M_outputStream)    << msToHHMMSSmmm( computeStdev(CPT_PL_AverageCallLength,				   CPT_PL_NbOfCallUsedForAverageCallLength,				   CPT_PL_AverageCallLength_Squares )) << stat_delimiter;  (*M_outputStream)    << msToHHMMSSmmm( computeStdev(CPT_C_AverageCallLength,				   CPT_C_NbOfCallUsedForAverageCallLength,				   CPT_C_AverageCallLength_Squares )) << stat_delimiter;  for (int i = 0; i < MAX_COUNTER; i++) {    (*M_outputStream) << M_counters[CPT_PL_Generic + i] << stat_delimiter;    (*M_outputStream) << M_counters[CPT_C_Generic + i] << stat_delimiter;  }  for (int i = 0; i < MAX_RTD_INFO_LENGTH; i++) {    (*M_outputStream)       << sRepartitionInfo(M_ResponseTimeRepartition[i],                           M_SizeOfResponseTimeRepartition);  }  (*M_outputStream)     << sRepartitionInfo(M_CallLengthRepartition,                         M_SizeOfCallLengthRepartition);  (*M_outputStream) << endl;  // flushing the output file to let the tail -f working !  (*M_outputStream).flush();} /* end of logData () */void CStat::dumpDataRtt (){  int L_i ;  if(M_outputStreamRtt == NULL) {    // if the file is still not opened, we opened it now    M_outputStreamRtt = new ofstream(M_fileNameRtt);    M_headerAlreadyDisplayedRtt = false;        if(M_outputStreamRtt == NULL) {      cerr << "Unable to open rtt file '" << M_fileNameRtt << "' !" << endl;      exit(EXIT_FATAL_ERROR);    }#ifndef __osf__    if(!M_outputStreamRtt->is_open())      {        cerr << "Unable to open rtt file '" << M_fileNameRtt << "' !" << endl;        exit(EXIT_FATAL_ERROR);      }#endif  }    if(M_headerAlreadyDisplayedRtt == false) {    (*M_outputStreamRtt) << "Date_ms;"      << "response_time_ms;";        (*M_outputStreamRtt) << endl;    M_headerAlreadyDisplayedRtt = true;  }  for (L_i = 0; L_i < M_counterDumpRespTime ; L_i ++) {    (*M_outputStreamRtt) <<  M_dumpRespTime[L_i].date   << stat_delimiter ;    (*M_outputStreamRtt) <<  M_dumpRespTime[L_i].rtt   << stat_delimiter ;    M_dumpRespTime[L_i].date = 0.0;    M_dumpRespTime[L_i].rtt = 0.0;    (*M_outputStreamRtt) << endl;    (*M_outputStreamRtt).flush();  }        // flushing the output file  (*M_outputStreamRtt).flush();          M_counterDumpRespTime = 0;}/* Time Gestion */char* CStat::msToHHMMSS (unsigned long P_ms){  static char L_time [TIME_LENGTH];  unsigned long hh, mm, ss;          P_ms = P_ms / 1000;  hh = P_ms / 3600;  mm = (P_ms - hh * 3600) / 60;  ss = P_ms - (hh * 3600) - (mm * 60);  sprintf (L_time, "%2.2d:%2.2d:%2.2d", hh, mm, ss);  return (L_time);} /* end of msToHHMMSS */char* CStat::msToHHMMSSmmm (unsigned long P_ms){  static char L_time [TIME_LENGTH];  unsigned long sec, hh, mm, ss, mmm;  sec  = P_ms / 1000;  hh   = sec / 3600;  mm   = (sec - hh * 3600) / 60;  ss   = sec - (hh * 3600) - (mm * 60);  mmm  = P_ms - (hh * 3600000) - (mm * 60000) - (ss*1000);  sprintf (L_time, "%2.2d:%2.2d:%2.2d:%3.3d", hh, mm, ss, mmm);  return (L_time);} /* end of msToHHMMSS */char* CStat::formatTime (struct timeval* P_tv){  static char L_time [TIME_LENGTH];  struct tm * L_currentDate;  // Get the current date and time  L_currentDate = localtime ((const time_t *)&P_tv->tv_sec);  // Format the time  if (L_currentDate == NULL)    {      memset (L_time, 0, TIME_LENGTH);    }   else    {      // SF917230 sprintf(L_time, "%4.4d-%2.2d-%2.2d %2.2d:%2.2d:%2.2d:%3.3d",       sprintf(L_time, "%4.4d-%2.2d-%2.2d %2.2d:%2.2d:%2.2d",               L_currentDate->tm_year + 1900,              L_currentDate->tm_mon + 1,              L_currentDate->tm_mday,              L_currentDate->tm_hour,              L_currentDate->tm_min,              L_currentDate->tm_sec);      // SF917230 (int) (P_tv->tv_usec)/1000);    }  return (L_time);} /* end of formatTime */long CStat::computeDiffTimeInMs (struct timeval* tf, struct timeval* ti){  long v1, v2;  v1 = tf->tv_sec - ti->tv_sec;  v2 = tf->tv_usec - ti->tv_usec;  if (v2 < 0) v2 += 1000000, v1--;  return (v1*1000 + v2/1000);}CStat* CStat::M_instance = NULL;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -