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.5 by pajs, Sun Feb 23 22:58:08 2003 UTC

# Line 192 | Line 192 | diskio_stat_t *diskio_stat_malloc(int needed_entries,
192   }
193  
194   static diskio_stat_t *diskio_stats=NULL;        
195 + static int num_diskio=0;        
196  
197   diskio_stat_t *get_diskio_stats(int *entries){
198  
199          static int sizeof_diskio_stats=0;
199        int disks=0;    
200          diskio_stat_t *diskio_stats_ptr;
201  
202          kstat_ctl_t *kc;
# Line 207 | Line 207 | diskio_stat_t *get_diskio_stats(int *entries){
207                  return NULL;
208          }
209  
210 +        num_diskio=0;
211 +
212          for (ksp = kc->kc_chain; ksp; ksp = ksp->ks_next) {
211                fflush(stdout);
213                  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 */
216 >                        /* We dont want metadevices appearins as num_diskio */
217                          if(strcmp(ksp->ks_module, "md")==0) continue;
218                          if((kstat_read(kc, ksp, &kios))==-1){  
219                                fflush(stdout);
219                          }
220                          
221 <                        if((diskio_stats=diskio_stat_malloc(disks+1, &sizeof_diskio_stats, diskio_stats))==NULL){
221 >                        if((diskio_stats=diskio_stat_malloc(num_diskio+1, &sizeof_diskio_stats, diskio_stats))==NULL){
222                                  kstat_close(kc);
223                                  return NULL;
224                          }
225 <                        diskio_stats_ptr=diskio_stats+disks;
225 >                        diskio_stats_ptr=diskio_stats+num_diskio;
226                          
227                          diskio_stats_ptr->read_bytes=kios.nread;
228                          
# Line 232 | Line 231 | diskio_stat_t *get_diskio_stats(int *entries){
231                          if(diskio_stats_ptr->disk_name!=NULL) free(diskio_stats_ptr->disk_name);
232  
233                          diskio_stats_ptr->disk_name=strdup(ksp->ks_name);
234 <                        disks++;
236 <                        fflush(stdout);
234 >                        num_diskio++;
235                  }
236          }
237  
238          kstat_close(kc);
239  
240 <        *entries=disks;
240 >        *entries=num_diskio;
241  
242          return diskio_stats;
243 + }
244 +
245 + diskio_stat_t *get_diskio_stat_diff(int *entries){
246 +        static diskio_stat_t *diskio_stats_diff=NULL;
247 +        static int sizeof_diskio_stats_diff=0;
248 +        diskio_stat_t *diskio_stats_diff_ptr, *diskio_stats_ptr;
249 +        int disks, x, y;
250 +
251 +        if(diskio_stats==NULL){
252 +                diskio_stats_ptr=get_diskio_stats(&disks);
253 +                *entries=disks;
254 +                return diskio_stats_ptr;
255 +        }
256 +
257 +        diskio_stats_diff=diskio_stat_malloc(num_diskio, &sizeof_diskio_stats_diff, diskio_stats_diff);
258 +        if(diskio_stats_diff==NULL){
259 +                return NULL;
260 +        }
261 +
262 +        diskio_stats_diff_ptr=diskio_stats_diff;
263 +        diskio_stats_ptr=diskio_stats;
264 +
265 +        for(disks=0;disks<num_diskio;disks++){
266 +                if(diskio_stats_diff_ptr->disk_name!=NULL){
267 +                        free(diskio_stats_diff_ptr->disk_name);
268 +                }
269 +                diskio_stats_diff_ptr->disk_name=strdup(diskio_stats_ptr->disk_name);
270 +                diskio_stats_diff_ptr->read_bytes=diskio_stats_ptr->read_bytes;
271 +                diskio_stats_diff_ptr->write_bytes=diskio_stats_ptr->write_bytes;
272 +                diskio_stats_diff_ptr->systime=diskio_stats_ptr->systime;
273 +
274 +                diskio_stats_diff_ptr++;
275 +                diskio_stats_ptr++;
276 +        }
277 +
278 +        diskio_stats_ptr=get_diskio_stats(&disks);
279 +        diskio_stats_diff_ptr=diskio_stats_diff;
280 +
281 +        for(x=0;x<sizeof_diskio_stats_diff;x++){
282 +
283 +                if((strcmp(diskio_stats_diff_ptr->disk_name, diskio_stats_ptr->disk_name))==0){
284 +                        diskio_stats_diff_ptr->read_bytes=diskio_stats_ptr->read_bytes-diskio_stats_diff_ptr->read_bytes;
285 +                        diskio_stats_diff_ptr->write_bytes=diskio_stats_ptr->write_bytes-diskio_stats_diff_ptr->write_bytes;
286 +                        diskio_stats_diff_ptr->systime=diskio_stats_ptr->systime-diskio_stats_diff_ptr->systime;
287 +                }else{
288 +                        diskio_stats_ptr=diskio_stats;
289 +                        for(y=0;y<disks;y++){
290 +                                if((strcmp(diskio_stats_diff_ptr->disk_name, diskio_stats_ptr->disk_name))==0){
291 +                                        diskio_stats_diff_ptr->read_bytes=diskio_stats_ptr->read_bytes-diskio_stats_diff_ptr->read_bytes;
292 +                                        diskio_stats_diff_ptr->write_bytes=diskio_stats_ptr->write_bytes-diskio_stats_diff_ptr->write_bytes;
293 +                                        diskio_stats_diff_ptr->systime=diskio_stats_ptr->systime-diskio_stats_diff_ptr->systime;
294 +
295 +                                        break;
296 +                                }
297 +                                
298 +                                diskio_stats_ptr++;
299 +                        }
300 +                }
301 +
302 +                diskio_stats_ptr++;
303 +                diskio_stats_diff_ptr++;        
304 +
305 +        }
306 +
307 +        return diskio_stats_diff;
308   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines