21 #define KILOBYTE 1024 // bytes 22 #define MEGABYTE 1048576 // bytes 23 #define GIGABYTE 1073741824 // bytes 26 double GetOrder(
unsigned int input_,
unsigned int &power){
28 for(
unsigned int i = 0; i < 100; i++){
40 if(input_ < 0.0){ input_ *= -1; }
41 int power = std::log10(input_);
43 std::stringstream stream;
44 stream << std::setprecision(2) << std::fixed;
45 if(power >= 6){ stream << input_/1E6 <<
"M"; }
46 else if(power >= 3){ stream << input_/1E3 <<
"k"; }
47 else if (input_ == 0) {
51 stream << input_ <<
" ";
54 std::string output = stream.str();
55 output = output.substr(0,output.find_last_not_of(
".",3)+1) + output.substr(output.length()-1,1);
61 std::stringstream stream;
62 unsigned int power = 0;
65 if(power >= 4){ stream << 10*input_/
order; }
66 else{ stream << input_; }
69 std::string output = stream.str();
70 size_t find_index = output.find(
'.');
71 if(find_index != std::string::npos){
73 temp = output.substr(0, find_index);
74 temp += output.substr(find_index, 3);
79 std::stringstream stream2;
80 stream2 << output <<
"E" << power-1;
81 output = stream2.str();
89 if(input_ < 0.0){ input_ *= -1; }
91 std::stringstream stream;
95 else{ stream << input_ <<
" B/s\n"; }
102 if(input_ < 0.0){ input_ *= -1; }
104 long long time = (
long long)input_;
106 int min = (time%3600)/60;
107 int sec = (time%3600)%60;
108 int rem = (int)(100*(input_ - time));
110 std::stringstream stream;
111 if(hr < 10){ stream <<
"0" << hr; }
112 else{ stream << hr; }
114 if(min < 10){ stream <<
"0" << min; }
115 else{ stream << min; }
117 if(sec < 10){ stream <<
"0" << sec; }
118 else{ stream << sec; }
120 if(rem < 10){ stream <<
"0" << rem; }
121 else{ stream << rem; }
127 const size_t msg_size = 5844;
128 const int modColumnWidth = 25;
129 char buffer[msg_size];
135 double **rates = NULL;
136 double **inputCountRate = NULL;
137 double **outputCountRate = NULL;
138 unsigned int **totals = NULL;
140 bool first_packet =
true;
141 if(poll_server.
Init(5556)){
142 std::cout <<
" Waiting for first stats packet...\n";
145 std::cout << std::setprecision(2);
150 if(strcmp(buffer,
"$KILL_SOCKET") == 0){
151 std::cout <<
" Received KILL_SOCKET flag...\n\n";
176 memcpy(&num_modules, ptr, 4); ptr += 4;
179 rates =
new double*[num_modules];
180 inputCountRate =
new double*[num_modules];
181 outputCountRate =
new double*[num_modules];
182 totals =
new unsigned int*[num_modules];
183 for(
int i = 0; i < num_modules; i++){
184 rates[i] =
new double[16];
185 inputCountRate[i] =
new double[16];
186 outputCountRate[i] =
new double[16];
187 totals[i] =
new unsigned int[16];
189 first_packet =
false;
192 memcpy(&time_in_sec, ptr, 8); ptr += 8;
193 memcpy(&data_rate, ptr, 8); ptr += 8;
194 for(
int i = 0; i < num_modules; i++){
195 for(
int j = 0; j < 16; j++){
196 memcpy(&inputCountRate[i][j], ptr, 8); ptr += 8;
197 memcpy(&outputCountRate[i][j], ptr, 8); ptr += 8;
198 memcpy(&rates[i][j], ptr, 8); ptr += 8;
199 memcpy(&totals[i][j], ptr, 4); ptr += 4;
205 if (num_modules > 1) std::cout <<
"\t";
206 else std::cout <<
"\n";
207 std::cout <<
"Data Rate: " <<
GetRateString(data_rate) << std::endl;
209 for(
unsigned int i = 0; i < (
unsigned int)num_modules; i++){
210 std::cout <<
"|" << std::setw((
int)((modColumnWidth-1.+0.5) / 2))
211 << std::setfill(
'-') <<
"M" << std::setw(2)
212 << std::setfill(
'0') << i
213 << std::setw((
int)((modColumnWidth-2.+0.5) / 2))
214 << std::setfill(
'-') <<
"";
218 for(
unsigned int i = 0; i < 16; i++){
219 std::cout <<
"C" << std::setw(2) << std:: setfill(
'0') << i <<
"|";
220 for(
unsigned int j = 0; j < (
unsigned int)num_modules; j++){
221 std::cout << std::setw(5) << std::setfill(
' ') <<
GetChanRateString(inputCountRate[j][i]) <<
" ";
222 std::cout << std::setw(5) << std::setfill(
' ') <<
GetChanRateString(outputCountRate[j][i]) <<
" ";
223 std::cout << std::setw(5) << std::setfill(
' ') <<
GetChanRateString(rates[j][i]) <<
" ";
232 std::cout <<
" Error: Failed to open poll socket 5556!\n";
237 if(rates){
delete[] rates; }
238 if(inputCountRate){
delete[] inputCountRate; }
239 if(outputCountRate){
delete[] outputCountRate; }
240 if(totals){
delete[] totals; }
std::string GetChanRateString(double input_)
void Close()
Close the socket.
int order(double input_)
Find the order of magnitude of an input double.
Provides network connectivity for poll2.
int RecvMessage(char *message_, size_t length_)
std::string GetChanTotalString(unsigned int input_)
std::string GetTimeString(double input_)
bool Init(int port_, int sec_=10, int usec_=0)
Initialize the serv object and open a specified port. Returns false if the socket fails to open or th...
std::string GetRateString(double input_)
double GetOrder(unsigned int input_, unsigned int &power)