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.9 by pajs, Tue Mar 4 12:55:14 2003 UTC vs.
Revision 1.14 by pajs, Tue Mar 11 12:57:07 2003 UTC

# Line 38 | Line 38
38   #include <stdio.h>
39   #include <sys/vfs.h>
40   #include <mntent.h>
41 + #include "tools.h"
42   #define VALID_FS_TYPES {"ext2", "ext3", "xfs", "reiserfs", "vfat", "tmpfs"}
43   #endif
44  
# Line 80 | Line 81 | disk_stat_t *get_disk_stats(int *entries){
81          disk_stat_t *disk_ptr;
82  
83   #ifdef SOLARIS
84 <        struct mnttab *mp;
84 >        struct mnttab mp;
85          struct statvfs fs;
86   #endif
87   #ifdef LINUX
# Line 205 | Line 206 | disk_stat_t *get_disk_stats(int *entries){
206          return disk_stats;
207  
208   }
208 #ifdef SOLARIS
209   void diskio_stat_init(int start, int end, diskio_stat_t *diskio_stats){
210  
211          for(diskio_stats+=start; start<end; start++){
# Line 249 | Line 249 | diskio_stat_t *get_diskio_stats(int *entries){
249          static int sizeof_diskio_stats=0;
250          diskio_stat_t *diskio_stats_ptr;
251  
252 + #ifdef SOLARIS
253          kstat_ctl_t *kc;
254          kstat_t *ksp;
255          kstat_io_t kios;
256 + #endif
257 + #ifdef LINUX
258 +        FILE *f;
259 +        char *line_ptr;
260 +        int major, minor;
261 +        char dev_letter;
262 + #endif
263 +        num_diskio=0;
264  
265 + #ifdef SOLARIS
266          if ((kc = kstat_open()) == NULL) {
267                  return NULL;
268          }
269  
260        num_diskio=0;
261
270          for (ksp = kc->kc_chain; ksp; ksp = ksp->ks_next) {
271                  if (!strcmp(ksp->ks_class, "disk")) {
272  
# Line 281 | Line 289 | diskio_stat_t *get_diskio_stats(int *entries){
289                          if(diskio_stats_ptr->disk_name!=NULL) free(diskio_stats_ptr->disk_name);
290  
291                          diskio_stats_ptr->disk_name=strdup(ksp->ks_name);
292 +                        diskio_stats_ptr->systime=time(NULL);
293                          num_diskio++;
294                  }
295          }
296  
297          kstat_close(kc);
298 + #endif
299  
300 + #ifdef LINUX
301 +        f=fopen("/proc/stat", "r");
302 +        if(f==NULL){
303 +                *entries=0;
304 +                fclose(f);
305 +                return NULL;
306 +        }
307 +        if((line_ptr=f_read_line(f, "disk_io:"))==NULL){
308 +                *entries=0;
309 +                fclose(f);
310 +                return NULL;
311 +        }
312 +        while((line_ptr=strchr(line_ptr, ' '))!=NULL){
313 +                line_ptr++;
314 +                if(*line_ptr=='\0'){
315 +                        break;
316 +                }
317 +                if((diskio_stats=diskio_stat_malloc(num_diskio+1, &sizeof_diskio_stats, diskio_stats))==NULL){
318 +                        fclose(f);
319 +                        *entries=0;
320 +                        return NULL;
321 +                }
322 +                diskio_stats_ptr=diskio_stats+num_diskio;
323 +
324 +
325 +                if((sscanf(line_ptr, "(%d,%d):(%*d, %*d, %lld, %*d, %lld)", \
326 +                        &major, \
327 +                        &minor, \
328 +                        &diskio_stats_ptr->read_bytes, \
329 +                        &diskio_stats_ptr->write_bytes))!=4) {
330 +                                continue;
331 +                }
332 +
333 +                /* We read the number of blocks. Blocks are stored in 512 bytes */
334 +                diskio_stats_ptr->read_bytes=diskio_stats_ptr->read_bytes*512;
335 +                diskio_stats_ptr->write_bytes=diskio_stats_ptr->write_bytes*512;
336 +
337 +                if(diskio_stats_ptr->disk_name!=NULL) free(diskio_stats_ptr->disk_name);
338 +
339 +                switch(major){
340 +                        case 2:
341 +                                if(minor==0){
342 +                                        diskio_stats_ptr->disk_name=strdup("fd0");
343 +                                }
344 +                                break;
345 +
346 +                        case 3:
347 +                                if(minor==0){
348 +                                        diskio_stats_ptr->disk_name=strdup("hda");
349 +                                }else{
350 +                                        diskio_stats_ptr->disk_name=strdup("hdb");
351 +                                }
352 +                                break;
353 +
354 +                        case 22:
355 +                                if(minor==0){
356 +                                        diskio_stats_ptr->disk_name=strdup("hdc");
357 +                                }else{
358 +                                        diskio_stats_ptr->disk_name=strdup("hdd");
359 +                                }
360 +                                break;
361 +                        case 8:
362 +                                dev_letter='a'+(minor/16);
363 +                                diskio_stats_ptr->disk_name=malloc(4);
364 +                                snprintf(diskio_stats_ptr->disk_name, 4, "sd%c", dev_letter);
365 +                                break;
366 +                        default:
367 +                                /* I have no idea what it is then :) */
368 +                                diskio_stats_ptr->disk_name=malloc(16);
369 +                                snprintf(diskio_stats_ptr->disk_name, 16, "%d %d", major, minor);
370 +                                break;
371 +                }
372 +
373 +                diskio_stats_ptr->systime=time(NULL);
374 +                num_diskio++;
375 +        }
376 +
377 + #endif
378          *entries=num_diskio;
379  
380          return diskio_stats;
# Line 357 | Line 445 | diskio_stat_t *get_diskio_stats_diff(int *entries){
445          *entries=sizeof_diskio_stats_diff;
446          return diskio_stats_diff;
447   }
360 #endif

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines