From 64f6a944c40fa867ff140c38bd9ab407f959e784 Mon Sep 17 00:00:00 2001 From: Casey Link Date: Fri, 7 Aug 2026 21:15:11 +0200 Subject: [PATCH 1/2] frameworks/ring-jetty9-adapter: add benchmark implementation --- frameworks/ring-jetty9-adapter/Dockerfile | 10 + frameworks/ring-jetty9-adapter/deps.edn | 10 + frameworks/ring-jetty9-adapter/meta.json | 21 ++ .../httparena/ring_jetty9_adapter/core.clj | 260 ++++++++++++++++++ .../ring_jetty9_adapter/core_test.clj | 48 ++++ 5 files changed, 349 insertions(+) create mode 100644 frameworks/ring-jetty9-adapter/Dockerfile create mode 100644 frameworks/ring-jetty9-adapter/deps.edn create mode 100644 frameworks/ring-jetty9-adapter/meta.json create mode 100644 frameworks/ring-jetty9-adapter/src/httparena/ring_jetty9_adapter/core.clj create mode 100644 frameworks/ring-jetty9-adapter/test/httparena/ring_jetty9_adapter/core_test.clj diff --git a/frameworks/ring-jetty9-adapter/Dockerfile b/frameworks/ring-jetty9-adapter/Dockerfile new file mode 100644 index 000000000..d71173531 --- /dev/null +++ b/frameworks/ring-jetty9-adapter/Dockerfile @@ -0,0 +1,10 @@ +FROM docker.io/library/clojure:tools-deps-trixie-slim + +WORKDIR /app + +COPY deps.edn ./ +RUN clojure -X:deps prep + +COPY src ./src + +CMD ["clojure", "-M", "-m", "httparena.ring-jetty9-adapter.core"] diff --git a/frameworks/ring-jetty9-adapter/deps.edn b/frameworks/ring-jetty9-adapter/deps.edn new file mode 100644 index 000000000..6ada36b59 --- /dev/null +++ b/frameworks/ring-jetty9-adapter/deps.edn @@ -0,0 +1,10 @@ +{:paths ["src"] + :deps {org.clojure/clojure {:mvn/version "1.12.5"} + org.clojure/data.json {:mvn/version "2.5.2"} + hikari-cp/hikari-cp {:mvn/version "4.1.0"} + com.github.seancorfield/next.jdbc {:mvn/version "1.3.1118"} + org.postgresql/postgresql {:mvn/version "42.7.13"} + ring/ring-core {:mvn/version "1.15.5"} + info.sunng/ring-jetty9-adapter {:mvn/version "0.40.3"}} + :aliases {:test {:extra-paths ["test"] + :main-opts ["-m" "httparena.ring-jetty9-adapter.core-test"]}}} diff --git a/frameworks/ring-jetty9-adapter/meta.json b/frameworks/ring-jetty9-adapter/meta.json new file mode 100644 index 000000000..c85f7102b --- /dev/null +++ b/frameworks/ring-jetty9-adapter/meta.json @@ -0,0 +1,21 @@ +{ + "display_name": "ring-jetty9-adapter", + "language": "Clojure", + "type": "emerging", + "mode": "standard", + "engine": "Jetty", + "description": "Ring application using the Sunng ring-jetty9-adapter on modern Jetty.", + "repo": "https://github.com/sunng87/ring-jetty9-adapter", + "enabled": true, + "tests": [ + "baseline", + "pipelined", + "limited-conn", + "json", + "json-comp", + "upload", + "static", + "async-db" + ], + "maintainers": [] +} diff --git a/frameworks/ring-jetty9-adapter/src/httparena/ring_jetty9_adapter/core.clj b/frameworks/ring-jetty9-adapter/src/httparena/ring_jetty9_adapter/core.clj new file mode 100644 index 000000000..66fbd8530 --- /dev/null +++ b/frameworks/ring-jetty9-adapter/src/httparena/ring_jetty9_adapter/core.clj @@ -0,0 +1,260 @@ +(ns httparena.ring-jetty9-adapter.core + (:gen-class) + (:require + [clojure.data.json :as json] + [clojure.java.io :as io] + [clojure.string :as str] + [hikari-cp.core :as hikari] + [next.jdbc :as jdbc] + [next.jdbc.result-set :as rs] + [ring.adapter.jetty9 :as jetty] + [ring.middleware.params :as params] + [ring.util.response :as response]) + (:import + [java.io InputStream OutputStream] + [java.net URI] + [org.eclipse.jetty.server.handler.gzip GzipHandler] + [org.postgresql.util PGobject])) + +(set! *warn-on-reflection* true) + +(def json-content-type "application/json") +(def static-root "/data/static") +(def async-db-query + "SELECT id, name, category, price, quantity, active, tags, rating_score, rating_count + FROM items + WHERE price BETWEEN ? AND ? + LIMIT ?") +(def static-content-types + {"css" "text/css" + "js" "application/javascript" + "html" "text/html" + "woff2" "font/woff2" + "svg" "image/svg+xml" + "webp" "image/webp" + "json" "application/json"}) + +(defn parse-long-safe + ([value] + (parse-long-safe value 0)) + ([value default] + (or (some-> value str str/trim parse-long) default))) + +(defn parse-int [value default] + (try + (if (some? value) + (Integer/parseInt (str value)) + default) + (catch NumberFormatException _ + default))) + +(defn database-max-conn [] + (max 1 (parse-int (System/getenv "DATABASE_MAX_CONN") 256))) + +(defn database-url->hikari-options [database-url] + (let [uri (URI. database-url) + scheme (.getScheme uri) + host (.getHost uri) + port (.getPort uri) + path (.getRawPath uri) + query-string (.getRawQuery uri) + [username password] (str/split (or (.getUserInfo uri) "") #":" 2)] + (when-not (and (#{"postgres" "postgresql"} scheme) + (seq host) + (seq path) + (seq username) + (some? password)) + (throw (ex-info "invalid DATABASE_URL" {:scheme scheme}))) + {:jdbc-url (str "jdbc:postgresql://" host + (when-not (= -1 port) (str ":" port)) + path + (when query-string (str "?" query-string))) + :username username + :password password + :maximum-pool-size (database-max-conn)})) + +(defn load-dataset [path] + (when (.exists (io/file path)) + (json/read-str (slurp path) :key-fn keyword))) + +(defonce dataset + (delay (load-dataset "/data/dataset.json"))) + +(defonce datasource (atom nil)) + +(defn compute-json-items [items multiplier] + (mapv (fn [{:keys [price quantity] :as item}] + (assoc item :total (* price quantity multiplier))) + items)) + +(defn request-sum [request] + (let [params (:params request) + a (parse-long-safe (get params "a")) + b (parse-long-safe (get params "b")) + body (if (= :post (:request-method request)) + (parse-long-safe (slurp (:body request))) + 0)] + (+ a b body))) + +(defn count-stream-bytes [^InputStream in] + (with-open [^InputStream stream in] + (.transferTo stream (OutputStream/nullOutputStream)))) + +(defn text-response [status body] + {:status status + :headers {"content-type" "text/plain"} + :body body}) + +(defn json-response [status body] + {:status status + :headers {"Content-Type" json-content-type} + :body (json/write-str body)}) + +(defn empty-response [] + (json-response 200 {:items [] + :count 0})) + +(defn tags->vector [tags] + (cond + (instance? PGobject tags) (json/read-str (.getValue ^PGobject tags)) + (string? tags) (json/read-str tags) + (sequential? tags) (vec tags) + :else (throw (ex-info "unexpected tags value" {:type (type tags)})))) + +(defn rows->items [rows] + (mapv (fn [{:keys [id name category price quantity active tags rating_score rating_count]}] + {:id id + :name name + :category category + :price price + :quantity quantity + :active active + :tags (tags->vector tags) + :rating {:score rating_score + :count rating_count}}) + rows)) + +(defn datasource! [] + (or @datasource + (locking datasource + (or @datasource + (try + (let [database (hikari/make-datasource + (database-url->hikari-options + (System/getenv "DATABASE_URL")))] + (reset! datasource database)) + (catch Exception _ + nil)))))) + +(defn close-datasource! [] + (when-let [database @datasource] + (hikari/close-datasource database) + (reset! datasource nil))) + +(defn async-db-handler [request] + (let [params (:params request) + min-price (parse-int (get params "min") 10) + max-price (parse-int (get params "max") 50) + limit (-> (parse-int (get params "limit") 50) + (max 1) + (min 50))] + (if-let [database (datasource!)] + (try + (let [rows (jdbc/execute! database + [async-db-query min-price max-price limit] + {:builder-fn rs/as-unqualified-lower-maps}) + items (rows->items rows)] + (json-response 200 {:items items + :count (count items)})) + (catch Exception _ + (empty-response))) + (empty-response)))) + +(defn static-filename [uri] + (when (str/starts-with? uri "/static/") + (let [filename (subs uri 8)] + (when (and (not (str/blank? filename)) + (not (str/includes? filename "/")) + (not (str/includes? filename ".."))) + filename)))) + +(defn static-content-type [filename] + (let [extension (some-> filename (str/split #"\.") last str/lower-case)] + (get static-content-types extension "application/octet-stream"))) + +(defn static-response [uri] + (when-let [filename (static-filename uri)] + (if-let [file-response (response/file-response filename {:root static-root + :index-files? false})] + (response/content-type file-response (static-content-type filename)) + (text-response 404 "not found")))) + +(defn json-data-response [request] + (let [uri (:uri request) + item-count (-> (subs uri (count "/json/")) + parse-long-safe + (max 1) + (min 50)) + multiplier (if-let [value (get-in request [:params "m"])] + (parse-long-safe value) + 1)] + (if-let [source @dataset] + (let [items (compute-json-items (take item-count source) multiplier)] + (json-response 200 {:items items + :count (count items)})) + (text-response 500 "dataset.json not available")))) + +(defn method-not-allowed-response [] + (text-response 405 "method not allowed")) + +(defn sync-app [request] + (let [uri (:uri request) + method (:request-method request)] + (cond + (str/starts-with? uri "/static/") + (if (= :get method) + (or (static-response uri) + (text-response 404 "not found")) + (method-not-allowed-response)) + + (re-matches #"/json/[0-9]+" uri) + (if (= :get method) + (json-data-response request) + (method-not-allowed-response)) + + :else + (case uri + "/baseline11" (case method + (:get :post) (text-response 200 (str (request-sum request))) + (method-not-allowed-response)) + "/upload" (if (= :post method) + (text-response 200 (str (count-stream-bytes (:body request)))) + (method-not-allowed-response)) + "/pipeline" (if (= :get method) + (text-response 200 "ok") + (method-not-allowed-response)) + (text-response 404 "not found"))))) +(defn app [request] + (if (= "/async-db" (:uri request)) + (if (= :get (:request-method request)) + (async-db-handler request) + (method-not-allowed-response)) + (sync-app request))) + +(defn handler [request] + (app (params/params-request request))) + +(defn -main [& _args] + (when-not (vector? @dataset) + (throw (ex-info "dataset.json must contain a JSON array" + {:path "/data/dataset.json"}))) + (.addShutdownHook (Runtime/getRuntime) (Thread. ^Runnable close-datasource!)) + (jetty/run-jetty handler + {:host "0.0.0.0" + :join? true + :port 8080 + :virtual-threads? true + :wrap-jetty-handler (fn [^org.eclipse.jetty.server.Handler ring-handler] + (doto (GzipHandler.) + (.setExcludedPaths (into-array String ["/static/*"])) + (.setHandler ring-handler)))})) diff --git a/frameworks/ring-jetty9-adapter/test/httparena/ring_jetty9_adapter/core_test.clj b/frameworks/ring-jetty9-adapter/test/httparena/ring_jetty9_adapter/core_test.clj new file mode 100644 index 000000000..31dbccaf7 --- /dev/null +++ b/frameworks/ring-jetty9-adapter/test/httparena/ring_jetty9_adapter/core_test.clj @@ -0,0 +1,48 @@ +(ns httparena.ring-jetty9-adapter.core-test + (:require + [clojure.data.json :as json] + [clojure.test :as test :refer [deftest is]] + [httparena.ring-jetty9-adapter.core :as core])) + +(deftest converts-postgres-uri-for-hikari + (is (= {:jdbc-url "jdbc:postgresql://localhost:5432/benchmark?ApplicationName=proof" + :username "bench name" + :password "p:a@ss" + :maximum-pool-size 256} + (core/database-url->hikari-options + "postgres://bench%20name:p%3Aa%40ss@localhost:5432/benchmark?ApplicationName=proof")))) + +(deftest async-db-falls-back-through-the-ring-handler + (with-redefs [core/datasource! (constantly nil)] + (is (= {:status 200 + :headers {"Content-Type" "application/json"} + :body {"items" [] "count" 0}} + (update (core/handler {:uri "/async-db" + :request-method :get + :query-string "min=10&max=50&limit=50"}) + :body + json/read-str))))) + +(deftest maps-database-rows-with-nested-rating + (is (= [{:id 1 + :name "widget" + :category "tools" + :price 10 + :quantity 2 + :active true + :tags ["sale"] + :rating {:score 4 :count 9}}] + (core/rows->items [{:id 1 + :name "widget" + :category "tools" + :price 10 + :quantity 2 + :active true + :tags "[\"sale\"]" + :rating_score 4 + :rating_count 9}])))) + +(defn -main [& _args] + (let [results (test/run-tests 'httparena.ring-jetty9-adapter.core-test)] + (when (pos? (+ (:fail results) (:error results))) + (throw (ex-info "tests failed" results))))) From 44d37568402ca869a6292ef961ed395982b7b8e0 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 8 Aug 2026 11:55:09 +0000 Subject: [PATCH 2/2] Benchmark results: ring-jetty9-adapter [skip ci] --- site/data/frameworks.json | 8 + site/data/results/ring-jetty9-adapter.json | 320 ++++++++++++++++++ .../async-db/1024/ring-jetty9-adapter.log | 3 + .../baseline/4096/ring-jetty9-adapter.log | 3 + .../logs/baseline/512/ring-jetty9-adapter.log | 3 + .../json-comp/16384/ring-jetty9-adapter.log | 3 + .../json-comp/4096/ring-jetty9-adapter.log | 3 + .../json-comp/512/ring-jetty9-adapter.log | 3 + .../logs/json/4096/ring-jetty9-adapter.log | 3 + .../limited-conn/4096/ring-jetty9-adapter.log | 3 + .../limited-conn/512/ring-jetty9-adapter.log | 3 + .../pipelined/4096/ring-jetty9-adapter.log | 3 + .../pipelined/512/ring-jetty9-adapter.log | 3 + .../logs/static/1024/ring-jetty9-adapter.log | 3 + .../logs/static/4096/ring-jetty9-adapter.log | 3 + .../logs/static/6800/ring-jetty9-adapter.log | 3 + .../logs/upload/256/ring-jetty9-adapter.log | 3 + .../logs/upload/32/ring-jetty9-adapter.log | 3 + 18 files changed, 376 insertions(+) create mode 100644 site/data/results/ring-jetty9-adapter.json create mode 100644 site/static/logs/async-db/1024/ring-jetty9-adapter.log create mode 100644 site/static/logs/baseline/4096/ring-jetty9-adapter.log create mode 100644 site/static/logs/baseline/512/ring-jetty9-adapter.log create mode 100644 site/static/logs/json-comp/16384/ring-jetty9-adapter.log create mode 100644 site/static/logs/json-comp/4096/ring-jetty9-adapter.log create mode 100644 site/static/logs/json-comp/512/ring-jetty9-adapter.log create mode 100644 site/static/logs/json/4096/ring-jetty9-adapter.log create mode 100644 site/static/logs/limited-conn/4096/ring-jetty9-adapter.log create mode 100644 site/static/logs/limited-conn/512/ring-jetty9-adapter.log create mode 100644 site/static/logs/pipelined/4096/ring-jetty9-adapter.log create mode 100644 site/static/logs/pipelined/512/ring-jetty9-adapter.log create mode 100644 site/static/logs/static/1024/ring-jetty9-adapter.log create mode 100644 site/static/logs/static/4096/ring-jetty9-adapter.log create mode 100644 site/static/logs/static/6800/ring-jetty9-adapter.log create mode 100644 site/static/logs/upload/256/ring-jetty9-adapter.log create mode 100644 site/static/logs/upload/32/ring-jetty9-adapter.log diff --git a/site/data/frameworks.json b/site/data/frameworks.json index 9422ab446..a24fa1dfb 100644 --- a/site/data/frameworks.json +++ b/site/data/frameworks.json @@ -661,6 +661,14 @@ "engine": "robaho-httpserver", "mode": "standard" }, + "ring-jetty9-adapter": { + "dir": "ring-jetty9-adapter", + "description": "Ring application using the Sunng ring-jetty9-adapter on modern Jetty.", + "repo": "https://github.com/sunng87/ring-jetty9-adapter", + "type": "emerging", + "engine": "Jetty", + "mode": "standard" + }, "ringzero-ws": { "dir": "ringzero-ws", "description": "Hand-rolled WebSocket echo server on raw io_uring (liburing) \u2014 no WebSocket library. Multishot accept + multishot recv into a provided buffer ring for zero-copy ingest, one ring per core with SO_REUSEPORT, and a from-scratch RFC 6455 handshake (hand-written SHA-1 + base64) and frame parser/masking.", diff --git a/site/data/results/ring-jetty9-adapter.json b/site/data/results/ring-jetty9-adapter.json new file mode 100644 index 000000000..2848ac331 --- /dev/null +++ b/site/data/results/ring-jetty9-adapter.json @@ -0,0 +1,320 @@ +{ + "framework": "ring-jetty9-adapter", + "results": { + "async-db-1024": { + "framework": "ring-jetty9-adapter", + "language": "Clojure", + "rps": 56973, + "avg_latency": "16.56ms", + "p99_latency": "78.30ms", + "cpu": "6478.9%", + "memory": "5.3GiB", + "connections": 1024, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "220.01MB/s", + "input_bw": "3.80MB/s", + "reconnects": 22459, + "status_2xx": 569736, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "baseline-4096": { + "framework": "ring-jetty9-adapter", + "language": "Clojure", + "rps": 721116, + "avg_latency": "2.77ms", + "p99_latency": "9.32ms", + "cpu": "4959.7%", + "memory": "8.7GiB", + "connections": 4096, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "103.13MB/s", + "input_bw": "55.70MB/s", + "reconnects": 0, + "status_2xx": 3605582, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "baseline-512": { + "framework": "ring-jetty9-adapter", + "language": "Clojure", + "rps": 622541, + "avg_latency": "749us", + "p99_latency": "1.40ms", + "cpu": "4641.8%", + "memory": "4.7GiB", + "connections": 512, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "89.03MB/s", + "input_bw": "48.09MB/s", + "reconnects": 0, + "status_2xx": 3112707, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "json-4096": { + "framework": "ring-jetty9-adapter", + "language": "Clojure", + "rps": 84304, + "avg_latency": "23.61ms", + "p99_latency": "62.70ms", + "cpu": "6412.1%", + "memory": "5.6GiB", + "connections": 4096, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "297.13MB/s", + "input_bw": "4.02MB/s", + "reconnects": 15761, + "status_2xx": 421521, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "json-comp-16384": { + "framework": "ring-jetty9-adapter", + "language": "Clojure", + "rps": 44998, + "avg_latency": "81.62ms", + "p99_latency": "522.30ms", + "cpu": "6429.7%", + "memory": "5.7GiB", + "connections": 16384, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "64.88MB/s", + "input_bw": "3.35MB/s", + "reconnects": 6679, + "status_2xx": 224990, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "json-comp-4096": { + "framework": "ring-jetty9-adapter", + "language": "Clojure", + "rps": 45129, + "avg_latency": "46.64ms", + "p99_latency": "183.70ms", + "cpu": "6391.2%", + "memory": "4.7GiB", + "connections": 4096, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "65.08MB/s", + "input_bw": "3.36MB/s", + "reconnects": 7699, + "status_2xx": 225647, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "json-comp-512": { + "framework": "ring-jetty9-adapter", + "language": "Clojure", + "rps": 43554, + "avg_latency": "10.68ms", + "p99_latency": "34.40ms", + "cpu": "6426.7%", + "memory": "3.3GiB", + "connections": 512, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "62.81MB/s", + "input_bw": "3.24MB/s", + "reconnects": 8561, + "status_2xx": 217770, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "limited-conn-4096": { + "framework": "ring-jetty9-adapter", + "language": "Clojure", + "rps": 500913, + "avg_latency": "1.76ms", + "p99_latency": "3.27ms", + "cpu": "4413.8%", + "memory": "5.5GiB", + "connections": 4096, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "71.64MB/s", + "input_bw": "38.69MB/s", + "reconnects": 250368, + "status_2xx": 2504565, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "limited-conn-512": { + "framework": "ring-jetty9-adapter", + "language": "Clojure", + "rps": 484239, + "avg_latency": "823us", + "p99_latency": "2.00ms", + "cpu": "4263.8%", + "memory": "6.1GiB", + "connections": 512, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "69.25MB/s", + "input_bw": "37.41MB/s", + "reconnects": 242049, + "status_2xx": 2421198, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "pipelined-4096": { + "framework": "ring-jetty9-adapter", + "language": "Clojure", + "rps": 1896427, + "avg_latency": "10.13ms", + "p99_latency": "27.60ms", + "cpu": "6458.8%", + "memory": "4.9GiB", + "connections": 4096, + "threads": 64, + "duration": "5s", + "pipeline": 16, + "bandwidth": "271.18MB/s", + "reconnects": 0, + "status_2xx": 9482139, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "pipelined-512": { + "framework": "ring-jetty9-adapter", + "language": "Clojure", + "rps": 1884137, + "avg_latency": "3.88ms", + "p99_latency": "14.60ms", + "cpu": "6401.4%", + "memory": "3.3GiB", + "connections": 512, + "threads": 64, + "duration": "5s", + "pipeline": 16, + "bandwidth": "269.41MB/s", + "reconnects": 0, + "status_2xx": 9420688, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "static-1024": { + "framework": "ring-jetty9-adapter", + "language": "Clojure", + "rps": 142694, + "avg_latency": "10.95ms", + "p99_latency": "425.36ms", + "cpu": "6485.1%", + "memory": "2.8GiB", + "connections": 1024, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "8.47GB", + "reconnects": 0, + "status_2xx": 727775, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "static-4096": { + "framework": "ring-jetty9-adapter", + "language": "Clojure", + "rps": 130972, + "avg_latency": "78.86ms", + "p99_latency": "1.76s", + "cpu": "6492.9%", + "memory": "3.1GiB", + "connections": 4096, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "7.78GB", + "reconnects": 0, + "status_2xx": 667986, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "static-6800": { + "framework": "ring-jetty9-adapter", + "language": "Clojure", + "rps": 139190, + "avg_latency": "37.51ms", + "p99_latency": "1.78s", + "cpu": "6484.3%", + "memory": "3.4GiB", + "connections": 6800, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "8.27GB", + "reconnects": 0, + "status_2xx": 709958, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "upload-256": { + "framework": "ring-jetty9-adapter", + "language": "Clojure", + "rps": 2836, + "avg_latency": "82.98ms", + "p99_latency": "304.10ms", + "cpu": "4095.2%", + "memory": "1.1GiB", + "connections": 256, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "430.47KB/s", + "input_bw": "22.49GB/s", + "reconnects": 2815, + "status_2xx": 14240, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "upload-32": { + "framework": "ring-jetty9-adapter", + "language": "Clojure", + "rps": 2624, + "avg_latency": "12.17ms", + "p99_latency": "34.70ms", + "cpu": "2370.7%", + "memory": "1.0GiB", + "connections": 32, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "397.66KB/s", + "input_bw": "20.81GB/s", + "reconnects": 2631, + "status_2xx": 13120, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + } + } +} diff --git a/site/static/logs/async-db/1024/ring-jetty9-adapter.log b/site/static/logs/async-db/1024/ring-jetty9-adapter.log new file mode 100644 index 000000000..ca183d220 --- /dev/null +++ b/site/static/logs/async-db/1024/ring-jetty9-adapter.log @@ -0,0 +1,3 @@ +SLF4J(W): No SLF4J providers were found. +SLF4J(W): Defaulting to no-operation (NOP) logger implementation +SLF4J(W): See https://www.slf4j.org/codes.html#noProviders for further details. diff --git a/site/static/logs/baseline/4096/ring-jetty9-adapter.log b/site/static/logs/baseline/4096/ring-jetty9-adapter.log new file mode 100644 index 000000000..ca183d220 --- /dev/null +++ b/site/static/logs/baseline/4096/ring-jetty9-adapter.log @@ -0,0 +1,3 @@ +SLF4J(W): No SLF4J providers were found. +SLF4J(W): Defaulting to no-operation (NOP) logger implementation +SLF4J(W): See https://www.slf4j.org/codes.html#noProviders for further details. diff --git a/site/static/logs/baseline/512/ring-jetty9-adapter.log b/site/static/logs/baseline/512/ring-jetty9-adapter.log new file mode 100644 index 000000000..ca183d220 --- /dev/null +++ b/site/static/logs/baseline/512/ring-jetty9-adapter.log @@ -0,0 +1,3 @@ +SLF4J(W): No SLF4J providers were found. +SLF4J(W): Defaulting to no-operation (NOP) logger implementation +SLF4J(W): See https://www.slf4j.org/codes.html#noProviders for further details. diff --git a/site/static/logs/json-comp/16384/ring-jetty9-adapter.log b/site/static/logs/json-comp/16384/ring-jetty9-adapter.log new file mode 100644 index 000000000..ca183d220 --- /dev/null +++ b/site/static/logs/json-comp/16384/ring-jetty9-adapter.log @@ -0,0 +1,3 @@ +SLF4J(W): No SLF4J providers were found. +SLF4J(W): Defaulting to no-operation (NOP) logger implementation +SLF4J(W): See https://www.slf4j.org/codes.html#noProviders for further details. diff --git a/site/static/logs/json-comp/4096/ring-jetty9-adapter.log b/site/static/logs/json-comp/4096/ring-jetty9-adapter.log new file mode 100644 index 000000000..ca183d220 --- /dev/null +++ b/site/static/logs/json-comp/4096/ring-jetty9-adapter.log @@ -0,0 +1,3 @@ +SLF4J(W): No SLF4J providers were found. +SLF4J(W): Defaulting to no-operation (NOP) logger implementation +SLF4J(W): See https://www.slf4j.org/codes.html#noProviders for further details. diff --git a/site/static/logs/json-comp/512/ring-jetty9-adapter.log b/site/static/logs/json-comp/512/ring-jetty9-adapter.log new file mode 100644 index 000000000..ca183d220 --- /dev/null +++ b/site/static/logs/json-comp/512/ring-jetty9-adapter.log @@ -0,0 +1,3 @@ +SLF4J(W): No SLF4J providers were found. +SLF4J(W): Defaulting to no-operation (NOP) logger implementation +SLF4J(W): See https://www.slf4j.org/codes.html#noProviders for further details. diff --git a/site/static/logs/json/4096/ring-jetty9-adapter.log b/site/static/logs/json/4096/ring-jetty9-adapter.log new file mode 100644 index 000000000..ca183d220 --- /dev/null +++ b/site/static/logs/json/4096/ring-jetty9-adapter.log @@ -0,0 +1,3 @@ +SLF4J(W): No SLF4J providers were found. +SLF4J(W): Defaulting to no-operation (NOP) logger implementation +SLF4J(W): See https://www.slf4j.org/codes.html#noProviders for further details. diff --git a/site/static/logs/limited-conn/4096/ring-jetty9-adapter.log b/site/static/logs/limited-conn/4096/ring-jetty9-adapter.log new file mode 100644 index 000000000..ca183d220 --- /dev/null +++ b/site/static/logs/limited-conn/4096/ring-jetty9-adapter.log @@ -0,0 +1,3 @@ +SLF4J(W): No SLF4J providers were found. +SLF4J(W): Defaulting to no-operation (NOP) logger implementation +SLF4J(W): See https://www.slf4j.org/codes.html#noProviders for further details. diff --git a/site/static/logs/limited-conn/512/ring-jetty9-adapter.log b/site/static/logs/limited-conn/512/ring-jetty9-adapter.log new file mode 100644 index 000000000..ca183d220 --- /dev/null +++ b/site/static/logs/limited-conn/512/ring-jetty9-adapter.log @@ -0,0 +1,3 @@ +SLF4J(W): No SLF4J providers were found. +SLF4J(W): Defaulting to no-operation (NOP) logger implementation +SLF4J(W): See https://www.slf4j.org/codes.html#noProviders for further details. diff --git a/site/static/logs/pipelined/4096/ring-jetty9-adapter.log b/site/static/logs/pipelined/4096/ring-jetty9-adapter.log new file mode 100644 index 000000000..ca183d220 --- /dev/null +++ b/site/static/logs/pipelined/4096/ring-jetty9-adapter.log @@ -0,0 +1,3 @@ +SLF4J(W): No SLF4J providers were found. +SLF4J(W): Defaulting to no-operation (NOP) logger implementation +SLF4J(W): See https://www.slf4j.org/codes.html#noProviders for further details. diff --git a/site/static/logs/pipelined/512/ring-jetty9-adapter.log b/site/static/logs/pipelined/512/ring-jetty9-adapter.log new file mode 100644 index 000000000..ca183d220 --- /dev/null +++ b/site/static/logs/pipelined/512/ring-jetty9-adapter.log @@ -0,0 +1,3 @@ +SLF4J(W): No SLF4J providers were found. +SLF4J(W): Defaulting to no-operation (NOP) logger implementation +SLF4J(W): See https://www.slf4j.org/codes.html#noProviders for further details. diff --git a/site/static/logs/static/1024/ring-jetty9-adapter.log b/site/static/logs/static/1024/ring-jetty9-adapter.log new file mode 100644 index 000000000..ca183d220 --- /dev/null +++ b/site/static/logs/static/1024/ring-jetty9-adapter.log @@ -0,0 +1,3 @@ +SLF4J(W): No SLF4J providers were found. +SLF4J(W): Defaulting to no-operation (NOP) logger implementation +SLF4J(W): See https://www.slf4j.org/codes.html#noProviders for further details. diff --git a/site/static/logs/static/4096/ring-jetty9-adapter.log b/site/static/logs/static/4096/ring-jetty9-adapter.log new file mode 100644 index 000000000..ca183d220 --- /dev/null +++ b/site/static/logs/static/4096/ring-jetty9-adapter.log @@ -0,0 +1,3 @@ +SLF4J(W): No SLF4J providers were found. +SLF4J(W): Defaulting to no-operation (NOP) logger implementation +SLF4J(W): See https://www.slf4j.org/codes.html#noProviders for further details. diff --git a/site/static/logs/static/6800/ring-jetty9-adapter.log b/site/static/logs/static/6800/ring-jetty9-adapter.log new file mode 100644 index 000000000..ca183d220 --- /dev/null +++ b/site/static/logs/static/6800/ring-jetty9-adapter.log @@ -0,0 +1,3 @@ +SLF4J(W): No SLF4J providers were found. +SLF4J(W): Defaulting to no-operation (NOP) logger implementation +SLF4J(W): See https://www.slf4j.org/codes.html#noProviders for further details. diff --git a/site/static/logs/upload/256/ring-jetty9-adapter.log b/site/static/logs/upload/256/ring-jetty9-adapter.log new file mode 100644 index 000000000..ca183d220 --- /dev/null +++ b/site/static/logs/upload/256/ring-jetty9-adapter.log @@ -0,0 +1,3 @@ +SLF4J(W): No SLF4J providers were found. +SLF4J(W): Defaulting to no-operation (NOP) logger implementation +SLF4J(W): See https://www.slf4j.org/codes.html#noProviders for further details. diff --git a/site/static/logs/upload/32/ring-jetty9-adapter.log b/site/static/logs/upload/32/ring-jetty9-adapter.log new file mode 100644 index 000000000..ca183d220 --- /dev/null +++ b/site/static/logs/upload/32/ring-jetty9-adapter.log @@ -0,0 +1,3 @@ +SLF4J(W): No SLF4J providers were found. +SLF4J(W): Defaulting to no-operation (NOP) logger implementation +SLF4J(W): See https://www.slf4j.org/codes.html#noProviders for further details.