Browse Source

Add updates test

Zane Kansil 10 years ago
parent
commit
b00ee3152e

+ 1 - 0
frameworks/Clojure/pedestal/benchmark_config

@@ -8,6 +8,7 @@
       "db_url": "/db",
       "query_url": "/queries?queries=",
       "fortune_url": "/fortunes",
+      "update_url": "/updates?queries=",
       "port": 8080,
       "approach": "Realistic",
       "classification": "Micro",

+ 35 - 15
frameworks/Clojure/pedestal/src/pedestal/service.clj

@@ -57,23 +57,26 @@
   [request] 
   (bootstrap/json-response (first (run-queries 1))))
 
-;; http://stackoverflow.com/questions/5621279/in-clojure-how-can-i-convert-a-string-to-a-number
-(defn parse-int [s]
-  (Integer/parseInt (re-find #"\A-?\d+" s)))
+(defn sanitizeQueriesParam
+  "Sanitizes the `queries` parameter. Caps the value between 1 and 500.
+Invalid (stringy) values become 1"
+  [request]
+  (let [queries (-> request :params :queries)]
+    (let [n
+      (if (= (re-find #"\A-?\d+" queries) nil)
+        1
+        (Integer/parseInt queries))]
+    (cond
+      (< n 1) 1
+      (> n 500) 500
+      :else n))))
 
 (defn multiple-query-test
   [request]
-  (let [n (parse-int
-    (let [queries (-> request :params :queries)]
-      (if (= (re-find #"\A-?\d+" queries) nil) ; Guarantee queries to be numeric-looking
-        "1"
-        queries)))] ; queries now safely parsed into n as int
-    (bootstrap/json-response
-      (run-queries
-        (cond
-          (< n 1) 1
-          (> n 500) 500
-          :else n)))))
+  (-> request
+    (sanitizeQueriesParam)
+    (run-queries)
+    (bootstrap/json-response)))
 
 ; Set up entity Fortune and the database representation
 (defentity fortune
@@ -119,6 +122,22 @@ message text, and then return the results."
     (ring-resp/content-type "text/html")
     (ring-resp/charset "utf-8")))         ;; Apply charset after content type
 
+(defn update-and-persist
+  [request]
+  (let [results (-> request (sanitizeQueriesParam) (run-queries))]
+    (for [w results]
+      (update-in w [:randomNumber (inc (rand-int 9999))]
+        (update world
+          (set-fields {:randomNumber (:randomNumber w)})
+          (where {:id [:id w]}))))
+  results))
+
+(defn db-updates
+  [request]
+  (-> request
+    (update-and-persist)
+    (bootstrap/json-response)))
+
 ;; All of the available routes
 (defroutes routes
   [[
@@ -126,7 +145,8 @@ message text, and then return the results."
   [  "/plaintext" {:get plaintext}]
   [  "/db"        {:get single-query-test}]
   [  "/queries"   {:get multiple-query-test}]
-  [  "/fortunes"  {:get fortune-test}]]])
+  [  "/fortunes"  {:get fortune-test}]
+  [  "/updates"   {:get db-updates}]]])
 
 ;; How the server will look, not the code to start it up
 (def service {:env :prod