ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/cms/source/host/ihost-perl/plugins/freebsd/freebsd.c
Revision: 1.3
Committed: Thu Mar 21 16:40:11 2002 UTC (23 years, 9 months ago) by pajs
Content type: text/plain
Branch: MAIN
Changes since 1.2: +25 -1 lines
Log Message:
Added getting user stats.

File Contents

# Content
1 #include <stdio.h>
2 #include "ukcprog.h"
3 #include <sys/param.h>
4 #include <sys/ucred.h>
5 #include <sys/mount.h>
6 #include <string.h>
7 #include <stdlib.h>
8 #include <sys/utsname.h>
9 #include <sys/types.h>
10 #include <utmp.h>
11
12 void die(){
13 exit(1);
14 }
15
16 void diskStats(){
17 struct statfs *mp;
18 int nummnt;
19 int counter=0;
20 char *mntpnt;
21 char *devicename;
22
23 nummnt=getmntinfo(&mp , MNT_LOCAL);
24 if (nummnt<=0){
25 errf("Failed to get disk stats (%m)");
26 die();
27 }
28
29 mntpnt=malloc(MNAMELEN);
30 devicename=malloc(MNAMELEN);
31
32 for(;counter<nummnt;counter++){
33 strncpy(mntpnt, mp->f_mntonname ,MNAMELEN);
34 strncpy(devicename, mp->f_mntfromname ,MNAMELEN);
35 printf("packet.disk.p%d.attributes.mount %s\n", counter, mntpnt);
36 printf("packet.disk.p%d.attributes.name %s\n", counter, devicename);
37 printf("packet.disk.p%d.attributes.kbytes %lu\n",counter, ((mp->f_bsize/1024) * mp->f_blocks));
38 printf("packet.disk.p%d.attributes.used %lu\n",counter, (((mp->f_bsize/1024) * mp->f_blocks) -((mp->f_bsize/1024) * mp->f_bfree)));
39 printf("packet.disk.p%d.attributes.avail %lu\n",counter, (mp->f_bsize/1024) * mp->f_bavail);
40 printf("packet.disk.p%d.attributes.totalinodes %lu\n", counter, mp->f_files);
41 printf("packet.disk.p%d.attributes.freeinodes %lu\n",counter, mp->f_ffree);
42
43 mp++;
44 }
45
46
47 }
48
49 void osStats(){
50 struct utsname os;
51
52 if((uname(&os)) != 0){
53 errf("Failed to get os stats (%m)");
54 die();
55 }
56
57 printf("packet.os.name %s\n", os.sysname);
58 printf("packet.os.release %s\n" , os.release);
59 printf("packet.os.version %s\n", os.version);
60 printf("packet.os.sysname %s\n" , os.nodename);
61 printf("packet.os.platform %s\n", os.machine);
62
63 }
64 void loadStats(){
65 double loadav[3];
66
67 if((getloadavg(loadav,3)) == -1){
68 errf("Failed to get load averages (%m)");
69 die();
70 }
71
72 printf("packet.load.load1 %.2f\n",loadav[0]);
73 printf("packet.load.load5 %.2f\n",loadav[1]);
74 printf("packet.load.load15 %.2f\n",loadav[2]);
75 }
76
77 void userStats(){
78 struct utmp users;
79 FILE *f;
80 int numusers=0;
81
82 if ((f=fopen(_PATH_UTMP, "r")) == NULL){
83 errf("Failed to get user stats(%m)");
84 die();
85 }
86
87 printf("packet.users.list");
88
89 while((fread(&users, sizeof(users),1,f)) != 0){
90 if (users.ut_name[0] == '\0') continue;
91 printf(" %s",users.ut_name);
92 numusers++;
93 }
94
95 printf("\npacket.users.count %d\n",numusers);
96
97
98
99 }
100
101 int main(){
102 diskStats();
103 osStats();
104 loadStats();
105 userStats();
106 exit(0);
107 }