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

Comparing projects/libstatgrab/examples/disk_traffic.c (file contents):
Revision 1.2 by tdb, Sun Aug 24 20:24:09 2003 UTC vs.
Revision 1.9 by tdb, Mon Apr 5 16:23:08 2004 UTC

# Line 1 | Line 1
1   /*
2   * i-scream central monitoring system
3   * http://www.i-scream.org
4 < * Copyright (C) 2000-2003 i-scream
4 > * Copyright (C) 2000-2004 i-scream
5   *
6   * This program is free software; you can redistribute it and/or
7   * modify it under the terms of the GNU General Public License
# Line 16 | Line 16
16   * You should have received a copy of the GNU General Public License
17   * along with this program; if not, write to the Free Software
18   * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
19 + *
20 + * $Id$
21   */
22  
23   /* A very basic example of how to get the disk statistics from the system
24   * and diaply them. Also it adds up all the traffic to create and print out
25   * a total
26   * Takes several arguments :
27 < * -d <number>  Takes the number of seconds to wait to get traffic sent since last call
28 < *              Note, this is not disk traffic per second. Its the traffic since last
29 < *              call. If you want it traffic per second averaged over time since last call
27 > * -d <number>  Takes the number of seconds to wait to get traffic sent since last call
28 > *              Note, this is not disk traffic per second. Its the traffic since last
29 > *              call. If you want it traffic per second averaged over time since last call
30   *              You need to divide against the time since last time this was called. The time
31   *              between 2 calls is stored in systime in the disk_stat_t structure.
32   * -b           Display in bytes
33   * -k           Display in kilobytes
34 < * -m           Display in megabytes
34 > * -m           Display in megabytes
35   */
36  
37   #include <stdio.h>
# Line 40 | Line 42
42   int main(int argc, char **argv){
43  
44          extern char *optarg;
43        extern int optind;
45          int c;
46  
47          /* We default to 1 second updates and displaying in bytes*/
48          int delay = 1;
49          char units = 'b';
50  
51 <        diskio_stat_t *diskio_stats;
51 >        sg_disk_io_stats *diskio_stats;
52          int num_diskio_stats;
53  
54          /* Parse command line options */
55 <        while ((c = getopt(argc, argv, "d:bkm")) != EOF){
55 >        while ((c = getopt(argc, argv, "d:bkm")) != -1){
56                  switch (c){
57                          case 'd':
58                                  delay = atoi(optarg);
# Line 68 | Line 69 | int main(int argc, char **argv){
69                  }
70          }
71  
72 <        /* We are not intrested in the amount of traffic ever transmitted, just differences.
72 >        /* Initialise statgrab */
73 >        sg_init();
74 >
75 >        /* Drop setuid/setgid privileges. */
76 >        if (sg_drop_privileges() != 0) {
77 >                perror("Error. Failed to drop privileges");
78 >                return 1;
79 >        }
80 >
81 >        /* We are not interested in the amount of traffic ever transmitted, just differences.
82           * Because of this, we do nothing for the very first call.
83           */
84 <        
85 <        diskio_stats = get_diskio_stats_diff(&num_diskio_stats);
84 >
85 >        diskio_stats = sg_get_disk_io_stats_diff(&num_diskio_stats);
86          if (diskio_stats == NULL){
87                  perror("Error. Failed to get disk stats");
88                  return 1;
# Line 80 | Line 90 | int main(int argc, char **argv){
90  
91          /* Clear the screen ready for display the disk stats */
92          printf("\033[2J");
93 <        
93 >
94          /* Keep getting the disk stats */
95 <        while ( (diskio_stats = get_diskio_stats_diff(&num_diskio_stats)) != NULL){
95 >        while ( (diskio_stats = sg_get_disk_io_stats_diff(&num_diskio_stats)) != NULL){
96                  int x;
97                  int line_number = 2;
98  
# Line 100 | Line 110 | int main(int argc, char **argv){
110                                          break;
111                                  case 'k':
112                                          printf("\033[%d;2H%-25s : %5lld k", line_number++, "Disk read", (diskio_stats->read_bytes / 1024));
113 <                                        printf("\033[%d;2H%-25s : %5lld", line_number++, "Disk write", (diskio_stats->write_bytes / 1024));
114 <                                        break;
113 >                                        printf("\033[%d;2H%-25s : %5lld", line_number++, "Disk write", (diskio_stats->write_bytes / 1024));
114 >                                        break;
115                                  case 'm':
116                                          printf("\033[%d;2H%-25s : %5.2f m", line_number++, "Disk read", diskio_stats->read_bytes / (1024.00*1024.00));
117                                          printf("\033[%d;2H%-25s : %5.2f m", line_number++, "Disk write", diskio_stats->write_bytes / (1024.00*1024.00));
118                          }
119                          printf("\033[%d;2H%-25s : %ld ", line_number++, "Disk systime", (long) diskio_stats->systime);
120 <                
120 >
121                          /* Add a blank line between interfaces */      
122                          line_number++;
123  
# Line 119 | Line 129 | int main(int argc, char **argv){
129                           * to keep track of the orginal pointer to free later */
130                          diskio_stats++;
131                  }
132 <                
132 >
133                  printf("\033[%d;2H%-25s : %-10s", line_number++, "Disk Name", "Total Disk IO");
134                  switch(units){
135                          case 'b':
# Line 135 | Line 145 | int main(int argc, char **argv){
145                                  printf("\033[%d;2H%-25s : %5.2f m", line_number++, "Disk Total write", (total_write  / (1024.00*1024.00)));
146                                  break;
147                  }
148 <                
148 >
149                  fflush(stdout);
150  
151                  sleep(delay);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines