summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvyzo <vyzo@hackzen.org>2024-03-04 02:15:49 +0200
committervyzo <vyzo@hackzen.org>2024-03-04 02:15:49 +0200
commita03a288e502f934cfbc69e3628b91e207d996ef7 (patch)
tree88706c0eedd5c4f0090f33ccf42802bdafb29920
parent1378454f87dc3f94011014e7b5feafb4ce3049c4 (diff)
make ip4 address logging fastgerbil-httpd
so there is no reason to disable request logging any more for perf reasons!
-rw-r--r--src/std/net/httpd/logger.ss46
-rw-r--r--src/tools/gxhttpd-test/ensemble.config4
-rw-r--r--src/tools/gxhttpd-test/server.config4
3 files changed, 44 insertions, 10 deletions
diff --git a/src/std/net/httpd/logger.ss b/src/std/net/httpd/logger.ss
index 9d3b22f3..c72aa9f4 100644
--- a/src/std/net/httpd/logger.ss
+++ b/src/std/net/httpd/logger.ss
@@ -32,6 +32,40 @@
(using ((output :- Writer)
(writer :- BufferedWriter))
+ (def (write-ip4-address ip)
+ (let loop ((i 0) (wr 0))
+ (let (next (u8vector-ref ip i))
+ (cond
+ ((fx< next 10)
+ (writer.write-u8 (fx+ next 48))
+ (if (fx< i 3)
+ (begin
+ (writer.write-char #\.)
+ (loop (fx+ i 1) (fx+ wr 2)))
+ (fx+ wr 1)))
+ ((fx< next 100)
+ (writer.write-u8 (fx+ (fxquotient next 10) 48))
+ (writer.write-u8 (fx+ (fxremainder next 10) 48))
+ (if (fx< i 3)
+ (begin
+ (writer.write-char #\.)
+ (loop (fx+ i 1) (fx+ wr 3)))
+ (fx+ wr 2)))
+ (else
+ (writer.write-u8 (fx+ (fxquotient next 100) 48))
+ (let (next (fxremainder next 100))
+ (writer.write-u8 (fx+ (fxquotient next 10) 48))
+ (writer.write-u8 (fx+ (fxremainder next 10) 48))
+ (if (fx< i 3)
+ (begin
+ (writer.write-char #\.)
+ (loop (fx+ i 1) (fx+ wr 4)))
+ (fx+ wr 3))))))))
+
+ (def (write-ip6-address ip)
+ ;; TODO optimize this
+ (writer.write-string (ip6-address->string ip)))
+
(def (log-request ts req)
(using (req :- http-request)
(let* ((wr 0)
@@ -39,12 +73,12 @@
(wr (fx+ wr (writer.write-string (number->string ts))))
(wr (fx+ wr (writer.write-char #\space)))
;; client IP
- (wr (fx+ wr (writer.write-string
- (let (ip (car req.client))
- (case (u8vector-length ip)
- ((4) (ip4-address->string ip))
- ((6) (ip6-address->string ip))
- (else "???"))))))
+ (wr (fx+ wr (let (ip (car req.client))
+ (case (u8vector-length ip)
+ ((4) (write-ip4-address ip))
+ ((6) (write-ip6-address ip))
+ (else
+ (writer.write-string "???"))))))
(wr (fx+ wr (writer.write-char #\space)))
;; request protocol
(wr (fx+ wr (writer.write-string req.proto)))
diff --git a/src/tools/gxhttpd-test/ensemble.config b/src/tools/gxhttpd-test/ensemble.config
index 00e2cbf0..8aa85600 100644
--- a/src/tools/gxhttpd-test/ensemble.config
+++ b/src/tools/gxhttpd-test/ensemble.config
@@ -1,7 +1,7 @@
config: httpd-ensemble-v0
ensemble-servers: (httpd1 httpd2)
-;; uncomment to enable request logging
-;; ensemble-request-log: #t
+;; comment to disable request logging (some +10% in reqs/s)
+ ensemble-request-log: #t
server-configuration:
(root: "content"
handlers: (("/handler" . :test/site/handler))
diff --git a/src/tools/gxhttpd-test/server.config b/src/tools/gxhttpd-test/server.config
index 133eb5d8..b6a2cd2a 100644
--- a/src/tools/gxhttpd-test/server.config
+++ b/src/tools/gxhttpd-test/server.config
@@ -3,6 +3,6 @@ root: "content"
handlers: (("/handler" . :test/site/handler))
enable-servlets: #t
server-log: "/tmp/server.log"
-;; uncomment to enable request logging
-;; request-log: "/tmp/request.log"
+;; comment to disable request logging (some +10% in reqs/s)
+request-log: "/tmp/request.log"
listen: ("127.0.0.1:8080")