00001
00002
00003
00004
00005
00006
00007
00008 #include "RakNetStatistics.h"
00009 #include <stdio.h>
00010 #include "BitStream.h"
00011 #include "GetTime.h"
00012 #include "RakString.h"
00013
00014 using namespace RakNet;
00015
00016
00017
00018 void RAK_DLL_EXPORT StatisticsToString( RakNetStatistics *s, char *buffer, int verbosityLevel )
00019 {
00020 if ( s == 0 )
00021 {
00022 sprintf( buffer, "stats is a NULL pointer in statsToString\n" );
00023 return ;
00024 }
00025
00026 if (verbosityLevel==0)
00027 {
00028 sprintf(buffer,
00029 "Bytes per second sent %"PRINTF_64_BIT_MODIFIER"u\n"
00030 "Bytes per second received %"PRINTF_64_BIT_MODIFIER"u\n"
00031 "Current packetloss %.0f%%\n",
00032 s->valueOverLastSecond[ACTUAL_BYTES_SENT],
00033 s->valueOverLastSecond[ACTUAL_BYTES_RECEIVED],
00034 s->packetlossLastSecond
00035 );
00036 }
00037 else if (verbosityLevel==1)
00038 {
00039 sprintf(buffer,
00040 "Actual bytes per second sent %"PRINTF_64_BIT_MODIFIER"u\n"
00041 "Actual bytes per second received %"PRINTF_64_BIT_MODIFIER"u\n"
00042 "Message bytes per second queued %"PRINTF_64_BIT_MODIFIER"u\n"
00043 "Total actual bytes sent %"PRINTF_64_BIT_MODIFIER"u\n"
00044 "Total actual bytes received %"PRINTF_64_BIT_MODIFIER"u\n"
00045 "Total message bytes queued %"PRINTF_64_BIT_MODIFIER"u\n"
00046 "Current packetloss %.0f%%\n"
00047 "Average packetloss %.0f%%\n"
00048 "Elapsed connection time in seconds %"PRINTF_64_BIT_MODIFIER"u\n",
00049 s->valueOverLastSecond[ACTUAL_BYTES_SENT],
00050 s->valueOverLastSecond[ACTUAL_BYTES_RECEIVED],
00051 s->valueOverLastSecond[USER_MESSAGE_BYTES_PUSHED],
00052 s->runningTotal[ACTUAL_BYTES_SENT],
00053 s->runningTotal[ACTUAL_BYTES_RECEIVED],
00054 s->runningTotal[USER_MESSAGE_BYTES_PUSHED],
00055 s->packetlossLastSecond,
00056 s->packetlossTotal,
00057 (uint64_t)((RakNet::GetTimeUS()-s->connectionStartTime)/1000000)
00058 );
00059
00060 if (s->BPSLimitByCongestionControl!=0)
00061 {
00062 char buff2[128];
00063 sprintf(buff2,
00064 "Send capacity %"PRINTF_64_BIT_MODIFIER"u bytes per second (%.0f%%)\n",
00065 s->BPSLimitByCongestionControl,
00066 100.0f * s->valueOverLastSecond[ACTUAL_BYTES_SENT] / s->BPSLimitByCongestionControl
00067 );
00068 strcat(buffer,buff2);
00069 }
00070 if (s->BPSLimitByOutgoingBandwidthLimit!=0)
00071 {
00072 char buff2[128];
00073 sprintf(buff2,
00074 "Send limit %"PRINTF_64_BIT_MODIFIER"u (%.0f%%)\n",
00075 s->BPSLimitByOutgoingBandwidthLimit,
00076 100.0f * s->valueOverLastSecond[ACTUAL_BYTES_SENT] / s->BPSLimitByOutgoingBandwidthLimit
00077 );
00078 strcat(buffer,buff2);
00079 }
00080 }
00081 else
00082 {
00083 sprintf(buffer,
00084 "Actual bytes per second sent %"PRINTF_64_BIT_MODIFIER"u\n"
00085 "Actual bytes per second received %"PRINTF_64_BIT_MODIFIER"u\n"
00086 "Message bytes per second sent %"PRINTF_64_BIT_MODIFIER"u\n"
00087 "Message bytes per second resent %"PRINTF_64_BIT_MODIFIER"u\n"
00088 "Message bytes per second queued %"PRINTF_64_BIT_MODIFIER"u\n"
00089 "Message bytes per second processed %"PRINTF_64_BIT_MODIFIER"u\n"
00090 "Message bytes per second ignored %"PRINTF_64_BIT_MODIFIER"u\n"
00091 "Total bytes sent %"PRINTF_64_BIT_MODIFIER"u\n"
00092 "Total bytes received %"PRINTF_64_BIT_MODIFIER"u\n"
00093 "Total message bytes sent %"PRINTF_64_BIT_MODIFIER"u\n"
00094 "Total message bytes resent %"PRINTF_64_BIT_MODIFIER"u\n"
00095 "Total message bytes queued %"PRINTF_64_BIT_MODIFIER"u\n"
00096 "Total message bytes received %"PRINTF_64_BIT_MODIFIER"u\n"
00097 "Total message bytes ignored %"PRINTF_64_BIT_MODIFIER"u\n"
00098 "Messages in send buffer, by priority %i,%i,%i,%i\n"
00099 "Bytes in send buffer, by priority %i,%i,%i,%i\n"
00100 "Messages in resend buffer %i\n"
00101 "Bytes in resend buffer %"PRINTF_64_BIT_MODIFIER"u\n"
00102 "Current packetloss %.0f%%\n"
00103 "Average packetloss %.0f%%\n"
00104 "Elapsed connection time in seconds %"PRINTF_64_BIT_MODIFIER"u\n",
00105 s->valueOverLastSecond[ACTUAL_BYTES_SENT],
00106 s->valueOverLastSecond[ACTUAL_BYTES_RECEIVED],
00107 s->valueOverLastSecond[USER_MESSAGE_BYTES_SENT],
00108 s->valueOverLastSecond[USER_MESSAGE_BYTES_RESENT],
00109 s->valueOverLastSecond[USER_MESSAGE_BYTES_PUSHED],
00110 s->valueOverLastSecond[USER_MESSAGE_BYTES_RECEIVED_PROCESSED],
00111 s->valueOverLastSecond[USER_MESSAGE_BYTES_RECEIVED_IGNORED],
00112 s->runningTotal[ACTUAL_BYTES_SENT],
00113 s->runningTotal[ACTUAL_BYTES_RECEIVED],
00114 s->runningTotal[USER_MESSAGE_BYTES_SENT],
00115 s->runningTotal[USER_MESSAGE_BYTES_RESENT],
00116 s->runningTotal[USER_MESSAGE_BYTES_PUSHED],
00117 s->runningTotal[USER_MESSAGE_BYTES_RECEIVED_PROCESSED],
00118 s->runningTotal[USER_MESSAGE_BYTES_RECEIVED_IGNORED],
00119 s->messageInSendBuffer[IMMEDIATE_PRIORITY],s->messageInSendBuffer[HIGH_PRIORITY],s->messageInSendBuffer[MEDIUM_PRIORITY],s->messageInSendBuffer[LOW_PRIORITY],
00120 (unsigned int) s->bytesInSendBuffer[IMMEDIATE_PRIORITY],(unsigned int) s->bytesInSendBuffer[HIGH_PRIORITY],(unsigned int) s->bytesInSendBuffer[MEDIUM_PRIORITY],(unsigned int) s->bytesInSendBuffer[LOW_PRIORITY],
00121 s->messagesInResendBuffer,
00122 s->bytesInResendBuffer,
00123 s->packetlossLastSecond,
00124 s->packetlossTotal,
00125 (uint64_t)((RakNet::GetTimeUS()-s->connectionStartTime)/1000000)
00126 );
00127
00128 if (s->BPSLimitByCongestionControl!=0)
00129 {
00130 char buff2[128];
00131 sprintf(buff2,
00132 "Send capacity %"PRINTF_64_BIT_MODIFIER"u bytes per second (%.0f%%)\n",
00133 s->BPSLimitByCongestionControl,
00134 100.0f * s->valueOverLastSecond[ACTUAL_BYTES_SENT] / s->BPSLimitByCongestionControl
00135 );
00136 strcat(buffer,buff2);
00137 }
00138 if (s->BPSLimitByOutgoingBandwidthLimit!=0)
00139 {
00140 char buff2[128];
00141 sprintf(buff2,
00142 "Send limit %"PRINTF_64_BIT_MODIFIER"u (%.0f%%)\n",
00143 s->BPSLimitByOutgoingBandwidthLimit,
00144 100.0f * s->valueOverLastSecond[ACTUAL_BYTES_SENT] / s->BPSLimitByOutgoingBandwidthLimit
00145 );
00146 strcat(buffer,buff2);
00147 }
00148 }
00149 }