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
|
/*
** 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: gerlof.langeveld@atoptool.nl
** 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 64
#define MAXDSK 256
#define MAXLVM 256
#define MAXMDD 128
#define MAXDKNAM 32
#define MAXINTF 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 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 cfuture[4]; /* 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 cfuture[1]; /* 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 */
long speed; /* interface speed in megabits/second */
char duplex; /* full duplex (boolean) */
count_t cfuture[4]; /* reserved for future use */
};
struct intfstat {
int nrintf;
struct perintf intf[MAXINTF];
};
/************************************************************************/
/*
** 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 wwwstat www;
};
/*
** prototypes
*/
void photosyst (struct sstat *);
void deviatsyst(struct sstat *, struct sstat *, struct sstat *);
void totalsyst (char, struct sstat *, struct sstat *);
|