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

Comparing projects/cms/source/host/ihost-perl/plugins/linux/linux.c (file contents):
Revision 1.8 by pajs, Tue Apr 2 12:43:15 2002 UTC vs.
Revision 1.12 by pajs, Fri May 3 13:24:10 2002 UTC

# Line 8 | Line 8
8   #include <utmp.h>
9   #include <pwd.h>
10   #include <mntent.h>
11 + #include <dirent.h>
12 + #include <limits.h>
13  
14   int die() {
15      exit (1);
16   }
17  
18   void getLoadAv() {
19 + #ifdef OLDLIBC
20 +  
21 +  FILE *f;
22 +  char *loadavg;
23 +  char *load_p;
24 +  
25 +  if ((f=fopen("/proc/loadavg", "r" ))==NULL) {
26 +    errf("Failed to open load averages (%m)");
27 +    die();
28 +  }
29 +  
30 +  if ((loadavg=fpgetline(f)) == NULL) {
31 +    errf("Failed to read any data for load averages (%m)");
32 +    die();
33 +  }
34 +  
35 +  if ((fclose(f)) != 0) {
36 +    errf("Failed to close file (%m).");
37 +    die();
38 +  }
39 +  
40 +  load_p=strtok(loadavg, " ");
41 +  printf("packet.load.load1 %s\n",load_p);
42 +  for(; (*load_p != ' ') && (*load_p != '\0'); load_p++);
43 +  load_p++;
44 +  if (load_p == NULL) abort();
45 +  load_p=strtok(load_p, " ");
46 +  if (load_p == NULL) abort();
47 +  printf("packet.load.load5 %s\n",load_p);
48 +  for(; (*load_p != ' ') && (*load_p != '\0'); load_p++);
49 +  load_p++;
50 +  if (load_p == NULL) abort();
51 +  load_p=strtok(load_p, " ");
52 +  if (load_p == NULL) abort();
53 +  printf("packet.load.load15 %s\n",load_p);
54  
55 + #else
56    double loadav[3];
57  
58    if((getloadavg(loadav,3)) == -1){
# Line 25 | Line 63 | void getLoadAv() {
63    printf("packet.load.load1 %.2f\n",loadav[0]);
64    printf("packet.load.load5 %.2f\n",loadav[1]);
65    printf("packet.load.load15 %.2f\n",loadav[2]);
66 <  
66 > #endif
67   }
68  
69   void getMemInfo() {
# Line 212 | Line 250 | void cpustats() {
250   }
251  
252   void processStats() {
253 <    int sleeping=-1;
253 >    int sleeping=0;
254      int zombie=0;
255      int stopped=0;
256      int running=0;
257      int nousers=0;
258      char *line;
259 <    char *line_p;
259 >    char *line_ptr;
260      struct utmp *entry;
261 <    
261 >    DIR *procdir;
262 >    struct dirent *procent;
263 >    char fname[_POSIX_PATH_MAX];
264      FILE *f;
265 <    
266 <    if((f=popen("/bin/ps -Al" , "r")) == NULL) {
267 <        errf("Failed to get process stats (%m)");
268 <        die();
265 >    
266 >    chdir("/proc");
267 >    if((procdir=opendir(".")) == NULL){
268 >      errf("Failed to open proc (%m)");
269 >      exit(1);
270      }
230    
231    while((line=fpgetline(f)) != NULL) {
271  
272 <      line_p=line;
273 <      for(; (*line_p == ' ') && (*line_p != '\0'); line_p++);
274 <      line_p=strchr(line_p, ' ');
275 <      for(; (*line_p == ' ') && (*line_p != '\0'); line_p++);
276 <      if (line_p==NULL) abort();
277 <      /* Ok, we should now be at the state :) .. */
278 <      if (*line_p=='S') sleeping++;
279 <      if (*line_p=='R') running++;
280 <      if (*line_p=='Z') zombie++;
281 <      if (*line_p=='T') stopped++;
272 >    while((procent = readdir(procdir)) != NULL){
273 >      if(atoi(procent->d_name) == 0) continue;
274 >      strncpy(fname, procent->d_name, _POSIX_PATH_MAX-7);
275 >      strcat(fname, "/status");
276 >
277 >      if((f=fopen(fname, "r")) == NULL){
278 >         errf("Failed to open process stat (%m)");
279 >         exit(1);
280 >      }
281 >    
282 >      while((line=fpgetline(f)) != NULL){
283 >         if(strncasecmp(line,"State:",6)==0) break;
284 >      }
285 >
286 >      line_ptr=line;
287 >      for(;*line_ptr++ != '\t';);
288 >    
289 >
290 >      if(*line_ptr=='R') running++;
291 >      if(*line_ptr=='S') sleeping++;
292 >      if(*line_ptr=='Z') zombie++;
293 >      if(*line_ptr=='T') stopped++;
294 >      if(*line_ptr=='D') stopped++;
295 >
296      }
297 <    
298 <    if((pclose(f)) == -1) {
246 <        errf("Failed to close process stats (%m)");
247 <        die();
248 <    }
249 <    
297 >    closedir(procdir);
298 >
299      printf("packet.users.list");
300      
301      while((entry=getutent()) != NULL) {

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines