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.4 by pajs, Thu Mar 14 17:05:53 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  
13 < void die()
14 < {
11 <   exit(1);
13 > void die(){
14 >  exit(1);
15   }
16  
17  
18 < void diskStats()
19 < {
20 <   struct mnttab mp;
21 <   struct statvfs df;
22 <   FILE *f;
23 <   int counter=0;
18 > void diskStats(){
19 >  struct mnttab mp;
20 >  struct statvfs df;
21 >  FILE *f;
22 >  int counter=0;
23 >  
24 >  if ((f=fopen("/etc/mnttab", "r" ))==NULL){
25 >      errf("Failed to open mounts (%m)");
26 >      die();
27 >  }
28    
29 <    if ((f=fopen("/etc/mnttab", "r" ))==NULL)
30 <     {
31 <        errf("Failed to open mounts (%m)");
32 <        die();
33 <     }
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 <             }
29 >  while((getmntent(f, &mp)) == 0){      
30 >    if ((statvfs(mp.mnt_mountp, &df)) !=0){
31 >      errf("Failed to gets fs stats (%m)");
32 >      die();
33 >    }
34          
35 <        printf("packet.disk.p%d.attributes.mount %s\n", counter, mp.mnt_mountp);
36 <        printf("packet.disk.p%d.attributes.name %s\n", counter, mp.mnt_special);
37 <        printf("packet.disk.p%d.attributes.kbytes %lu\n",counter, ((df.f_frsize/1024) * df.f_blocks));
38 <        printf("packet.disk.p%d.attributes.used %lu\n",counter, (((df.f_frsize/1024) * df.f_blocks) -((df.f_frsize/1024) * df.f_bfree)));
39 <        printf("packet.disk.p%d.attributes.avail %lu\n",counter, (df.f_frsize/1024) * df.f_bavail);
40 <        printf("packet.disk.p%d.attributes.totalinodes %lu\n", counter, df.f_files);
41 <        printf("packet.disk.p%d.attributes.freeinodes %lu\n",counter, df.f_ffree);
42 <        
43 <        counter++;
44 <     }
35 >    printf("packet.disk.p%d.attributes.mount %s\n", counter, mp.mnt_mountp);
36 >    printf("packet.disk.p%d.attributes.name %s\n", counter, mp.mnt_special);
37 >    printf("packet.disk.p%d.attributes.kbytes %lu\n",counter, ((df.f_frsize/1024) * df.f_blocks));
38 >    printf("packet.disk.p%d.attributes.used %lu\n",counter, (((df.f_frsize/1024) * df.f_blocks) -((df.f_frsize/1024) * df.f_bfree)));
39 >    printf("packet.disk.p%d.attributes.avail %lu\n",counter, (df.f_frsize/1024) * df.f_bavail);
40 >    printf("packet.disk.p%d.attributes.totalinodes %lu\n", counter, df.f_files);
41 >    printf("packet.disk.p%d.attributes.freeinodes %lu\n",counter, df.f_ffree);
42 >    
43 >    counter++;
44 >  }
45   }
46  
47 < void osStats()
48 < {
49 <   struct utsname os;
47 > void osStats(){
48 >  struct utsname os;
49 >  
50 >  if((uname(&os)) == -1){
51 >    errf("Failed to get os stats (%m)");
52 >    die();
53 >  }
54  
55 <   if((uname(&os)) == -1)
56 <     {
57 <        errf("Failed to get os stats (%m)");
58 <        die();
59 <     }
55 >  printf("packet.os.name %s\n", os.sysname);
56 >  printf("packet.os.release %s\n" , os.release);
57 >  printf("packet.os.version %s\n", os.version);
58 >  printf("packet.os.sysname %s\n" , os.nodename);
59 >  printf("packet.os.platform %s\n", os.machine);
60  
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
61   }  
62    
63 < void loadStats()
67 < {
63 > void loadStats(){
64    double loadav[3];
65    
66 <  if((getloadavg(loadav,3)) == -1)
67 <    {
68 <      errf("Failed to get load averages (%m)");
73 <      die();
74 <  
66 >  if((getloadavg(loadav,3)) == -1){
67 >    errf("Failed to get load averages (%m)");
68 >    die();    
69    }
70    
71    printf("packet.load.load1 %.2f\n",loadav[0]);
# Line 79 | Line 73 | void loadStats()
73    printf("packet.load.load15 %.2f\n",loadav[2]);
74   }
75  
76 < int main()
77 < {
76 > void userStats(){
77 >  int nousers=0;
78 >  struct utmp *entry;
79 >  
80 >  printf("packet.users.list");
81 >  
82 >  while((entry=getutent()) != NULL){
83 >    if(entry->ut_type==USER_PROCESS)
84 >      {
85 >        printf(" %s",entry->ut_user);
86 >        nousers++;
87 >      }
88 >  }
89 >  printf("\npacket.users.count %d\n", nousers);
90 > }
91  
92 + void systemStats(){
93 +  kstat_ctl_t *kc;
94 +  kstat_t *ksp;
95 +  kstat_named_t *knp;
96 +  cpu_stat_t cs;
97 +  uint_t cpustats[4][2];
98 +  float usage;
99 +  uint_t user, kernel, idle, iowait, total;
100 +
101 +  if ((kc = kstat_open()) == NULL) {
102 +    errf("kstat_open failure (%m)");
103 +    die();
104 +  }
105 +
106 +  /* Borrowed from gkrellm ;) */
107 +
108 +  for (ksp = kc->kc_chain; ksp!=NULL; ksp = ksp->ks_next) {
109 +    if ((strcmp(ksp->ks_module, "cpu_stat")) != 0)
110 +      continue;
111 +    if (kstat_read(kc, ksp, &cs) == -1) {
112 +      perror("kstat_read");
113 +      continue;
114 +    }
115 +  }
116 +
117 +  cpustats[0][0]=cs.cpu_sysinfo.cpu[CPU_USER];
118 +  cpustats[1][0]=cs.cpu_sysinfo.cpu[CPU_WAIT];
119 +  cpustats[2][0]=cs.cpu_sysinfo.cpu[CPU_KERNEL];
120 +  cpustats[3][0]=cs.cpu_sysinfo.cpu[CPU_IDLE];
121 +  
122 +  sleep(1);
123 +  
124 +  if (kstat_chain_update(kc) == -1) {
125 +    errf("Kstat update failure (%m)");
126 +    die();
127 +  }
128 +  
129 +  for (ksp = kc->kc_chain; ksp!=NULL ; ksp = ksp->ks_next) {
130 +    if ((strcmp(ksp->ks_module, "cpu_stat")) != 0)
131 +      continue;
132 +    if (kstat_read(kc, ksp, &cs) == -1) {
133 +      perror("kstat_read");
134 +      continue;
135 +      }
136 +  }
137 +
138 +  cpustats[0][1]=cs.cpu_sysinfo.cpu[CPU_USER];
139 +  cpustats[1][1]=cs.cpu_sysinfo.cpu[CPU_WAIT];
140 +  cpustats[2][1]=cs.cpu_sysinfo.cpu[CPU_KERNEL];
141 +  cpustats[3][1]=cs.cpu_sysinfo.cpu[CPU_IDLE];
142 +
143 +  user=cpustats[0][1]-cpustats[0][0];
144 +  iowait=cpustats[1][1]-cpustats[1][0];
145 +  kernel=cpustats[2][1]-cpustats[2][0];
146 +  idle=cpustats[3][1]-cpustats[3][0];
147 +
148 +  total=user+kernel+idle+iowait;
149 +  
150 +  usage=((((float)user)/((float)total))*100.00);
151 +
152 +  printf("user : %u\n",user);
153 +  printf("total : %u\n",total);
154 +
155 +  printf("packet.cpu.user %3.2f\n", usage);
156 +  usage=((((float)kernel)/((float)total))*100.00);
157 +  printf("packet.cpu.kernel %3.2f\n", usage);
158 +  usage=((((float)idle)/((float)total))*100.00);
159 +  printf("packet.cpu.idle %3.2f\n", usage);
160 +  usage=((((float)iowait)/((float)total))*100.00);
161 +  printf("packet.cpu.iowait %3.2f\n", usage);
162 +
163 +  /* if((ksp = kstat_lookup(kc, "unix", -1, "system_pages")) == NULL){
164 +    errf("Mem lookup failed (%m)");
165 +    die();
166 +  }
167 +
168 +  if((knp = (kstat_named_t *)kstat_data_lookup(ksp, "pagesfree")) == NULL){
169 +    errf("Mem lookup failed (%m)");
170 +    die();
171 +  }
172 +  
173 +  printf("%ui32\n",  knp->value.ui32);
174 +  */
175 + }
176 +    
177 +  
178 +
179 + int main(){
180    diskStats();
181    osStats();
182    loadStats();
183 +  userStats();
184 +  systemStats();
185 +
186    return 0;
187   }
188  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines