forked from Atoptool/atop
-
Notifications
You must be signed in to change notification settings - Fork 0
/
photosyst.h
301 lines (246 loc) · 9.27 KB
/
photosyst.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
/*
** ATOP - System & Process Monitor
**
** The program 'atop' offers the possibility to view the activity of
** the system on system-level as well as process-level.
**
** Include-file describing system-level counters maintained.
** ================================================================
** Author: Gerlof Langeveld
** E-mail: [email protected]
** Date: November 1996
** LINUX-port: June 2000
**
** This program is free software; you can redistribute it and/or modify it
** under the terms of the GNU General Public License as published by the
** Free Software Foundation; either version 2, or (at your option) any
** later version.
**
** This program is distributed in the hope that it will be useful, but
** WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
** See the GNU General Public License for more details.
*/
#include "netstats.h"
#define MAXCPU 2048
#define MAXDSK 1024
#define MAXLVM 2048
#define MAXMDD 256
#define MAXINTF 128
#define MAXCONTAINER 128
#define MAXNFSMOUNT 64
#define MAXDKNAM 32
/************************************************************************/
struct memstat {
count_t physmem; // number of physical pages
count_t freemem; // number of free pages
count_t buffermem; // number of buffer pages
count_t slabmem; // number of slab pages
count_t cachemem; // number of cache pages
count_t cachedrt; // number of cache pages (dirty)
count_t totswap; // number of pages in swap
count_t freeswap; // number of free swap pages
count_t pgscans; // number of page scans
count_t pgsteal; // number of page steals
count_t allocstall; // try to free pages forced
count_t swouts; // number of pages swapped out
count_t swins; // number of pages swapped in
count_t commitlim; // commit limit in pages
count_t committed; // number of reserved pages
count_t shmem; // tot shmem incl. tmpfs (pages)
count_t shmrss; // resident shared memory (pages)
count_t shmswp; // swapped shared memory (pages)
count_t slabreclaim; // reclaimable slab (pages)
count_t tothugepage; // total huge pages (huge pages)
count_t freehugepage; // free huge pages (huge pages)
count_t hugepagesz; // huge page size (bytes)
count_t vmwballoon; // vmware claimed balloon pages
count_t cfuture[8]; // reserved for future use
};
/************************************************************************/
struct netstat {
struct ipv4_stats ipv4;
struct icmpv4_stats icmpv4;
struct udpv4_stats udpv4;
struct ipv6_stats ipv6;
struct icmpv6_stats icmpv6;
struct udpv6_stats udpv6;
struct tcp_stats tcp;
};
/************************************************************************/
struct freqcnt {
count_t maxfreq;/* frequency in MHz */
count_t cnt; /* number of clock ticks times state */
count_t ticks; /* number of total clock ticks */
/* if zero, cnt is actul freq */
};
struct percpu {
int cpunr;
count_t stime; /* system time in clock ticks */
count_t utime; /* user time in clock ticks */
count_t ntime; /* nice time in clock ticks */
count_t itime; /* idle time in clock ticks */
count_t wtime; /* iowait time in clock ticks */
count_t Itime; /* irq time in clock ticks */
count_t Stime; /* softirq time in clock ticks */
count_t steal; /* steal time in clock ticks */
count_t guest; /* guest time in clock ticks */
struct freqcnt freqcnt;/* frequency scaling info */
count_t instr; /* CPU instructions */
count_t cycle; /* CPU cycles */
count_t cfuture[2]; /* reserved for future use */
};
struct cpustat {
count_t nrcpu; /* number of cpu's */
count_t devint; /* number of device interrupts */
count_t csw; /* number of context switches */
count_t nprocs; /* number of processes started */
float lavg1; /* load average last minute */
float lavg5; /* load average last 5 minutes */
float lavg15; /* load average last 15 minutes */
count_t cfuture[4]; /* reserved for future use */
struct percpu all;
struct percpu cpu[MAXCPU];
};
/************************************************************************/
struct perdsk {
char name[MAXDKNAM]; /* empty string for last */
count_t nread; /* number of read transfers */
count_t nrsect; /* number of sectors read */
count_t nwrite; /* number of write transfers */
count_t nwsect; /* number of sectors written */
count_t io_ms; /* number of millisecs spent for I/O */
count_t avque; /* average queue length */
count_t cfuture[4]; /* reserved for future use */
};
struct dskstat {
int ndsk; /* number of physical disks */
int nmdd; /* number of md volumes */
int nlvm; /* number of logical volumes */
struct perdsk dsk[MAXDSK];
struct perdsk mdd[MAXMDD];
struct perdsk lvm[MAXLVM];
};
/************************************************************************/
struct perintf {
char name[16]; /* empty string for last */
count_t rbyte; /* number of read bytes */
count_t rpack; /* number of read packets */
count_t rerrs; /* receive errors */
count_t rdrop; /* receive drops */
count_t rfifo; /* receive fifo */
count_t rframe; /* receive framing errors */
count_t rcompr; /* receive compressed */
count_t rmultic;/* receive multicast */
count_t rfuture[4]; /* reserved for future use */
count_t sbyte; /* number of written bytes */
count_t spack; /* number of written packets */
count_t serrs; /* transmit errors */
count_t sdrop; /* transmit drops */
count_t sfifo; /* transmit fifo */
count_t scollis;/* collisions */
count_t scarrier;/* transmit carrier */
count_t scompr; /* transmit compressed */
count_t sfuture[4]; /* reserved for future use */
char type; /* interface type ('e'/'w'/'?') */
long speed; /* interface speed in megabits/second */
long speedp; /* previous interface speed */
char duplex; /* full duplex (boolean) */
count_t cfuture[4]; /* reserved for future use */
};
struct intfstat {
int nrintf;
struct perintf intf[MAXINTF];
};
/************************************************************************/
struct pernfsmount {
char mountdev[128]; /* mountdevice */
count_t age; /* number of seconds mounted */
count_t bytesread; /* via normal reads */
count_t byteswrite; /* via normal writes */
count_t bytesdread; /* via direct reads */
count_t bytesdwrite; /* via direct writes */
count_t bytestotread; /* via reads */
count_t bytestotwrite; /* via writes */
count_t pagesmread; /* via mmap reads */
count_t pagesmwrite; /* via mmap writes */
count_t future[8];
};
struct nfsstat {
struct {
count_t netcnt;
count_t netudpcnt;
count_t nettcpcnt;
count_t nettcpcon;
count_t rpccnt;
count_t rpcbadfmt;
count_t rpcbadaut;
count_t rpcbadcln;
count_t rpcread;
count_t rpcwrite;
count_t rchits; /* repcache hits */
count_t rcmiss; /* repcache misses */
count_t rcnoca; /* uncached requests */
count_t nrbytes; /* read bytes */
count_t nwbytes; /* written bytes */
count_t future[8];
} server;
struct {
count_t rpccnt;
count_t rpcretrans;
count_t rpcautrefresh;
count_t rpcread;
count_t rpcwrite;
count_t future[8];
} client;
struct {
int nrmounts;
struct pernfsmount nfsmnt[MAXNFSMOUNT];
} nfsmounts;
};
/************************************************************************/
struct percontainer {
unsigned long ctid; /* container id */
unsigned long numproc; /* number of processes */
count_t system; /* */
count_t user; /* */
count_t nice; /* */
count_t uptime; /* */
count_t physpages; /* */
};
struct contstat {
int nrcontainer;
struct percontainer cont[MAXCONTAINER];
};
/************************************************************************/
/*
** experimental stuff for access to local HTTP daemons
*/
#define HTTPREQ "GET /server-status?auto HTTP/1.1\nHost: localhost\n\n"
struct wwwstat {
count_t accesses; /* total number of HTTP-requests */
count_t totkbytes; /* total kbytes transfer for HTTP-req */
count_t uptime; /* number of seconds since startup */
int bworkers; /* number of busy httpd-daemons */
int iworkers; /* number of idle httpd-daemons */
};
#if HTTPSTATS
int getwwwstat(unsigned short, struct wwwstat *);
#endif
/************************************************************************/
struct sstat {
struct cpustat cpu;
struct memstat mem;
struct netstat net;
struct intfstat intf;
struct dskstat dsk;
struct nfsstat nfs;
struct contstat cfs;
struct wwwstat www;
};
/*
** prototypes
*/
void photosyst (struct sstat *);
void deviatsyst(struct sstat *, struct sstat *, struct sstat *, long);
void totalsyst (char, struct sstat *, struct sstat *);