app.psgi 1.0 KB

12345678910111213141516171819202122232425262728293031323334
  1. use strict;
  2. use v5.16;
  3. use utf8;
  4. use JSON::XS qw(encode_json);
  5. use DBI;
  6. my $dbh = DBI->connect_cached(
  7. 'dbi:mysql:database=hello_world;host=localhost;port=3306',
  8. 'benchmarkdbuser',
  9. 'benchmarkdbpass',
  10. { AutoInactiveDestroy => 1, mysql_enable_utf8 => 1 }
  11. ) || die $!;
  12. my $query = 'SELECT id, randomNumber FROM World WHERE id = ?';
  13. my $header = [qw(Content-Type application/json)];
  14. my $message = { message => 'Hello, World!' };
  15. my $app = sub {
  16. my $env = shift;
  17. if ( $env->{PATH_INFO} eq '/json' ) {
  18. return [ 200, $header, [ encode_json($message) ]];
  19. }
  20. elsif ( $env->{PATH_INFO} eq '/db' ) {
  21. my ($n) = ($env->{QUERY_STRING} || "" ) =~ m!queries=(\d+)!;
  22. $n //= 1;
  23. my @rs = map {{id=>$_->[0]+0,randomNumber=>$_->[1]+0}}
  24. map { $dbh->selectrow_arrayref($query,{},int rand 10000 + 1) } 1..$n;
  25. return [ 200, $header, [ '{}' ]] unless @rs;
  26. return [ 200, $header, [ encode_json( @rs > 1 ? \@rs : $rs[0] ) ]];
  27. }
  28. [ 404, [], ['not found']];
  29. };
  30. $app;