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

Comparing projects/libstatgrab/src/libstatgrab/disk_stats.c (file contents):
Revision 1.4 by pajs, Sun Feb 23 19:24:07 2003 UTC vs.
Revision 1.8 by pajs, Sat Mar 1 02:41:54 2003 UTC

# Line 22 | Line 22
22   #include "config.h"
23   #endif
24  
25 #include "statgrab.h"
25   #include <stdlib.h>
26   #include <stdio.h>
28 #include "ukcprog.h"
27   #include <string.h>
28 + #include "statgrab.h"
29  
30   #ifdef SOLARIS
31   #include <sys/mnttab.h>
33 #include <sys/types.h>
32   #include <sys/statvfs.h>
33   #include <kstat.h>
36
34   #define VALID_FS_TYPES {"ufs", "tmpfs"}
38
35   #endif
36  
37   #define START_VAL 1
# Line 192 | Line 188 | diskio_stat_t *diskio_stat_malloc(int needed_entries,
188   }
189  
190   static diskio_stat_t *diskio_stats=NULL;        
191 + static int num_diskio=0;        
192  
193   diskio_stat_t *get_diskio_stats(int *entries){
194  
195          static int sizeof_diskio_stats=0;
199        int disks=0;    
196          diskio_stat_t *diskio_stats_ptr;
197  
198          kstat_ctl_t *kc;
# Line 207 | Line 203 | diskio_stat_t *get_diskio_stats(int *entries){
203                  return NULL;
204          }
205  
206 +        num_diskio=0;
207 +
208          for (ksp = kc->kc_chain; ksp; ksp = ksp->ks_next) {
211                fflush(stdout);
209                  if (!strcmp(ksp->ks_class, "disk")) {
213                        fflush(stdout);
210  
211                          if(ksp->ks_type != KSTAT_TYPE_IO) continue;
212 <                        /* We dont want metadevices appearins as disks */
212 >                        /* We dont want metadevices appearins as num_diskio */
213                          if(strcmp(ksp->ks_module, "md")==0) continue;
214                          if((kstat_read(kc, ksp, &kios))==-1){  
219                                fflush(stdout);
215                          }
216                          
217 <                        if((diskio_stats=diskio_stat_malloc(disks+1, &sizeof_diskio_stats, diskio_stats))==NULL){
217 >                        if((diskio_stats=diskio_stat_malloc(num_diskio+1, &sizeof_diskio_stats, diskio_stats))==NULL){
218                                  kstat_close(kc);
219                                  return NULL;
220                          }
221 <                        diskio_stats_ptr=diskio_stats+disks;
221 >                        diskio_stats_ptr=diskio_stats+num_diskio;
222                          
223                          diskio_stats_ptr->read_bytes=kios.nread;
224                          
# Line 232 | Line 227 | diskio_stat_t *get_diskio_stats(int *entries){
227                          if(diskio_stats_ptr->disk_name!=NULL) free(diskio_stats_ptr->disk_name);
228  
229                          diskio_stats_ptr->disk_name=strdup(ksp->ks_name);
230 <                        disks++;
236 <                        fflush(stdout);
230 >                        num_diskio++;
231                  }
232          }
233  
234          kstat_close(kc);
235  
236 <        *entries=disks;
236 >        *entries=num_diskio;
237  
238          return diskio_stats;
239 + }
240 +
241 + diskio_stat_t *get_diskio_stats_diff(int *entries){
242 +        static diskio_stat_t *diskio_stats_diff=NULL;
243 +        static int sizeof_diskio_stats_diff=0;
244 +        diskio_stat_t *diskio_stats_diff_ptr, *diskio_stats_ptr;
245 +        int disks, x, y;
246 +
247 +        if(diskio_stats==NULL){
248 +                diskio_stats_ptr=get_diskio_stats(&disks);
249 +                *entries=disks;
250 +                return diskio_stats_ptr;
251 +        }
252 +
253 +        diskio_stats_diff=diskio_stat_malloc(num_diskio, &sizeof_diskio_stats_diff, diskio_stats_diff);
254 +        if(diskio_stats_diff==NULL){
255 +                return NULL;
256 +        }
257 +
258 +        diskio_stats_diff_ptr=diskio_stats_diff;
259 +        diskio_stats_ptr=diskio_stats;
260 +
261 +        for(disks=0;disks<num_diskio;disks++){
262 +                if(diskio_stats_diff_ptr->disk_name!=NULL){
263 +                        free(diskio_stats_diff_ptr->disk_name);
264 +                }
265 +                diskio_stats_diff_ptr->disk_name=strdup(diskio_stats_ptr->disk_name);
266 +                diskio_stats_diff_ptr->read_bytes=diskio_stats_ptr->read_bytes;
267 +                diskio_stats_diff_ptr->write_bytes=diskio_stats_ptr->write_bytes;
268 +                diskio_stats_diff_ptr->systime=diskio_stats_ptr->systime;
269 +
270 +                diskio_stats_diff_ptr++;
271 +                diskio_stats_ptr++;
272 +        }
273 +
274 +        diskio_stats_ptr=get_diskio_stats(&disks);
275 +        diskio_stats_diff_ptr=diskio_stats_diff;
276 +
277 +        for(x=0;x<sizeof_diskio_stats_diff;x++){
278 +
279 +                if((strcmp(diskio_stats_diff_ptr->disk_name, diskio_stats_ptr->disk_name))==0){
280 +                        diskio_stats_diff_ptr->read_bytes=diskio_stats_ptr->read_bytes-diskio_stats_diff_ptr->read_bytes;
281 +                        diskio_stats_diff_ptr->write_bytes=diskio_stats_ptr->write_bytes-diskio_stats_diff_ptr->write_bytes;
282 +                        diskio_stats_diff_ptr->systime=diskio_stats_ptr->systime-diskio_stats_diff_ptr->systime;
283 +                }else{
284 +                        diskio_stats_ptr=diskio_stats;
285 +                        for(y=0;y<disks;y++){
286 +                                if((strcmp(diskio_stats_diff_ptr->disk_name, diskio_stats_ptr->disk_name))==0){
287 +                                        diskio_stats_diff_ptr->read_bytes=diskio_stats_ptr->read_bytes-diskio_stats_diff_ptr->read_bytes;
288 +                                        diskio_stats_diff_ptr->write_bytes=diskio_stats_ptr->write_bytes-diskio_stats_diff_ptr->write_bytes;
289 +                                        diskio_stats_diff_ptr->systime=diskio_stats_ptr->systime-diskio_stats_diff_ptr->systime;
290 +
291 +                                        break;
292 +                                }
293 +                                
294 +                                diskio_stats_ptr++;
295 +                        }
296 +                }
297 +
298 +                diskio_stats_ptr++;
299 +                diskio_stats_diff_ptr++;        
300 +
301 +        }
302 +        
303 +        *entries=sizeof_diskio_stats_diff;
304 +        return diskio_stats_diff;
305   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines