system/apachetop: Uncompress the patches

Signed-off-by: Robby Workman <rworkman@slackbuilds.org>
This commit is contained in:
Robby Workman 2010-12-29 17:05:47 -06:00
parent 81a9bd1d3b
commit 6591f954f4
3 changed files with 240 additions and 2 deletions

View File

@ -55,10 +55,10 @@ find . -type d -exec chmod 0755 {} \; -o -type f -exec chmod a-s,u+rw,go-w {} \;
# Apply a patch by Aaron McClimont to allow writing statistics to a file. # Apply a patch by Aaron McClimont to allow writing statistics to a file.
# For like MRTG to use (or Cricket, Cacti, Torrus, whatever). # For like MRTG to use (or Cricket, Cacti, Torrus, whatever).
zcat $CWD/apachetop.outputfile.patch.gz | patch --backup -p0 patch -p0 < $CWD/apachetop.outputfile.patch
# Add mension of the feature added above to the manpage. # Add mension of the feature added above to the manpage.
cat $CWD/apachetop.manpage.diff | patch --backup -p0 patch -p0 < $CWD/apachetop.manpage.diff
# Add --with-adns=<path> if you have adns installed and want ApacheTop support # Add --with-adns=<path> if you have adns installed and want ApacheTop support
# Note: The log to parce can be overwritten at runtime, using the '-f' flag. # Note: The log to parce can be overwritten at runtime, using the '-f' flag.

View File

@ -0,0 +1,238 @@
Index: src/apachetop.cc
===================================================================
--- src/apachetop.cc (revision 873)
+++ src/apachetop.cc (revision 874)
@@ -85,6 +85,7 @@
cf.debug = true;
cf.current_display_size = 0;
cf.input_count = 0;
+ cf.output_file = "";
cf.circle_size = DEFAULT_CIRCLE_SIZE;
cf.circle_mode = DEFAULT_CIRCLE_MODE;
cf.sort = DEFAULT_SORT;
@@ -136,7 +137,7 @@
#endif
/* process commandline {{{ */
- while ((ch = getopt(argc, argv, "f:H:T:hqlrs:pd:")) != -1)
+ while ((ch = getopt(argc, argv, "f:o:H:T:hqlrs:pd:")) != -1)
{
switch(ch)
{
@@ -150,6 +151,9 @@
else
cf.input_count++;
break;
+ case 'o':
+ cf.output_file = optarg;
+ break;
case 'T':
x = atoi(optarg);
seen_t = true;
@@ -1043,24 +1047,25 @@
fprintf(stderr,
"ApacheTop v%s - Usage:\n"
"File options:\n"
- " -f logfile open logfile (assumed common/combined) [%s]\n"
- " (repeat option for more than one source)\n"
+ " -f logfile open logfile (assumed common/combined) [%s]\n"
+ " (repeat option for more than one source)\n"
+ " -o outfile output logfile\n"
"\n"
"URL/host/referrer munging options:\n"
- " -q keep query strings [%s]\n"
- " -l lowercase all URLs [%s]\n"
- " -s num keep num path segments of URL [all]\n"
- " -p preserve protocol at front of referrers [%s]\n"
- " -r resolve hostnames/IPs into each other [%s]\n"
+ " -q keep query strings [%s]\n"
+ " -l lowercase all URLs [%s]\n"
+ " -s num keep num path segments of URL [all]\n"
+ " -p preserve protocol at front of referrers [%s]\n"
+ " -r resolve hostnames/IPs into each other [%s]\n"
"\n"
"Stats options:\n"
" Supply up to one of the following two. default: [-%c %d]\n"
- " -H hits remember stats for this many hits\n"
- " -T secs remember stats for this many seconds\n"
+ " -H hits remember stats for this many hits\n"
+ " -T secs remember stats for this many seconds\n"
"\n"
- " -d secs refresh delay in seconds [%d]\n"
+ " -d secs refresh delay in seconds [%d]\n"
"\n"
- " -h this help\n"
+ " -h this help\n"
"\n"
"Compile Options: %cHAVE_KQUEUE %cHAVE_FAM %cENABLE_PCRE\n"
"Polling Method: %s\n"
Index: src/display.cc
===================================================================
--- src/display.cc (revision 873)
+++ src/display.cc (revision 874)
@@ -22,6 +22,7 @@
extern itemlist *items;
extern map *last_display_map;
+FILE *outputFile;
bool display(time_t last_display) /* {{{ */
{
@@ -174,11 +175,21 @@
move(0, 0);
clrtoeol();
+ if (cf.output_file != "") {
+ // Open the file.
+ outputFile = fopen (cf.output_file, "wt");
+ }
+
/* last hit */
secs_offset = gstats.alltime.last % 86400;
mvprintw(0, 0, "last hit: %02d:%02d:%02d",
secs_offset / 3600, (secs_offset / 60) % 60, secs_offset % 60);
+ if (cf.output_file != "") {
+ fprintf(outputFile, "last hit: %02d:%02d:%02d\n",
+ secs_offset / 3600, (secs_offset / 60) % 60, secs_offset % 60);
+ }
+
/* uptime */
diff = (unsigned int)difftime(now, gstats.start);
if (diff > 86399) diff -= ((d = diff / 86400)*86400);
@@ -186,6 +197,9 @@
if (diff > 59) diff -= ((m = diff / 60)*60);
s = diff;
mvprintw(0, 27, "atop runtime: %2d days, %02d:%02d:%02d", d, h, m, s);
+ if (cf.output_file != "") {
+ fprintf(outputFile, "atop runtime: %2d days, %02d:%02d:%02d\n", d, h, m, s);
+ }
/* are we paused? */
if (cf.display_paused)
@@ -197,6 +211,10 @@
secs_offset = now % 86400;
mvprintw(0, 71, "%02d:%02d:%02d",
secs_offset /3600, (secs_offset/ 60) % 60, secs_offset % 60);
+ if (cf.output_file != "") {
+ fprintf(outputFile, "current time: %02d:%02d:%02d\n",
+ secs_offset /3600, (secs_offset/ 60) % 60, secs_offset % 60);
+ }
//All: 1,140,532 requests (39.45/sec), 999,540,593 bytes (857,235/sec)
@@ -215,6 +233,15 @@
bps, bps_suffix,
per_req, per_req_suffix);
attroff(A_BOLD);
+ if (cf.output_file != "") {
+ fprintf(outputFile,
+ "All: %12.0f reqs (%6.1f/sec) %11.1f%c (%7.1f%c/sec) %7.1f%c/req\n",
+ gstats.alltime.reqcount,
+ gstats.alltime.reqcount/ftmp,
+ bytes, bytes_suffix,
+ bps, bps_suffix,
+ per_req, per_req_suffix);
+ }
// 2xx 1,604,104 (95%) 3xx 1,000,000 ( 3%) 4xx 1,000,000 ( 1%)
@@ -244,6 +271,29 @@
);
+ if (cf.output_file != "") {
+ fprintf(outputFile,
+ "2xx: %7.0f (%4.*f%%) 3xx: %7.0f (%4.*f%%) "
+ "4xx: %5.0f (%4.*f%%) 5xx: %5.0f (%4.*f%%)\n",
+
+ gstats.r_codes[2].reqcount,
+ (gstats.r_codes[2].reqcount/ftmp) == 1 ? 0 : 1,
+ (gstats.r_codes[2].reqcount/ftmp)*100,
+
+ gstats.r_codes[3].reqcount,
+ (gstats.r_codes[3].reqcount/ftmp) == 1 ? 0 : 1,
+ (gstats.r_codes[3].reqcount/ftmp)*100,
+
+ gstats.r_codes[4].reqcount,
+ (gstats.r_codes[4].reqcount/ftmp) == 1 ? 0 : 1,
+ (gstats.r_codes[4].reqcount/ftmp)*100,
+
+ gstats.r_codes[5].reqcount,
+ (gstats.r_codes[5].reqcount/ftmp) == 1 ? 0 : 1,
+ (gstats.r_codes[5].reqcount/ftmp)*100
+ );
+ }
+
/* housecleaning on the circle, if its required in this class */
c->updatestats();
/* fetch the time of the first "recent" request */
@@ -263,6 +313,16 @@
per_req, per_req_suffix
);
attroff(A_BOLD);
+ if (cf.output_file != "") {
+ fprintf(outputFile,
+ "R (%3ds): %7.0f reqs (%6.1f/sec) %11.1f%c (%7.1f%c/sec) %7.1f%c/req\n",
+ itmp, c->getreqcount(),
+ ((float)c->getreqcount()/itmp),
+ bytes, bytes_suffix,
+ bps, bps_suffix,
+ per_req, per_req_suffix
+ );
+ }
ftmp = c->getsummary(2) + c->getsummary(3) +
c->getsummary(4) + c->getsummary(5);
@@ -286,6 +346,27 @@
(c->getsummary(5)/ftmp) == 1 ? 0 : 1,
(c->getsummary(5)/ftmp)*100
);
+ if (cf.output_file != "") {
+ fprintf(outputFile,
+ "R2xx: %6.0f (%4.*f%%) R3xx: %6.0f (%4.*f%%) "
+ "R4xx: %4.0f (%4.*f%%) R5xx: %4.0f (%4.*f%%)\n",
+ c->getsummary(2),
+ (c->getsummary(2)/ftmp) == 1 ? 0 : 1,
+ (c->getsummary(2)/ftmp)*100,
+
+ c->getsummary(3),
+ (c->getsummary(3)/ftmp) == 1 ? 0 : 1,
+ (c->getsummary(3)/ftmp)*100,
+
+ c->getsummary(4),
+ (c->getsummary(4)/ftmp) == 1 ? 0 : 1,
+ (c->getsummary(4)/ftmp)*100,
+
+ c->getsummary(5),
+ (c->getsummary(5)/ftmp) == 1 ? 0 : 1,
+ (c->getsummary(5)/ftmp)*100
+ );
+ }
// mvprintw(5, 0,
// "Unique Objects: Size Footprint:");
@@ -315,6 +396,11 @@
}
+ if (cf.output_file != "") {
+ // Close the file.
+ fclose (outputFile);
+ }
+
} /* }}} */
void display_list() /* {{{ */
Index: src/apachetop.h
===================================================================
--- src/apachetop.h (revision 873)
+++ src/apachetop.h (revision 874)
@@ -138,6 +138,7 @@
short current_display_size; /* how many lines we're displaying */
short input_count;
+ char *output_file;
#define TIMED_CIRCLE 'T'
#define HITS_CIRCLE 'H'