summaryrefslogtreecommitdiff
path: root/system/apachetop/apachetop.outputfile.patch
diff options
context:
space:
mode:
Diffstat (limited to 'system/apachetop/apachetop.outputfile.patch')
-rw-r--r--system/apachetop/apachetop.outputfile.patch238
1 files changed, 238 insertions, 0 deletions
diff --git a/system/apachetop/apachetop.outputfile.patch b/system/apachetop/apachetop.outputfile.patch
new file mode 100644
index 0000000000..ff7913f318
--- /dev/null
+++ b/system/apachetop/apachetop.outputfile.patch
@@ -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'