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.1 by pajs, Tue Feb 18 19:28:30 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 <
33 > #include <kstat.h>
34   #define VALID_FS_TYPES {"ufs", "tmpfs"}
37
35   #endif
36  
37   #define START_VAL 1
# Line 61 | Line 58 | void init_disk_stat(int start, int end, disk_stat_t *d
58                  
59                  disk_stats++;
60          }
64
61   }
62  
63   disk_stat_t *get_disk_stats(int *entries){
# Line 154 | Line 150 | disk_stat_t *get_disk_stats(int *entries){
150  
151          return disk_stats;
152  
153 + }
154 +
155 + void diskio_stat_init(int start, int end, diskio_stat_t *diskio_stats){
156 +
157 +        for(diskio_stats+=start; start<end; start++){
158 +                diskio_stats->disk_name=NULL;
159 +                
160 +                diskio_stats++;
161 +        }
162 + }
163 +
164 + diskio_stat_t *diskio_stat_malloc(int needed_entries, int *cur_entries, diskio_stat_t *diskio_stats){
165 +
166 +        if(diskio_stats==NULL){
167 +
168 +                if((diskio_stats=malloc(needed_entries * sizeof(diskio_stat_t)))==NULL){
169 +                        return NULL;
170 +                }
171 +                diskio_stat_init(0, needed_entries, diskio_stats);
172 +                *cur_entries=needed_entries;
173 +
174 +                return diskio_stats;
175 +        }
176 +
177 +
178 +        if(*cur_entries<needed_entries){
179 +                diskio_stats=realloc(diskio_stats, (sizeof(diskio_stat_t)*needed_entries));
180 +                if(diskio_stats==NULL){
181 +                        return NULL;
182 +                }
183 +                diskio_stat_init(*cur_entries, needed_entries, diskio_stats);
184 +                *cur_entries=needed_entries;
185 +        }
186 +
187 +        return diskio_stats;
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;
196 +        diskio_stat_t *diskio_stats_ptr;
197 +
198 +        kstat_ctl_t *kc;
199 +        kstat_t *ksp;
200 +        kstat_io_t kios;
201 +
202 +        if ((kc = kstat_open()) == NULL) {
203 +                return NULL;
204 +        }
205 +
206 +        num_diskio=0;
207 +
208 +        for (ksp = kc->kc_chain; ksp; ksp = ksp->ks_next) {
209 +                if (!strcmp(ksp->ks_class, "disk")) {
210 +
211 +                        if(ksp->ks_type != KSTAT_TYPE_IO) continue;
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){  
215 +                        }
216 +                        
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+num_diskio;
222 +                        
223 +                        diskio_stats_ptr->read_bytes=kios.nread;
224 +                        
225 +                        diskio_stats_ptr->write_bytes=kios.nwritten;
226 +
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 +                        num_diskio++;
231 +                }
232 +        }
233 +
234 +        kstat_close(kc);
235 +
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