ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/cms/source/ihost/libstatgrab/disk_stat.c
(Generate patch)

Comparing projects/cms/source/ihost/libstatgrab/disk_stat.c (file contents):
Revision 1.2 by pajs, Mon May 13 11:33:07 2002 UTC vs.
Revision 1.13 by tdb, Wed May 29 19:41:59 2002 UTC

# Line 1 | Line 1
1 + /*
2 + * i-scream central monitoring system
3 + * http://www.i-scream.org.uk
4 + * Copyright (C) 2000-2002 i-scream
5 + *
6 + * This program is free software; you can redistribute it and/or
7 + * modify it under the terms of the GNU General Public License
8 + * as published by the Free Software Foundation; either version 2
9 + * of the License, or (at your option) any later version.
10 + *
11 + * This program is distributed in the hope that it will be useful,
12 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 + * GNU General Public License for more details.
15 + *
16 + * You should have received a copy of the GNU General Public License
17 + * along with this program; if not, write to the Free Software
18 + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
19 + */
20 +
21 + #ifdef HAVE_CONFIG_H
22 + #include "config.h"
23 + #endif
24 +
25   #include <stdlib.h>
26   #include <stdio.h>
27 < #include <ukcprog.h>
27 > #include "ukcprog.h"
28   #include <string.h>
29  
30   #ifdef SOLARIS
# Line 35 | Line 59 | typedef struct system_disks_t{
59   char *get_disk_stats(){
60          system_disks_t *sd=NULL;
61          system_disks_t *sd_ptr=sd;
38        FILE *f;
62          int counter=0;
63 +        char *xml_disk_stats;
64 +        char *xml_disk_stats_ptr;
65   #ifdef SOLARIS
66          struct mnttab mp;
67          struct statvfs df;
68 +        FILE *f;
69   #endif
70   #ifdef LINUX
71          struct mntent *mp;
72          struct statfs df;
73 +        FILE *f;
74   #endif
75   #ifdef FREEBSD
76          int nummnt;
# Line 61 | Line 88 | char *get_disk_stats(){
88                          continue;
89                  }
90                  if((((strcmp(mp.mnt_fstype,"ufs"))==0) || (strcmp(mp.mnt_fstype,"tmpfs")) ==0)){
91 <                        sd_ptr=malloc(sizeof(system_disks_t));  
92 <                        sd_ptr->disk=malloc(sizeof(disk_stat_t));
93 <                        sd_ptr->disk->device_name=strdup(mp.mnt_special);
94 <                        sd_ptr->disk->mnt_point=strdup(mp.mnt_mountp);
91 >                        if((sd_ptr=malloc(sizeof(system_disks_t))) == NULL){
92 >                                errf("malloc failed (%m)");
93 >                                return NULL;
94 >                        }
95 >                        if((sd_ptr->disk=malloc(sizeof(disk_stat_t))) == NULL){
96 >                                errf("malloc failed (%m)");
97 >                                return NULL;
98 >                        }
99 >                        if((sd_ptr->disk->device_name=strdup(mp.mnt_special)) == NULL) {
100 >                                errf("strdup failed (%m)");    
101 >                                return NULL;
102 >                        }
103 >                        if((sd_ptr->disk->mnt_point=strdup(mp.mnt_mountp)) == NULL){
104 >                                errf("strdup failed (%m)");    
105 >                                return NULL;
106 >                        }
107                          sd_ptr->disk->size=((df.f_frsize/1024) * df.f_blocks);
108                          sd_ptr->disk->used=(((df.f_frsize/1024) * df.f_blocks) -((df.f_frsize/1024) * df.f_bfree));
109                          sd_ptr->disk->avail=(df.f_frsize/1024) * df.f_bavail;
# Line 76 | Line 115 | char *get_disk_stats(){
115  
116          }
117  
118 +        if((fclose(f))!=0){
119 +                errf("Failed to close mnttab");
120 +                return NULL;
121 +        }
122 +
123   #endif
124 < #ifdef linux
125 <        if ((f=fopen("/etc/mtab", "r" ))==NULL){
124 > #ifdef LINUX
125 >        if ((f=setmntent("/etc/mtab", "r" ))==NULL){
126                  errf("Failed to open mounts (%m)");
127                  return NULL;
128          }
# Line 90 | Line 134 | char *get_disk_stats(){
134                  }
135  
136                  if((((strcmp(mp->mnt_type, MNTTYPE_NFS))==0) ||  (strcmp(mp->mnt_type,MNTTYPE_IGNORE)) ==0)) continue;
137 <                sd_ptr=malloc(sizeof(system_disks_t));
138 <                sd_ptr->disk=malloc(sizeof(disk_stat_t));
139 <                sd_ptr->disk->device_name=strdup(mp->mnt_fsname);
140 <                sd_ptr->disk->mnt_point=strdup(mp->mnt_dir);
137 >                if((sd_ptr=malloc(sizeof(system_disks_t))) == NULL){
138 >                        errf("malloc failed (%m)");
139 >                        return NULL;
140 >                }
141 >                if((sd_ptr->disk=malloc(sizeof(disk_stat_t))) == NULL){
142 >                        errf("malloc failed (%m)");
143 >                        return NULL;
144 >                }
145 >                if((sd_ptr->disk->device_name=strdup(mp->mnt_fsname)) == NULL){
146 >                        errf("strdup failed (%m)");
147 >                        return NULL;
148 >                }
149 >                if((sd_ptr->disk->mnt_point=strdup(mp->mnt_dir)) == NULL){
150 >                        errf("strdup failed (%m)");
151 >                        return NULL;
152 >                }
153                  sd_ptr->disk->size=((df.f_bsize/1024) * df.f_blocks);
154                  sd_ptr->disk->used=((df.f_bsize/1024) * df.f_blocks) -((df.f_bsize/1024) * df.f_bfree);
155                  sd_ptr->disk->avail=((df.f_bsize/1024) * df.f_bavail);
# Line 102 | Line 158 | char *get_disk_stats(){
158                  sd_ptr->next_disk=sd;
159                  sd=sd_ptr;
160          }
161 +
162 +        endmntent(f);
163 +
164   #endif
165   #ifdef FREEBSD
166          nummnt=getmntinfo(&mp , MNT_LOCAL);
# Line 110 | Line 169 | char *get_disk_stats(){
169                  return NULL;
170          }
171          
172 <        for(;counter<nummnt;counter++){
173 <                sd_ptr=malloc(sizeof(system_disks_t));
174 <                sd_ptr->disk=malloc(sizeof(disk_stat_t));
175 <                sd_ptr->disk->device_name=strdup(mp->f_mntfromname);
176 <                sd_ptr->disk->mnt_point=strdup(mp->f_mntonname);
172 >        for(counter=0;counter<nummnt;counter++){
173 >                if((sd_ptr=malloc(sizeof(system_disks_t))) == NULL){
174 >                        errf("malloc failed (%m)");
175 >                        return NULL;
176 >                }
177 >                if((sd_ptr->disk=malloc(sizeof(disk_stat_t))) == NULL){
178 >                        errf("malloc failed (%m)");
179 >                        return NULL;
180 >                }
181 >                if((sd_ptr->disk->device_name=strdup(mp->f_mntfromname))==NULL){
182 >                        errf("strdup failed (%m)");
183 >                        return NULL;
184 >                }
185 >                if((sd_ptr->disk->mnt_point=strdup(mp->f_mntonname))==NULL){
186 >                        errf("strdup failed (%m)");
187 >                        return NULL;
188 >                }
189                  sd_ptr->disk->size=((mp->f_bsize/1024) * mp->f_blocks);
190                  sd_ptr->disk->used=((mp->f_bsize/1024) * mp->f_blocks) -((mp->f_bsize/1024) * mp->f_bfree);
191                  sd_ptr->disk->avail=((mp->f_bsize/1024) * mp->f_bavail);
# Line 122 | Line 193 | char *get_disk_stats(){
193                  sd_ptr->disk->f_inodes=mp->f_ffree;
194                  sd_ptr->next_disk=sd;
195                  sd=sd_ptr;
196 +                mp++;
197          }
198   #endif
199  
200  
201          sd_ptr=sd;
202 <        while(sd_ptr!=NULL){
203 <                printf("%s\n", sd_ptr->disk->device_name);
204 <                printf("%s\n", sd_ptr->disk->mnt_point);
205 <                printf("%ld\n", sd_ptr->disk->size);
206 <                printf("%ld\n", sd_ptr->disk->used);
207 <                printf("%ld\n", sd_ptr->disk->avail);
208 <
202 >        xml_disk_stats=strdup("<disk>");
203 >        
204 >        for(counter=0;sd_ptr!=NULL;counter++){
205 >                xml_disk_stats_ptr=xml_disk_stats;
206 >                if((xml_disk_stats=strf("%s<p%d name=\"%s\" mount=\"%s\" kbytes=\"%ld\" used=\"%ld\" avail=\"%ld\" totalinodes=\"%ld\" freeinodes=\"%ld\"></p%d>", xml_disk_stats, counter, sd_ptr->disk->device_name, sd_ptr->disk->mnt_point, sd_ptr->disk->size, sd_ptr->disk->used, sd_ptr->disk->avail, sd_ptr->disk->t_inodes, sd_ptr->disk->f_inodes, counter)) == NULL){
207 >                        errf("strf failed (%m)");
208 >                        return NULL;
209 >                }
210 >                free(xml_disk_stats_ptr);
211                  sd_ptr=sd_ptr->next_disk;
138                counter++;
212          }
213 +        xml_disk_stats_ptr=xml_disk_stats;
214 +        xml_disk_stats=strf("%s</disk>",xml_disk_stats);
215 +        free(xml_disk_stats_ptr);      
216  
217 <        return "jibble";
217 >        /* Cleaning up */
218 >        sd_ptr=sd;
219 >        while(sd_ptr!=NULL){
220 >                sd=sd_ptr->next_disk;
221 >                free(sd_ptr->disk->device_name);
222 >                free(sd_ptr->disk->mnt_point);
223 >                free(sd_ptr->disk);
224 >                free(sd_ptr);
225 >                sd_ptr=sd;
226 >        }
227 >
228 >        return xml_disk_stats;
229   }
230  
144 int main(){
145        printf("%s",get_disk_stats());
146        exit(0);
147 }      
148                        
149
150        

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines