|
@@ -0,0 +1,81 @@
|
|
|
+import json, random, algorithm, cgi, sugar, sequtils
|
|
|
+from strutils import parseInt
|
|
|
+# framework
|
|
|
+import basolato/controller
|
|
|
+import allographer/query_builder
|
|
|
+# view
|
|
|
+import ../../resources/pages/fortune_view
|
|
|
+
|
|
|
+type BenchmarkController* = ref object of Controller
|
|
|
+
|
|
|
+proc newBenchmarkController*(request:Request):BenchmarkController =
|
|
|
+ randomize()
|
|
|
+ return BenchmarkController.newController(request)
|
|
|
+
|
|
|
+
|
|
|
+proc json*(this:BenchmarkController):Response =
|
|
|
+ return render(%*{"message":"Hello, World!"})
|
|
|
+
|
|
|
+proc plainText*(this:BenchmarkController):Response =
|
|
|
+ var headers = newHeaders()
|
|
|
+ headers.set("Content-Type", "text/plain; charset=UTF-8")
|
|
|
+ return render("Hello, World!").setHeader(headers)
|
|
|
+
|
|
|
+proc db*(this:BenchmarkController):Response =
|
|
|
+ let i = rand(1..10000)
|
|
|
+ let response = RDB().table("world").find(i)
|
|
|
+ return render(%*response)
|
|
|
+
|
|
|
+proc query*(this:BenchmarkController):Response =
|
|
|
+ var countNum:int
|
|
|
+ try:
|
|
|
+ countNum = this.request.params["queries"].parseInt()
|
|
|
+ except:
|
|
|
+ countNum = 1
|
|
|
+
|
|
|
+ if countNum < 1:
|
|
|
+ countNum = 1
|
|
|
+ elif countNum > 500:
|
|
|
+ countNum = 500
|
|
|
+
|
|
|
+ var response = newJArray()
|
|
|
+ for _ in 1..countNum:
|
|
|
+ let i = rand(1..10000)
|
|
|
+ let data = RDB().table("world").find(i)
|
|
|
+ response.add(data)
|
|
|
+ return render(%*response)
|
|
|
+
|
|
|
+proc fortune*(this:BenchmarkController):Response =
|
|
|
+ var rows = RDB().table("Fortune").orderBy("message", Asc).get()
|
|
|
+ rows = rows.mapIt(%*{
|
|
|
+ "id": it["id"],
|
|
|
+ "message": xmlEncode(it["message"].getStr)
|
|
|
+ })
|
|
|
+ rows.add(%*{
|
|
|
+ "id": 0,
|
|
|
+ "message": "Additional fortune added at request time."}
|
|
|
+ )
|
|
|
+ rows = rows.sortedByIt(it["message"].getStr)
|
|
|
+ return render(this.view.fortuneView(rows))
|
|
|
+
|
|
|
+proc update*(this:BenchmarkController):Response =
|
|
|
+ var countNum:int
|
|
|
+ try:
|
|
|
+ countNum = this.request.params["queries"].parseInt()
|
|
|
+ except:
|
|
|
+ countNum = 1
|
|
|
+
|
|
|
+ if countNum < 1:
|
|
|
+ countNum = 1
|
|
|
+ elif countNum > 500:
|
|
|
+ countNum = 500
|
|
|
+
|
|
|
+ var response = newJArray()
|
|
|
+ transaction:
|
|
|
+ for _ in 1..countNum:
|
|
|
+ let i = rand(1..10000)
|
|
|
+ let newRandomNumber = rand(1..10000)
|
|
|
+ discard RDB().table("world").find(i)
|
|
|
+ RDB().table("world").where("id", "=", i).update(%*{"randomNumber": newRandomNumber})
|
|
|
+ response.add(%*{"id":i, "randomNumber": newRandomNumber})
|
|
|
+ return render(response)
|