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

Comparing projects/cms/source/host/ihost-perl/plugins/solaris/solaris.c (file contents):
Revision 1.2 by pajs, Fri Mar 8 14:57:28 2002 UTC vs.
Revision 1.5 by pajs, Mon Mar 18 13:46:12 2002 UTC

# Line 2 | Line 2
2   #include <sys/types.h>
3   #include <sys/statvfs.h>
4   #include <sys/mnttab.h>
5 < #include <ukcprog.h>
5 > #include "ukcprog.h"
6   #include <sys/utsname.h>
7   #include <sys/loadavg.h>
8 + #include <utmp.h>
9 + #include <kstat.h>
10 + #include <sys/sysinfo.h>
11 + #include <unistd.h>
12 + #include <sys/stat.h>
13 + #include <sys/swap.h>
14 + #include <stdlib.h>
15 + #include <strings.h>
16  
17 < void die()
18 < {
11 <   exit(1);
17 > void die(){
18 >  exit(1);
19   }
20  
21  
22 < void diskStats()
23 < {
24 <   struct mnttab mp;
25 <   struct statvfs df;
26 <   FILE *f;
27 <   int counter=0;
22 > void diskStats(){
23 >  struct mnttab mp;
24 >  struct statvfs df;
25 >  FILE *f;
26 >  int counter=0;
27 >  
28 >  if ((f=fopen("/etc/mnttab", "r" ))==NULL){
29 >      errf("Failed to open mounts (%m)");
30 >      die();
31 >  }
32    
33 <    if ((f=fopen("/etc/mnttab", "r" ))==NULL)
34 <     {
35 <        errf("Failed to open mounts (%m)");
36 <        die();
37 <     }
27 <  
28 <   while((getmntent(f, &mp)) == 0)
29 <     {      
30 <        if ((statvfs(mp.mnt_mountp, &df)) !=0)
31 <             {
32 <                errf("Failed to gets fs stats (%m)");
33 <                die();
34 <             }
33 >  while((getmntent(f, &mp)) == 0){      
34 >    if ((statvfs(mp.mnt_mountp, &df)) !=0){
35 >      errf("Failed to gets fs stats (%m)");
36 >      die();
37 >    }
38          
39 <        printf("packet.disk.p%d.attributes.mount %s\n", counter, mp.mnt_mountp);
40 <        printf("packet.disk.p%d.attributes.name %s\n", counter, mp.mnt_special);
41 <        printf("packet.disk.p%d.attributes.kbytes %lu\n",counter, ((df.f_frsize/1024) * df.f_blocks));
42 <        printf("packet.disk.p%d.attributes.used %lu\n",counter, (((df.f_frsize/1024) * df.f_blocks) -((df.f_frsize/1024) * df.f_bfree)));
43 <        printf("packet.disk.p%d.attributes.avail %lu\n",counter, (df.f_frsize/1024) * df.f_bavail);
44 <        printf("packet.disk.p%d.attributes.totalinodes %lu\n", counter, df.f_files);
45 <        printf("packet.disk.p%d.attributes.freeinodes %lu\n",counter, df.f_ffree);
46 <        
47 <        counter++;
48 <     }
39 >    printf("packet.disk.p%d.attributes.mount %s\n", counter, mp.mnt_mountp);
40 >    printf("packet.disk.p%d.attributes.name %s\n", counter, mp.mnt_special);
41 >    printf("packet.disk.p%d.attributes.kbytes %lu\n",counter, ((df.f_frsize/1024) * df.f_blocks));
42 >    printf("packet.disk.p%d.attributes.used %lu\n",counter, (((df.f_frsize/1024) * df.f_blocks) -((df.f_frsize/1024) * df.f_bfree)));
43 >    printf("packet.disk.p%d.attributes.avail %lu\n",counter, (df.f_frsize/1024) * df.f_bavail);
44 >    printf("packet.disk.p%d.attributes.totalinodes %lu\n", counter, df.f_files);
45 >    printf("packet.disk.p%d.attributes.freeinodes %lu\n",counter, df.f_ffree);
46 >    
47 >    counter++;
48 >  }
49   }
50  
51 < void osStats()
52 < {
53 <   struct utsname os;
51 > void osStats(){
52 >  struct utsname os;
53 >  
54 >  if((uname(&os)) == -1){
55 >    errf("Failed to get os stats (%m)");
56 >    die();
57 >  }
58  
59 <   if((uname(&os)) == -1)
60 <     {
61 <        errf("Failed to get os stats (%m)");
62 <        die();
63 <     }
59 >  printf("packet.os.name %s\n", os.sysname);
60 >  printf("packet.os.release %s\n" , os.release);
61 >  printf("packet.os.version %s\n", os.version);
62 >  printf("packet.os.sysname %s\n" , os.nodename);
63 >  printf("packet.os.platform %s\n", os.machine);
64  
58   printf("packet.os.name %s\n", os.sysname);
59   printf("packet.os.release %s\n" , os.release);
60   printf("packet.os.version %s\n", os.version);
61   printf("packet.os.sysname %s\n" , os.nodename);
62   printf("packet.os.platform %s\n", os.machine);
63
65   }  
66    
67 < void loadStats()
67 < {
67 > void loadStats(){
68    double loadav[3];
69    
70 <  if((getloadavg(loadav,3)) == -1)
71 <    {
72 <      errf("Failed to get load averages (%m)");
73 <      die();
74 <  
70 >  if((getloadavg(loadav,3)) == -1){
71 >    errf("Failed to get load averages (%m)");
72 >    die();    
73    }
74    
75    printf("packet.load.load1 %.2f\n",loadav[0]);
# Line 79 | Line 77 | void loadStats()
77    printf("packet.load.load15 %.2f\n",loadav[2]);
78   }
79  
80 < int main()
81 < {
80 > void userStats(){
81 >  int nousers=0;
82 >  struct utmp *entry;
83 >  
84 >  printf("packet.users.list");
85 >  
86 >  while((entry=getutent()) != NULL){
87 >    if(entry->ut_type==USER_PROCESS)
88 >      {
89 >        printf(" %s",entry->ut_user);
90 >        nousers++;
91 >      }
92 >  }
93 >  printf("\npacket.users.count %d\n", nousers);
94 > }
95  
96 + void systemStats(){
97 +  kstat_ctl_t *kc;
98 +  kstat_t *ksp;
99 +  kstat_named_t *kn;
100 +  int pagesize;
101 +  cpu_stat_t cs;
102 +  uint_t cpustats[4][2];
103 +  float usage;
104 +  uint_t user, kernel, idle, iowait, total;
105 +  ulong totalmem, freemem;
106 +  long swaptotal, swapused;
107 +  
108 +  struct anoninfo ai;
109 +
110 +
111 +  if ((kc = kstat_open()) == NULL) {
112 +    errf("kstat_open failure (%m)");
113 +    die();
114 +  }
115 +
116 +  /* Borrowed from gkrellm ;) */
117 +
118 +  for (ksp = kc->kc_chain; ksp!=NULL; ksp = ksp->ks_next) {
119 +    if ((strcmp(ksp->ks_module, "cpu_stat")) != 0)
120 +      continue;
121 +    if (kstat_read(kc, ksp, &cs) == -1) {
122 +      perror("kstat_read");
123 +      continue;
124 +    }
125 +  }
126 +
127 +  cpustats[0][0]=cs.cpu_sysinfo.cpu[CPU_USER];
128 +  cpustats[1][0]=cs.cpu_sysinfo.cpu[CPU_WAIT];
129 +  cpustats[2][0]=cs.cpu_sysinfo.cpu[CPU_KERNEL];
130 +  cpustats[3][0]=cs.cpu_sysinfo.cpu[CPU_IDLE];
131 +  
132 +  sleep(1);
133 +  
134 +  if (kstat_chain_update(kc) == -1) {
135 +    errf("Kstat update failure (%m)");
136 +    die();
137 +  }
138 +  
139 +  for (ksp = kc->kc_chain; ksp!=NULL ; ksp = ksp->ks_next) {
140 +    if ((strcmp(ksp->ks_module, "cpu_stat")) != 0)
141 +      continue;
142 +    if (kstat_read(kc, ksp, &cs) == -1) {
143 +      perror("kstat_read");
144 +      continue;
145 +      }
146 +  }
147 +
148 +  cpustats[0][1]=cs.cpu_sysinfo.cpu[CPU_USER];
149 +  cpustats[1][1]=cs.cpu_sysinfo.cpu[CPU_WAIT];
150 +  cpustats[2][1]=cs.cpu_sysinfo.cpu[CPU_KERNEL];
151 +  cpustats[3][1]=cs.cpu_sysinfo.cpu[CPU_IDLE];
152 +
153 +  user=cpustats[0][1]-cpustats[0][0];
154 +  iowait=cpustats[1][1]-cpustats[1][0];
155 +  kernel=cpustats[2][1]-cpustats[2][0];
156 +  idle=cpustats[3][1]-cpustats[3][0];
157 +
158 +  total=user+kernel+idle+iowait;
159 +  
160 +  usage=((((float)user)/((float)total))*100.00);
161 +
162 +  printf("user : %u\n",user);
163 +  printf("total : %u\n",total);
164 +
165 +  printf("packet.cpu.user %3.2f\n", usage);
166 +  usage=((((float)kernel)/((float)total))*100.00);
167 +  printf("packet.cpu.kernel %3.2f\n", usage);
168 +  usage=((((float)idle)/((float)total))*100.00);
169 +  printf("packet.cpu.idle %3.2f\n", usage);
170 +  usage=((((float)iowait)/((float)total))*100.00);
171 +  printf("packet.cpu.iowait %3.2f\n", usage);
172 +
173 +  /* MEMORY STATS */
174 +  
175 +  if((pagesize=sysconf(_SC_PAGESIZE)) == -1){
176 +    errf("Failed to get pagesize (%m)");
177 +    die();
178 +  }
179 +
180 +  if((totalmem=sysconf(_SC_PHYS_PAGES)) == -1){
181 +    errf("Failed to get total memory");
182 +    die();
183 +  }
184 +  
185 +  totalmem=((totalmem*pagesize)/1024)/1024;
186 +  
187 +  ksp = kstat_lookup(kc, "unix", 0, "system_pages");
188 +  if (kstat_read(kc, ksp, 0) == -1) {
189 +    perror("kstat_read");
190 +    die();
191 +  }  
192 +
193 +  if((kn=kstat_data_lookup(ksp, "freemem")) == NULL){
194 +    errf("Failed to get free memory (%m)");
195 +    die();
196 +  }
197 +  
198 +  freemem=(((kn->value.ul)*pagesize)/1024)/1024;
199 +
200 +  printf("packet.memory.total %lu\n",totalmem);
201 +  printf("packet.memory.free %lu\n",freemem);
202 +  printf("packet.memory.used %lu\n",(totalmem-freemem));
203 +
204 +
205 +  if (swapctl(SC_AINFO, &ai) == -1) {
206 +    errf("Failed to get swap details (%m)");
207 +    die();
208 +  }
209 +
210 +  swaptotal=((ai.ani_max/1024)*pagesize)/1024;
211 +  swapused=((ai.ani_resv/1024)*pagesize)/1024;
212 +
213 +  /* Ok this is actually for TOP combatability, but this is not
214 +     total swap, cos it actually also seems to include memory stats. */
215 +  printf("packet.swap.total %ld\n",swaptotal);
216 +  printf("packet.swap.used %ld\n", swapused);
217 +  printf("packet.swap.free %lu\n", (swaptotal-swapused));
218 +
219 + }    
220 +  
221 + void processStats() {
222 +    int sleeping=-1;
223 +    int zombie=0;
224 +    int stopped=0;
225 +    int running=0;
226 +    char *line;
227 +    char *line_p;
228 +
229 +
230 +    FILE *f;
231 +
232 +    if((f=popen("/bin/ps -Al" , "r")) == NULL) {
233 +        errf("Failed to get process stats (%m)");
234 +        die();
235 +    }
236 +
237 +    while((line=fpgetline(f)) != NULL) {
238 +      line_p=line;
239 +      for(; (*line_p == ' ') && (*line_p != '\0'); line_p++);
240 +      line_p=strchr(line_p, ' ');
241 +      for(; (*line_p == ' ') && (*line_p != '\0'); line_p++);
242 +      if (line_p==NULL) abort();
243 +      /* Ok, we should now be at the state :) .. */
244 +      if (*line_p=='S') sleeping++;
245 +      if (*line_p=='R') running++;
246 +      if (*line_p=='Z') zombie++;
247 +      if (*line_p=='T') stopped++;
248 +    }
249 +
250 +    if((pclose(f)) == -1) {
251 +        errf("Failed to close process stats (%m)");
252 +        die();
253 +    }
254 +
255 +    printf("packet.processes.sleeping %d\n",sleeping);
256 +    printf("packet.processes.cpu %d\n",running);
257 +    printf("packet.processes.zombie %d\n",zombie);
258 +    printf("packet.processes.stopped %d\n", stopped);
259 +    printf("packet.processes.total %d\n", (sleeping+running+zombie+stopped));
260 +
261 + }
262 +
263 +
264 + int main(){
265    diskStats();
266    osStats();
267    loadStats();
268 +  userStats();
269 +  systemStats();
270 +  processStats();
271    return 0;
272   }
273  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines