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.2 by pajs, Thu Feb 20 13:08:45 2003 UTC vs.
Revision 1.4 by pajs, Sun Feb 23 19:24:07 2003 UTC

# Line 32 | Line 32
32   #include <sys/mnttab.h>
33   #include <sys/types.h>
34   #include <sys/statvfs.h>
35 + #include <kstat.h>
36  
37   #define VALID_FS_TYPES {"ufs", "tmpfs"}
38  
# Line 61 | Line 62 | void init_disk_stat(int start, int end, disk_stat_t *d
62                  
63                  disk_stats++;
64          }
64
65   }
66  
67   disk_stat_t *get_disk_stats(int *entries){
# Line 156 | Line 156 | disk_stat_t *get_disk_stats(int *entries){
156  
157   }
158  
159 < diskio_stat_t get_diskio_stats(int *entries){
159 > void diskio_stat_init(int start, int end, diskio_stat_t *diskio_stats){
160  
161 <        /* Do jibble */
162 <        return NULL;
161 >        for(diskio_stats+=start; start<end; start++){
162 >                diskio_stats->disk_name=NULL;
163 >                
164 >                diskio_stats++;
165 >        }
166 > }
167 >
168 > diskio_stat_t *diskio_stat_malloc(int needed_entries, int *cur_entries, diskio_stat_t *diskio_stats){
169 >
170 >        if(diskio_stats==NULL){
171 >
172 >                if((diskio_stats=malloc(needed_entries * sizeof(diskio_stat_t)))==NULL){
173 >                        return NULL;
174 >                }
175 >                diskio_stat_init(0, needed_entries, diskio_stats);
176 >                *cur_entries=needed_entries;
177 >
178 >                return diskio_stats;
179 >        }
180 >
181 >
182 >        if(*cur_entries<needed_entries){
183 >                diskio_stats=realloc(diskio_stats, (sizeof(diskio_stat_t)*needed_entries));
184 >                if(diskio_stats==NULL){
185 >                        return NULL;
186 >                }
187 >                diskio_stat_init(*cur_entries, needed_entries, diskio_stats);
188 >                *cur_entries=needed_entries;
189 >        }
190 >
191 >        return diskio_stats;
192 > }
193 >
194 > static diskio_stat_t *diskio_stats=NULL;        
195 >
196 > diskio_stat_t *get_diskio_stats(int *entries){
197 >
198 >        static int sizeof_diskio_stats=0;
199 >        int disks=0;    
200 >        diskio_stat_t *diskio_stats_ptr;
201 >
202 >        kstat_ctl_t *kc;
203 >        kstat_t *ksp;
204 >        kstat_io_t kios;
205 >
206 >        if ((kc = kstat_open()) == NULL) {
207 >                return NULL;
208 >        }
209 >
210 >        for (ksp = kc->kc_chain; ksp; ksp = ksp->ks_next) {
211 >                fflush(stdout);
212 >                if (!strcmp(ksp->ks_class, "disk")) {
213 >                        fflush(stdout);
214 >
215 >                        if(ksp->ks_type != KSTAT_TYPE_IO) continue;
216 >                        /* We dont want metadevices appearins as disks */
217 >                        if(strcmp(ksp->ks_module, "md")==0) continue;
218 >                        if((kstat_read(kc, ksp, &kios))==-1){  
219 >                                fflush(stdout);
220 >                        }
221 >                        
222 >                        if((diskio_stats=diskio_stat_malloc(disks+1, &sizeof_diskio_stats, diskio_stats))==NULL){
223 >                                kstat_close(kc);
224 >                                return NULL;
225 >                        }
226 >                        diskio_stats_ptr=diskio_stats+disks;
227 >                        
228 >                        diskio_stats_ptr->read_bytes=kios.nread;
229 >                        
230 >                        diskio_stats_ptr->write_bytes=kios.nwritten;
231 >
232 >                        if(diskio_stats_ptr->disk_name!=NULL) free(diskio_stats_ptr->disk_name);
233 >
234 >                        diskio_stats_ptr->disk_name=strdup(ksp->ks_name);
235 >                        disks++;
236 >                        fflush(stdout);
237 >                }
238 >        }
239 >
240 >        kstat_close(kc);
241 >
242 >        *entries=disks;
243 >
244 >        return diskio_stats;
245   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines