ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/libstatgrab/src/saidar/saidar.c
(Generate patch)

Comparing projects/libstatgrab/src/saidar/saidar.c (file contents):
Revision 1.27 by ats, Mon Apr 5 15:40:17 2004 UTC vs.
Revision 1.35 by tdb, Thu Nov 30 23:03:19 2006 UTC

# Line 1 | Line 1
1   /*
2 < * i-scream central monitoring system
2 > * i-scream libstatgrab
3   * http://www.i-scream.org
4   * Copyright (C) 2000-2004 i-scream
5   *
# Line 63 | Line 63 | typedef struct{
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;
# Line 78 | Line 84 | char *size_conv(long long number){
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);
# Line 152 | Line 160 | void display_headings(){
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);
# Line 179 | Line 187 | void display_headings(){
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) {
# Line 228 | Line 236 | void display_data(){
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));
# Line 280 | Line 288 | void display_data(){
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));
# Line 298 | Line 306 | void display_data(){
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);
# Line 321 | Line 329 | void display_data(){
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));
# Line 350 | Line 361 | void display_data(){
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++;
# Line 368 | Line 382 | void display_data(){
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                  }
# Line 386 | Line 403 | void display_data(){
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(){
# Line 416 | Line 433 | void version_num(char *progname){
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  
# Line 442 | Line 459 | int main(int argc, char **argv){
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()){
# Line 498 | Line 515 | int main(int argc, char **argv){
515                  last_update = now;
516  
517                  display_data();
518 <        }      
518 >        }
519  
520          endwin();
521          return 0;
522 < }      
522 > }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines