benchmark_controller.nim 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import json, random, algorithm, cgi, sugar, sequtils
  2. from strutils import parseInt
  3. # framework
  4. import basolato/controller
  5. import allographer/query_builder
  6. # view
  7. import ../../resources/pages/fortune_view
  8. type BenchmarkController* = ref object of Controller
  9. proc newBenchmarkController*(request:Request):BenchmarkController =
  10. randomize()
  11. return BenchmarkController.newController(request)
  12. proc json*(this:BenchmarkController):Response =
  13. return render(%*{"message":"Hello, World!"})
  14. proc plainText*(this:BenchmarkController):Response =
  15. var headers = newHeaders()
  16. headers.set("Content-Type", "text/plain; charset=UTF-8")
  17. return render("Hello, World!").setHeader(headers)
  18. proc db*(this:BenchmarkController):Response =
  19. let i = rand(1..10000)
  20. let response = RDB().table("world").find(i)
  21. return render(%*response)
  22. proc query*(this:BenchmarkController):Response =
  23. var countNum:int
  24. try:
  25. countNum = this.request.params["queries"].parseInt()
  26. except:
  27. countNum = 1
  28. if countNum < 1:
  29. countNum = 1
  30. elif countNum > 500:
  31. countNum = 500
  32. var response = newJArray()
  33. for _ in 1..countNum:
  34. let i = rand(1..10000)
  35. let data = RDB().table("world").find(i)
  36. response.add(data)
  37. return render(%*response)
  38. proc fortune*(this:BenchmarkController):Response =
  39. var rows = RDB().table("Fortune").orderBy("message", Asc).get()
  40. rows = rows.mapIt(%*{
  41. "id": it["id"],
  42. "message": xmlEncode(it["message"].getStr)
  43. })
  44. rows.add(%*{
  45. "id": 0,
  46. "message": "Additional fortune added at request time."}
  47. )
  48. rows = rows.sortedByIt(it["message"].getStr)
  49. return render(this.view.fortuneView(rows))
  50. proc update*(this:BenchmarkController):Response =
  51. var countNum:int
  52. try:
  53. countNum = this.request.params["queries"].parseInt()
  54. except:
  55. countNum = 1
  56. if countNum < 1:
  57. countNum = 1
  58. elif countNum > 500:
  59. countNum = 500
  60. var response = newJArray()
  61. transaction:
  62. for _ in 1..countNum:
  63. let i = rand(1..10000)
  64. let newRandomNumber = rand(1..10000)
  65. discard RDB().table("world").find(i)
  66. RDB().table("world").where("id", "=", i).update(%*{"randomNumber": newRandomNumber})
  67. response.add(%*{"id":i, "randomNumber": newRandomNumber})
  68. return render(response)