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.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 156 | Line 152 | disk_stat_t *get_disk_stats(int *entries){
152  
153   }
154  
155 < diskio_stat_t get_diskio_stats(int *entries){
155 > void diskio_stat_init(int start, int end, diskio_stat_t *diskio_stats){
156  
157 <        /* Do jibble */
158 <        return NULL;
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