root/src/apachetop.h

Revision 5, 5.7 KB (checked in by nick, 3 years ago)
Line 
1#ifndef _APACHETOP_H_
2#define _APACHETOP_H_
3
4#if HAVE_CONFIG_H
5# include "config.h"
6#endif
7
8#include <stdio.h>
9#include <errno.h>
10#include <ctype.h>
11#include <string.h>
12
13#if HAVE_STRINGS_H
14# include <strings.h>
15#endif
16
17#include <fcntl.h>
18
19#include <signal.h>
20
21#include <stdlib.h>
22#include <stdarg.h>
23#include <unistd.h>
24#include <sys/types.h>
25#include <sys/stat.h>
26
27#if TIME_WITH_SYS_TIME
28# include <sys/time.h>
29# include <time.h>
30#else
31# if HAVE_SYS_TIME_H
32#  include <sys/time.h>
33# else
34#  include <time.h>
35# endif
36#endif
37
38#if HAVE_SYS_SOCKET_H
39# include <sys/socket.h>
40#endif
41
42#if HAVE_NETINET_IN_H
43# include <netinet/in.h>
44#endif
45
46#if HAVE_ARPA_INET_H
47# include <arpa/inet.h>
48#endif
49
50#if HAVE_NETDB_H
51# include <netdb.h>
52#endif
53
54#if HAVE_PCRE_H
55# include <pcre.h>
56# include "pcre_cpp_wrapper.h"
57#endif
58
59#include <curses.h>
60
61#include <readline/readline.h>
62#include <readline/history.h>
63
64/* Use kqueue in preference to anything else.
65 *  If we don't have that, try FAM
66 *   If we don't have FAM, fall back to stat()
67*/
68#define USING_KQUEUE 1
69#define USING_FAM    2
70#define USING_STAT   3
71#if HAVE_KQUEUE
72# include <sys/event.h>
73# define POLLING_METHOD USING_KQUEUE
74#elif HAVE_FAM_H
75# include <fam.h>
76# define POLLING_METHOD USING_FAM
77#endif
78
79/* stat() fallback */
80#ifndef POLLING_METHOD
81# define POLLING_METHOD USING_STAT
82#endif
83
84#if HAVE_ADNS_H
85# include <adns.h>
86#endif
87
88
89#define getMIN(a,b) (a < b ? a : b)
90#define getMAX(a,b) (a > b ? a : b)
91
92#ifndef MAXPATHLEN
93# define MAXPATHLEN 128
94#endif
95
96/* upon startup, each input file is put into an element of this array,
97 * starting at 0. The struct under this maps the current fd into this array
98 * so we can find it without iterating.
99*/
100struct input {
101        char *filename;
102        int fd;
103        ino_t inode;
104        short type; /* types defined in log.h */
105        time_t lastreq;
106
107        /* if open == false, then ApacheTop will periodically try to re-open
108         * this input file. */
109        bool open; /* is the file open or not? */
110
111#if (POLLING_METHOD == USING_FAM)
112        FAMRequest famreq;
113#endif
114};
115
116#include "filters.h"
117
118struct config {
119        #define SORT_REQCOUNT 1
120        #define SORT_REQPERSEC 2
121        #define SORT_BYTECOUNT 3
122        #define SORT_BYTESPERSEC 4
123        #define SORT_2XX 12 /* see display.cc around line 911 (shellsort)  */
124        #define SORT_3XX 13 /* for the consequences of changing these.     */
125        #define SORT_4XX 14 /* Logic there relies on them being            */
126        #define SORT_5XX 15 /* (retcode/100)+SORTTYPE_OFFSET_HACK          */
127        #define SORTTYPE_OFFSET_HACK 10
128        short sort, retcodes_sort;
129        short refresh_delay;
130
131        short do_resolving;
132
133        short selected_item_screen; /* screen position our marker is at */
134        unsigned int selected_item_pos; /* which url/ip/refpos it relates to */
135        short selected_item_mode; /* is it url/ip/ref pos? */
136        unsigned int selected_item_hash;
137
138        short current_display_size; /* how many lines we're displaying */
139
140        short input_count;
141
142        #define TIMED_CIRCLE 'T'
143        #define HITS_CIRCLE  'H'
144        int circle_mode;
145        int circle_size;
146
147        /* these defines are used in cf.filter too */
148        #define DISPLAY_URLS   1
149        #define DISPLAY_HOSTS  2
150        #define DISPLAY_REFS   3
151        #define DISPLAY_FILES  4
152        #define DISPLAY_DETAIL 9
153        short display_mode;
154
155        #define NUMBERS_HITS_BYTES  1
156        #define NUMBERS_RETCODES    2
157        short numbers_mode;
158
159        /* when in DISPLAY_DETAIL mode, display_mode is copied in here */
160        short display_mode_detail;
161        /* what would we like to display in DISPLAY_DETAIL modes? */
162        bool detail_display_hosts, detail_display_refs, detail_display_urls;
163
164        bool display_paused;
165        bool do_immed_display; /* signals a screen update is req'd */
166
167        /* filters */
168        Filter *urlfilter, *hostfilter, *reffilter;
169
170        /* url munging */
171        bool keep_querystring;
172        bool lowercase_urls;
173        unsigned short keep_segments;
174        bool preserve_ref_protocol;
175
176        bool debug;
177
178        bool exit; /* true when we want to finish */
179
180        /* keypress submenu */
181        #define SUBMENU_NONE          0
182
183        #define SUBMENU_SORT_HB       1
184        #define SUBMENU_SORT_RC       2
185
186        #define SUBMENU_DISP          4
187
188        #define SUBMENU_FILT          5
189        #define SUBMENU_FILT_ADD      6
190        #define SUBMENU_FILT_SHOW     7
191
192        #define SUBMENU_HELP          9
193        unsigned short in_submenu;
194        bool in_submenu_stay; /* stay in submenu till keypress? */
195        time_t in_submenu_time;
196
197};
198
199struct hitinfo {
200        double bytecount;
201        double reqcount;
202        time_t first, last;
203
204        /* for stats worked out in display.cc */
205        float rps, bps;
206};
207
208struct gstat {
209        time_t start; /* when did we start */
210
211        /* space for 1xx-5xx return codes */
212        struct hitinfo r_codes[6];
213
214        /* space for counting global hits and bytes per sec */
215        struct hitinfo alltime;
216};
217
218//#include "opt.h"
219#include "ohtbl.h"
220
221#if HAVE_ADNS_H
222# include "resolver.h"
223#endif
224
225#include "map.h"
226#include "circle.h"
227#include "hits_circle.h"
228#include "timed_circle.h"
229#include "display.h"
230#include "log.h"
231#include "queue.h"
232
233
234#define JAN 281
235#define FEB 269
236#define MAR 288
237#define APR 291
238#define MAY 295
239#define JUN 301
240#define JUL 299
241#define AUG 285
242#define SEP 296
243#define OCT 294
244#define NOV 307
245#define DEC 268
246
247#define DEBUG_OUTPUT "/tmp/atop.debug"
248
249/* this can be overridden from config.h via ./configure --with-logfile .. */
250#ifndef DEFAULT_LOGFILE
251# define DEFAULT_LOGFILE "/var/httpd/apache_log"
252#endif
253#define DEFAULT_CIRCLE_SIZE 30
254#define DEFAULT_CIRCLE_MODE TIMED_CIRCLE
255#define DEFAULT_SORT SORT_REQCOUNT
256#define DEFAULT_RETCODES_SORT SORT_2XX
257#define DEFAULT_REFRESH_DELAY 5
258#define DEFAULT_DISPLAY_MODE DISPLAY_URLS
259#define DEFAULT_NUMBERS_MODE NUMBERS_HITS_BYTES
260
261/* if the layout of the display changes, these need updating */
262#define COLS_RESERVED 25
263#define LINES_RESERVED 7
264
265#define MAX_INPUT_FILES 50
266
267int recordstats(struct logbits l);
268
269int read_key(int ch);
270
271#define SEEK_TO_END true
272#define NO_SEEK_TO_END false
273int new_file(char *filename, bool do_seek_to_end);
274
275void usage(void);
276int dprintf(const char *fmt, ...);
277
278static void catchsig(int s);
279static void catchwinch(int s);
280
281#endif
Note: See TracBrowser for help on using the browser.