bench.rkt 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. #lang racket/base
  2. (require web-server/servlet-env
  3. web-server/dispatch
  4. web-server/http
  5. json
  6. db)
  7. (define DEPLOY? (box #t))
  8. (define (response/json x)
  9. (response/output
  10. #:mime-type #"application/json"
  11. (λ (out)
  12. (write-json x out))))
  13. (define (page/json req)
  14. (response/json
  15. (hasheq 'message "Hello, World!")))
  16. (define (go! db-host)
  17. (define c
  18. (cond
  19. [(unbox DEPLOY?)
  20. (virtual-connection
  21. (connection-pool
  22. (λ ()
  23. (mysql-connect #:user "benchmarkdbuser"
  24. #:password "benchmarkdbpass"
  25. #:database "hello_world"
  26. #:server db-host))))]
  27. [else
  28. (define c (sqlite3-connect #:database 'memory))
  29. (query-exec c "create table World ( id int, randomNumber int )")
  30. (for ([i (in-range (add1 10000))])
  31. (query-exec c "insert into World values ( $1, $1 )" i))
  32. c]))
  33. (define (db-one)
  34. (define id (add1 (random 10000)))
  35. (define randomNumber
  36. (query-value c "select randomNumber from World where id = ?" id))
  37. (hash 'id id 'randomNumber randomNumber))
  38. (define (page/db req)
  39. (response/json
  40. (db-one)))
  41. (define (clamp lo x hi)
  42. (cond
  43. [(x . < . lo) lo]
  44. [(hi . < . x) hi]
  45. [else x]))
  46. (define (page/dbs req is)
  47. (define maybe-num (string->number is))
  48. (define maybe-i (or maybe-num 0))
  49. (define i (clamp 1 maybe-i 500))
  50. (response/json
  51. (for/list ([j (in-range i)])
  52. (db-one))))
  53. (define-values (main-dispatch main-url)
  54. (dispatch-rules
  55. [("json")
  56. page/json]
  57. [("db")
  58. page/db]
  59. [("dbs" (string-arg))
  60. page/dbs]))
  61. (serve/servlet
  62. main-dispatch
  63. #:port 8000
  64. #:listen-ip #f
  65. #:command-line? #t
  66. #:banner? (not (unbox DEPLOY?))
  67. #:servlet-regexp #rx""
  68. #:servlet-path "/"))
  69. (module+ main
  70. (require racket/cmdline)
  71. (command-line #:program "bench"
  72. #:once-each
  73. ["--test" "Run in test mode"
  74. (set-box! DEPLOY? #f)]
  75. #:args (db-host-s)
  76. (go! db-host-s)))