| 63 |
|
sg_host_info *host_info; |
| 64 |
|
sg_user_stats *user_stats; |
| 65 |
|
}stats_t; |
| 66 |
< |
|
| 66 |
> |
|
| 67 |
|
stats_t stats; |
| 68 |
|
|
| 69 |
|
char *size_conv(long long number){ |
| 70 |
|
char type[] = {'B', 'K', 'M', 'G', 'T'}; |
| 71 |
|
int x=0; |
| 72 |
+ |
int sign=1; |
| 73 |
|
static char string[10]; |
| 74 |
|
|
| 75 |
+ |
if(number < 0){ |
| 76 |
+ |
sign=-1; |
| 77 |
+ |
number=-number; |
| 78 |
+ |
} |
| 79 |
+ |
|
| 80 |
|
for(;x<5;x++){ |
| 81 |
|
if( (number/1024) < (100)) { |
| 82 |
|
break; |
| 84 |
|
number = (number/1024); |
| 85 |
|
} |
| 86 |
|
|
| 87 |
< |
snprintf(string, 10, "%lld%c", number, type[x]); |
| 87 |
> |
number = number*sign; |
| 88 |
> |
|
| 89 |
> |
snprintf(string, 10, "%lld%c", number, type[x]); |
| 90 |
|
return string; |
| 91 |
< |
|
| 91 |
> |
|
| 92 |
|
} |
| 93 |
|
|
| 94 |
|
char *hr_uptime(time_t time){ |
| 95 |
|
int day = 0, hour = 0, min = 0; |
| 96 |
|
static char uptime_str[25]; |
| 97 |
|
int sec = (int) time; |
| 98 |
< |
|
| 98 |
> |
|
| 99 |
|
day = sec / (24*60*60); |
| 100 |
|
sec = sec % (24*60*60); |
| 101 |
|
hour = sec / (60*60); |
| 160 |
|
printw("Mem Free :"); |
| 161 |
|
|
| 162 |
|
/* Swap */ |
| 163 |
< |
move(6, 21); |
| 164 |
< |
printw("Swap Total:"); |
| 165 |
< |
move(7, 21); |
| 166 |
< |
printw("Swap Used :"); |
| 167 |
< |
move(8, 21); |
| 168 |
< |
printw("Swap Free :"); |
| 163 |
> |
move(6, 21); |
| 164 |
> |
printw("Swap Total:"); |
| 165 |
> |
move(7, 21); |
| 166 |
> |
printw("Swap Used :"); |
| 167 |
> |
move(8, 21); |
| 168 |
> |
printw("Swap Free :"); |
| 169 |
|
|
| 170 |
|
/* VM */ |
| 171 |
|
move(6, 42); |
| 187 |
|
move(10,15); |
| 188 |
|
printw("Read"); |
| 189 |
|
move(10,28); |
| 190 |
< |
printw("Write"); |
| 190 |
> |
printw("Write"); |
| 191 |
|
|
| 192 |
|
line = 10; |
| 193 |
|
if (stats.network_io_stats != NULL) { |
| 236 |
|
*/ |
| 237 |
|
if (ptr != NULL){ |
| 238 |
|
*ptr = '\0'; |
| 239 |
< |
} |
| 239 |
> |
} |
| 240 |
|
printw("%s", hostname); |
| 241 |
|
move(0,36); |
| 242 |
|
printw("%s", hr_uptime(stats.host_info->uptime)); |
| 288 |
|
if (stats.mem_stats != NULL) { |
| 289 |
|
/* Mem */ |
| 290 |
|
move(6, 12); |
| 291 |
< |
printw("%7s", size_conv(stats.mem_stats->total)); |
| 291 |
> |
printw("%7s", size_conv(stats.mem_stats->total)); |
| 292 |
|
move(7, 12); |
| 293 |
< |
printw("%7s", size_conv(stats.mem_stats->used)); |
| 293 |
> |
printw("%7s", size_conv(stats.mem_stats->used)); |
| 294 |
|
move(8, 12); |
| 295 |
|
printw("%7s", size_conv(stats.mem_stats->free)); |
| 296 |
|
} |
| 297 |
< |
|
| 298 |
< |
if (stats.swap_stats != NULL) { |
| 297 |
> |
|
| 298 |
> |
if (stats.swap_stats != NULL) { |
| 299 |
|
/* Swap */ |
| 300 |
|
move(6, 32); |
| 301 |
|
printw("%8s", size_conv(stats.swap_stats->total)); |
| 306 |
|
} |
| 307 |
|
|
| 308 |
|
/* VM */ |
| 309 |
< |
if (stats.mem_stats != NULL && stats.mem_stats->total != 0) { |
| 309 |
> |
if (stats.mem_stats != NULL && stats.mem_stats->total != 0) { |
| 310 |
|
move(6, 54); |
| 311 |
|
printw("%5.2f%%", (100.00 * (float)(stats.mem_stats->used)/stats.mem_stats->total)); |
| 312 |
|
} |
| 313 |
< |
if (stats.swap_stats != NULL && stats.swap_stats->total != 0) { |
| 313 |
> |
if (stats.swap_stats != NULL && stats.swap_stats->total != 0) { |
| 314 |
|
move(7, 54); |
| 315 |
|
printw("%5.2f%%", (100.00 * (float)(stats.swap_stats->used)/stats.swap_stats->total)); |
| 316 |
|
} |
| 317 |
|
if (stats.mem_stats != NULL && stats.swap_stats != NULL && |
| 318 |
< |
stats.mem_stats->total != 0 && stats.swap_stats->total != 0) { |
| 318 |
> |
stats.mem_stats->total != 0 && stats.swap_stats->total != 0) { |
| 319 |
|
move(8, 54); |
| 320 |
|
printw("%5.2f%%", (100.00 * (float)(stats.mem_stats->used+stats.swap_stats->used)/(stats.mem_stats->total+stats.swap_stats->total))); |
| 321 |
|
} |
| 322 |
|
|
| 323 |
< |
if (stats.page_stats != NULL) { |
| 323 |
> |
if (stats.page_stats != NULL) { |
| 324 |
|
/* Paging */ |
| 325 |
|
move(6, 74); |
| 326 |
|
printw("%5d", (stats.page_stats->systime)? (stats.page_stats->pages_pagein / stats.page_stats->systime): stats.page_stats->pages_pagein); |
| 329 |
|
} |
| 330 |
|
|
| 331 |
|
line = 11; |
| 332 |
< |
if (stats.disk_io_stats != NULL) { |
| 332 |
> |
if (stats.disk_io_stats != NULL) { |
| 333 |
|
/* Disk IO */ |
| 334 |
|
disk_io_stat_ptr = stats.disk_io_stats; |
| 335 |
|
r=0; |
| 336 |
|
w=0; |
| 337 |
|
for(counter=0;counter<stats.disk_io_entries;counter++){ |
| 338 |
+ |
char name[12]; |
| 339 |
+ |
strncpy(name, disk_io_stat_ptr->disk_name, sizeof(name)); |
| 340 |
+ |
name[sizeof(name)-1] = '\0'; /* strncpy doesn't terminate longer strings */ |
| 341 |
|
move(line, 0); |
| 342 |
< |
printw("%s", disk_io_stat_ptr->disk_name); |
| 342 |
> |
printw("%s", name); |
| 343 |
|
move(line, 12); |
| 344 |
|
rt = (disk_io_stat_ptr->systime)? (disk_io_stat_ptr->read_bytes/disk_io_stat_ptr->systime): disk_io_stat_ptr->read_bytes; |
| 345 |
|
printw("%7s", size_conv(rt)); |
| 361 |
|
} |
| 362 |
|
|
| 363 |
|
line = 11; |
| 364 |
< |
if (stats.network_io_stats != NULL) { |
| 364 |
> |
if (stats.network_io_stats != NULL) { |
| 365 |
|
/* Network */ |
| 366 |
|
network_stat_ptr = stats.network_io_stats; |
| 367 |
|
for(counter=0;counter<stats.network_io_entries;counter++){ |
| 368 |
< |
move(line, 42); |
| 369 |
< |
printw("%s", network_stat_ptr->interface_name); |
| 368 |
> |
char name[20]; |
| 369 |
> |
strncpy(name, network_stat_ptr->interface_name, sizeof(name)); |
| 370 |
> |
name[sizeof(name)-1] = '\0'; /* strncpy doesn't terminate longer strings */ |
| 371 |
> |
move(line, 42); |
| 372 |
> |
printw("%s", name); |
| 373 |
|
move(line, 62); |
| 374 |
|
rt = (network_stat_ptr->systime)? (network_stat_ptr->rx / network_stat_ptr->systime): network_stat_ptr->rx; |
| 375 |
|
printw("%7s", size_conv(rt)); |
| 376 |
|
move(line, 72); |
| 377 |
< |
wt = (network_stat_ptr->systime)? (network_stat_ptr->tx / network_stat_ptr->systime): network_stat_ptr->tx; |
| 377 |
> |
wt = (network_stat_ptr->systime)? (network_stat_ptr->tx / network_stat_ptr->systime): network_stat_ptr->tx; |
| 378 |
|
printw("%7s", size_conv(wt)); |
| 379 |
|
network_stat_ptr++; |
| 380 |
|
line++; |
| 382 |
|
line += 2; |
| 383 |
|
} |
| 384 |
|
|
| 385 |
< |
if (stats.fs_stats != NULL) { |
| 385 |
> |
if (stats.fs_stats != NULL) { |
| 386 |
|
/* Disk */ |
| 387 |
|
disk_stat_ptr = stats.fs_stats; |
| 388 |
|
for(counter=0;counter<stats.fs_entries;counter++){ |
| 389 |
+ |
char name[20]; |
| 390 |
+ |
strncpy(name, disk_stat_ptr->mnt_point, sizeof(name)); |
| 391 |
+ |
name[sizeof(name)-1] = '\0'; /* strncpy doesn't terminate longer strings */ |
| 392 |
|
move(line, 42); |
| 393 |
< |
printw("%s", disk_stat_ptr->mnt_point); |
| 393 |
> |
printw("%s", name); |
| 394 |
|
move(line, 62); |
| 395 |
|
printw("%7s", size_conv(disk_stat_ptr->avail)); |
| 396 |
|
move(line, 73); |
| 397 |
< |
printw("%5.2f%%", 100.00 * ((float) disk_stat_ptr->used / (float) (disk_stat_ptr->used + disk_stat_ptr->avail))); |
| 397 |
> |
printw("%6.2f%%", 100.00 * ((float) disk_stat_ptr->used / (float) (disk_stat_ptr->used + disk_stat_ptr->avail))); |
| 398 |
|
disk_stat_ptr++; |
| 399 |
|
line++; |
| 400 |
|
} |
| 403 |
|
refresh(); |
| 404 |
|
} |
| 405 |
|
|
| 406 |
< |
void sig_winch_handler(int sig){ |
| 406 |
> |
void sig_winch_handler(int dummy){ |
| 407 |
|
clear(); |
| 408 |
|
display_headings(); |
| 409 |
|
display_data(); |
| 410 |
< |
signal(SIGWINCH, sig_winch_handler); |
| 410 |
> |
signal(SIGWINCH, sig_winch_handler); |
| 411 |
|
} |
| 412 |
|
|
| 413 |
|
int get_stats(){ |
| 433 |
|
} |
| 434 |
|
|
| 435 |
|
void usage(char *progname){ |
| 436 |
< |
fprintf(stderr, "Usage: %s [-d delay] [-v] [-h]\n\n", progname); |
| 437 |
< |
fprintf(stderr, " -d Sets the update time in seconds\n"); |
| 436 |
> |
fprintf(stderr, "Usage: %s [-d delay] [-v] [-h]\n\n", progname); |
| 437 |
> |
fprintf(stderr, " -d Sets the update time in seconds\n"); |
| 438 |
|
fprintf(stderr, " -v Prints version number\n"); |
| 439 |
< |
fprintf(stderr, " -h Displays this help information.\n"); |
| 440 |
< |
fprintf(stderr, "\nReport bugs to <%s>.\n", PACKAGE_BUGREPORT); |
| 441 |
< |
exit(1); |
| 439 |
> |
fprintf(stderr, " -h Displays this help information.\n"); |
| 440 |
> |
fprintf(stderr, "\nReport bugs to <%s>.\n", PACKAGE_BUGREPORT); |
| 441 |
> |
exit(1); |
| 442 |
|
} |
| 443 |
|
|
| 444 |
|
int main(int argc, char **argv){ |
| 445 |
|
|
| 446 |
< |
extern char *optarg; |
| 447 |
< |
int c; |
| 446 |
> |
extern char *optarg; |
| 447 |
> |
int c; |
| 448 |
|
|
| 449 |
|
time_t last_update = 0; |
| 450 |
|
|
| 459 |
|
fprintf(stderr, "Failed to drop setuid/setgid privileges\n"); |
| 460 |
|
return 1; |
| 461 |
|
} |
| 462 |
< |
|
| 463 |
< |
while ((c = getopt(argc, argv, "vhd:")) != -1){ |
| 464 |
< |
switch (c){ |
| 465 |
< |
case 'd': |
| 466 |
< |
delay = atoi(optarg); |
| 462 |
> |
|
| 463 |
> |
while ((c = getopt(argc, argv, "vhd:")) != -1){ |
| 464 |
> |
switch (c){ |
| 465 |
> |
case 'd': |
| 466 |
> |
delay = atoi(optarg); |
| 467 |
|
if (delay < 1){ |
| 468 |
|
fprintf(stderr, "Time must be 1 second or greater\n"); |
| 469 |
|
exit(1); |
| 470 |
|
} |
| 471 |
< |
break; |
| 471 |
> |
break; |
| 472 |
|
case 'v': |
| 473 |
< |
version_num(argv[0]); |
| 473 |
> |
version_num(argv[0]); |
| 474 |
|
break; |
| 475 |
|
case 'h': |
| 476 |
|
default: |
| 477 |
|
usage(argv[0]); |
| 478 |
|
return 1; |
| 479 |
|
break; |
| 480 |
< |
} |
| 481 |
< |
} |
| 480 |
> |
} |
| 481 |
> |
} |
| 482 |
|
|
| 483 |
|
signal(SIGWINCH, sig_winch_handler); |
| 484 |
< |
initscr(); |
| 485 |
< |
nonl(); |
| 486 |
< |
cbreak(); |
| 487 |
< |
noecho(); |
| 484 |
> |
initscr(); |
| 485 |
> |
nonl(); |
| 486 |
> |
cbreak(); |
| 487 |
> |
noecho(); |
| 488 |
|
timeout(delay * 1000); |
| 489 |
< |
window=newwin(0, 0, 0, 0); |
| 489 |
> |
window=newwin(0, 0, 0, 0); |
| 490 |
|
clear(); |
| 491 |
|
|
| 492 |
|
if(!get_stats()){ |
| 515 |
|
last_update = now; |
| 516 |
|
|
| 517 |
|
display_data(); |
| 518 |
< |
} |
| 518 |
> |
} |
| 519 |
|
|
| 520 |
|
endwin(); |
| 521 |
|
return 0; |
| 522 |
< |
} |
| 522 |
> |
} |