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

📄 stat.cpp

📁 学习sip协议的好工具
💻 CPP
📖 第 1 页 / 共 3 页
字号:
/* *  This program is free software; you can redistribute it and/or modify *  it under the terms of the GNU General Public License as published by *  the Free Software Foundation; either version 2 of the License, or *  (at your option) any later version. * *  This program is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *  GNU General Public License for more details. * *  You should have received a copy of the GNU General Public License *  along with this program; if not, write to the Free Software *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA * *  Authors : Benjamin GAUTHIER - 24 Mar 2004 *            Joseph BANINO *            Olivier JACQUES *            Richard GAYRAUD *            From Hewlett Packard Company. *            */#include <iostream>#include <fstream>#include "sipp.hpp"#include "screen.hpp"/*** Local definitions (macros)*//*** Warning! All DISPLAY_ macros must be called where f FILE is**          defined. This is to allow printing to stdout or a file. */#define DISPLAY_LINE()\  fprintf(f," ------------------------------------------------------------------------------ \r\n")#define DISPLAY_DLINE()\  fprintf(f,"================================================================================\r\n")#define DISPLAY_CROSS_LINE()\  fprintf(f,"-------------------------+---------------------------+--------------------------\r\n")#define DISPLAY_HEADER()\  fprintf(f,"  Counter Name           | Periodic value            | Cumulative value\r\n")#define DISPLAY_TXT_COL(T1, V1, V2)\  fprintf(f,"  %-22.22s | %-25.25s |", T1, V1); fprintf(f," %-24.24s \r\n", V2)#define DISPLAY_VAL_RATEF_COL(T1, V1, V2)\  fprintf(f,"  %-22.22s | %8.3f cps              | %8.3f cps             \r\n", T1, V1, V2)#define DISPLAY_2VAL(T1, V1, V2)\  fprintf(f,"  %-22.22s | %8d                  | %8d                 \r\n", T1, V1, V2)#define DISPLAY_CUMUL(T1, V1)\  fprintf(f,"  %-22.22s |                           | %8d                 \r\n", T1, V1)#define DISPLAY_PERIO(T1, V1)\  fprintf(f,"  %-22.22s | %8d                  |                          \r\n", T1, V1)#define DISPLAY_VALF(T1, V1)\  fprintf(f,"  %-22.22s | %8.3f ms                                          \r\n", T1, V1)#define DISPLAY_VAL_RATEF(T1, V1)\  fprintf(f,"  %-22.22s | %8.3f cps                                         \r\n", T1, V1)#define DISPLAY_VAL_RATE(T1, V1)\  fprintf(f,"  %-22.22s | %8d cps                                         \r\n", T1, V1)#define DISPLAY_VAL(T1, V1)\  fprintf(f,"  %-22.22s : %8d                                             \r\n", T1, V1)#define DISPLAY_2VALF(T1, V1, T2, V2)\  fprintf(f,"  %-22.22s : %8.2f  | %-7.7s : %8.2f                       \r\n", T1, V1, T2, V2)#define DISPLAY_3VAL(T1, V1, T2, V2, T3, V3)\  fprintf(f,"  %-22.22s : %8d  | %-7.7s : %8d  | %-12.12s : %5d \r\n", T1, V1, T2, V2, T3, V3)#define DISPLAY_3VALF(T1, V1, T2, V2, T3, V3)\  fprintf(f,"  %-22.22s : %8.3f  | %-7.7s : %8.3f  | %-12.12s : %5.1f \r\n", T1, V1, T2, V2, T3, V3)#define DISPLAY_TXT(T1, V1)\  fprintf(f,"  %-22.22s | %-52.52s \r\n", T1, V1)#define DISPLAY_INFO(T1)\  fprintf(f,"  %-77.77s \r\n", T1)#define DISPLAY_REPART(T1, T2, V1)\  fprintf(f,"    %8d ms <= n <  %8d ms : %10d  %-29.29s \r\n", T1, T2, V1, "")#define DISPLAY_LAST_REPART(T1, V1)\  fprintf(f,"    %14.14s n >= %8d ms : %10d  %-29.29s \r\n", "", T1, V1, "")#define RESET_COUNTERS(PT)\  memset (PT, 0, CStat::E_NB_COUNTER * sizeof(unsigned long))#define RESET_PD_COUNTERS(PT)                          \{                                                      \  int i;                                               \  for (i=CStat::CPT_PD_IncomingCallCreated;            \       i<=CStat::CPT_PD_AutoAnswered;                  \       i++)                                            \    PT[i] = (unsigned long) 0;                         \}#define RESET_PL_COUNTERS(PT)                          \{                                                      \  int i;                                               \  for (i=CStat::CPT_PL_IncomingCallCreated;            \       i<=CStat::CPT_PL_AutoAnswered;                  \       i++)                                            \    PT[i] = (unsigned long) 0;                         \}/*  __________________________________________________________________________  C L A S S    CS t a t  __________________________________________________________________________*/CStat* CStat::instance(){  if ( M_instance == NULL ) M_instance = new CStat();  return M_instance;}void CStat::close (){  if (M_ResponseTimeRepartition != NULL)    delete [] M_ResponseTimeRepartition;  if (M_CallLengthRepartition != NULL)    delete [] M_CallLengthRepartition;  if(M_outputStream != NULL)    {      M_outputStream->close();      delete M_outputStream;    }  if(M_fileName != NULL)    delete [] M_fileName;  M_SizeOfResponseTimeRepartition = 0;  M_SizeOfCallLengthRepartition   = 0;  M_CallLengthRepartition         = NULL;  M_fileName                      = NULL;  M_ResponseTimeRepartition       = NULL;  M_outputStream                  = NULL;  // On last position  if (M_instance != NULL)    delete M_instance;  M_instance                      = NULL;}int CStat::init () {  // reset of all counter  RESET_COUNTERS(M_counters);  GET_TIME (&M_startTime);  memcpy   (&M_pdStartTime, &M_startTime, sizeof (struct timeval));  memcpy   (&M_plStartTime, &M_startTime, sizeof (struct timeval));  M_outputStream = NULL;  M_headerAlreadyDisplayed = false;  return(1);}int CStat::isWellFormed(char * P_listeStr,                         int * nombre){  char * ptr = P_listeStr;  int sizeOf;  bool isANumber;  (*nombre) = 0;   sizeOf = strlen(P_listeStr);  // getting the number   if(sizeOf > 0)    {      // is the string well formed ? [0-9] [,]      isANumber = false;      for(int i=0; i<=sizeOf; i++)        {          switch(ptr[i])            {            case ',':              if(isANumber == false)                {                     return(0);                }              else                {                  (*nombre)++;                             }               isANumber = false;              break;            case '0':            case '1':            case '2':            case '3':            case '4':            case '5':            case '6':            case '7':            case '8':            case '9':              isANumber = true;              break;            case '\t':            case ' ' :              break;            case '\0':              if(isANumber == false)                {                     return(0);                }              else                {                  (*nombre)++;                }               break;            default:              return(0);            }        } // enf for    }  return(1);}int CStat::createIntegerTable(char * P_listeStr,                               unsigned int ** listeInteger,                               int * sizeOfList){  int nb=0;  char * ptr = P_listeStr;  char * ptr_prev = P_listeStr;  unsigned int current_int;  int sizeOf;  bool isANumber;   if(isWellFormed(P_listeStr, sizeOfList) == 1)    {      (*listeInteger) = new unsigned int[(*sizeOfList)];      while((*ptr) != ('\0'))        {          if((*ptr) == ',')            {              sscanf(ptr_prev, "%u", &current_int);              if (nb<(*sizeOfList))                (*listeInteger)[nb] = current_int;              nb++;              ptr_prev = ptr+1;            }          ptr++;        }      // on lit le dernier      sscanf(ptr_prev, "%u", &current_int);       if (nb<(*sizeOfList))        (*listeInteger)[nb] = current_int;      nb++;      return(1);    }  return(0);}void CStat::setFileName(char * P_name, char * P_extension){  int sizeOf, sizeOfExtension;   if(P_name != NULL)     {       // +6 for PID      sizeOf = strlen(P_name) + 6;      if(sizeOf > 0)        {          if(P_extension != NULL)            {               sizeOfExtension = strlen(P_extension);               if(sizeOfExtension > 0)                {                  if(M_fileName != NULL)                    delete [] M_fileName;                  sizeOf += sizeOfExtension;                  M_fileName = new char[sizeOf+1];                  sprintf(M_fileName, "%d_", getpid());                   strcat(M_fileName, P_name);                  strcat(M_fileName, P_extension);                }              else                {                  if(M_fileName != NULL)                    delete [] M_fileName;                  sizeOf += strlen(DEFAULT_EXTENSION);                  M_fileName = new char[sizeOf+1];                  sprintf(M_fileName, "%d_", getpid());                   strcat(M_fileName, P_name);                  strcat(M_fileName, DEFAULT_EXTENSION);                }            }          else            {              if(M_fileName != NULL)                delete [] M_fileName;              sizeOf += strlen(DEFAULT_EXTENSION);              M_fileName = new char[sizeOf+1];              sprintf(M_fileName, "%d_", getpid());               strcat(M_fileName, P_name);              strcat(M_fileName, DEFAULT_EXTENSION);            }        }      else        {          cerr << "new file name length is null - "                    << "keeping the default filename : "                    << DEFAULT_FILE_NAME << endl;        }    }  else    {      cerr << "new file name is NULL ! - keeping the default filename : "                 << DEFAULT_FILE_NAME << endl;    }}void CStat::setFileName(char * P_name){  int sizeOf, sizeOfExtension;   if(P_name != NULL)     {       sizeOf = strlen(P_name);      if(sizeOf > 0)        {          if(M_fileName != NULL)            delete [] M_fileName;          M_fileName = new char[sizeOf+1];          strcpy(M_fileName, P_name);        }      else        {          cerr << "new file name length is null - "            "keeping the default filename : "                    << DEFAULT_FILE_NAME << endl;        }    }  else    {      cerr << "new file name is NULL ! - keeping the default filename : "                 << DEFAULT_FILE_NAME << endl;    }}void CStat::setRepartitionCallLength(char * P_listeStr){  unsigned int * listeInteger;  int sizeOfListe;  if(createIntegerTable(P_listeStr, &listeInteger, &sizeOfListe) == 1) {    initRepartition(listeInteger,                     sizeOfListe,                     &M_CallLengthRepartition,                     &M_SizeOfCallLengthRepartition);  } else {    M_CallLengthRepartition         = NULL;    M_SizeOfCallLengthRepartition   = 0;  }  delete [] listeInteger;  listeInteger = NULL;}void CStat::setRepartitionResponseTime (char * P_listeStr){  unsigned int * listeInteger;  int sizeOfListe;    if(createIntegerTable(P_listeStr, &listeInteger, &sizeOfListe) == 1) {    initRepartition(listeInteger,                     sizeOfListe,                     &M_ResponseTimeRepartition,                     &M_SizeOfResponseTimeRepartition);  } else {    M_CallLengthRepartition         = NULL;    M_SizeOfCallLengthRepartition   = 0;  }  delete [] listeInteger;  listeInteger = NULL;} void CStat::setRepartitionCallLength(unsigned int* repartition,                                      int nombre){  initRepartition(repartition,                   nombre,                   &M_CallLengthRepartition,                   &M_SizeOfCallLengthRepartition);} void CStat::setRepartitionResponseTime(unsigned int* repartition,                                        int nombre){

⌨️ 快捷键说明

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