|
@@ -3,52 +3,54 @@ use Web::Simple;
|
|
|
use JSON::XS;
|
|
|
use DBI;
|
|
|
|
|
|
-my $dsn = "dbi:mysql:database=hello_world;host=localhost";
|
|
|
-my $dbh = DBI->connect( $dsn, 'benchmarkdbuser', 'benchmarkdbpass', { RaiseError => 1 });
|
|
|
-my $sth = $dbh->prepare('SELECT * FROM World where id = ?');
|
|
|
+sub get_database_handle {
|
|
|
+ DBI->connect_cached('dbi:mysql:database=hello_world;host=TFB-database', 'benchmarkdbuser', 'benchmarkdbpass', { RaiseError => 1 });
|
|
|
+}
|
|
|
|
|
|
sub dispatch_request {
|
|
|
- sub (/json) {
|
|
|
- [ 200, [ 'Content-type' => 'application/json', ],
|
|
|
- [ encode_json({ message => 'Hello, World!' }) ] ];
|
|
|
- },
|
|
|
- sub (/db) {
|
|
|
- my $id = int(rand 10000) + 1;
|
|
|
- my $rand;
|
|
|
- $sth->execute($id);
|
|
|
- $sth->bind_col(2, \$rand);
|
|
|
- if ( my @row = $sth->fetch ) {
|
|
|
- [ 200, [ 'Content-type' => 'application/json', ], [ encode_json({ id => $id, randomNumber => $rand })] ];
|
|
|
- }
|
|
|
- },
|
|
|
- sub (/query + ?queries~) {
|
|
|
- my ($self, $queries) = @_;
|
|
|
- $queries //= 1;
|
|
|
- $queries = 1 if ( $queries !~ /^\d+$/ || $queries < 1 );
|
|
|
- $queries = 500 if $queries > 500;
|
|
|
- my $rand;
|
|
|
- my @response;
|
|
|
- if ($queries == 1) {
|
|
|
- my $id = int(rand 10000) + 1;
|
|
|
- $sth->execute($id);
|
|
|
- $sth->bind_col(2, \$rand);
|
|
|
- if ( my @row = $sth->fetch ) {
|
|
|
- [ 200, [ 'Content-type' => 'application/json', ],
|
|
|
- [ encode_json([{ id => $id, randomNumber => $rand }])] ];
|
|
|
+ sub (/json) {
|
|
|
+ [ 200, [ 'Content-type' => 'application/json', ], [ encode_json({ message => 'Hello, World!' }) ] ];
|
|
|
+ },
|
|
|
+ sub (/db) {
|
|
|
+ my ($id, $random_number);
|
|
|
+ my $dbh = get_database_handle;
|
|
|
+ my $sth = $dbh->prepare_cached('SELECT id, randomNumber FROM World where id = ?');
|
|
|
+ $sth->execute(int(rand 10000) + 1);
|
|
|
+ $sth->bind_columns(\$id, \$random_number);
|
|
|
+ $sth->fetch;
|
|
|
+ $sth->finish;
|
|
|
+ [ 200, [ 'Content-type' => 'application/json', ], [ encode_json({ id => $id, randomNumber => $random_number })] ];
|
|
|
+ },
|
|
|
+ sub (/query + ?queries~) {
|
|
|
+ my ($self, $queries) = @_;
|
|
|
+ $queries //= 1;
|
|
|
+ $queries = 1 if ($queries !~ /^\d+$/ || $queries < 1);
|
|
|
+ $queries = 500 if $queries > 500;
|
|
|
+ if ($queries == 1) {
|
|
|
+ my ($id, $random_number);
|
|
|
+ my $dbh = get_database_handle;
|
|
|
+ my $sth = $dbh->prepare_cached('SELECT id, randomNumber FROM World where id = ?');
|
|
|
+ $sth->execute(int(rand 10000) + 1);
|
|
|
+ $sth->bind_columns(\$id, \$random_number);
|
|
|
+ $sth->fetch;
|
|
|
+ $sth->finish;
|
|
|
+ [ 200, [ 'Content-type' => 'application/json', ], [ encode_json([{ id => $id, randomNumber => $random_number }])] ];
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ my @worlds;
|
|
|
+ for (1 .. $queries) {
|
|
|
+ my ($id, $random_number);
|
|
|
+ my $dbh = get_database_handle;
|
|
|
+ my $sth = $dbh->prepare_cached('SELECT id, randomNumber FROM World where id = ?');
|
|
|
+ $sth->execute(int(rand 10000) + 1);
|
|
|
+ $sth->bind_columns(\$id, \$random_number);
|
|
|
+ $sth->fetch;
|
|
|
+ $sth->finish;
|
|
|
+ push @worlds, { id => $id, randomNumber => $random_number };
|
|
|
+ }
|
|
|
+ [ 200, [ 'Content-type' => 'application/json', ], [ encode_json(\@worlds)] ];
|
|
|
}
|
|
|
}
|
|
|
- else {
|
|
|
- for ( 1 .. $queries ) {
|
|
|
- my $id = int(rand 10000) + 1;
|
|
|
- $sth->execute($id);
|
|
|
- $sth->bind_col(2, \$rand);
|
|
|
- if ( my @row = $sth->fetch ) {
|
|
|
- push @response, { id => $id, randomNumber => $rand };
|
|
|
- }
|
|
|
- }
|
|
|
- [ 200, [ 'Content-type' => 'application/json', ], [ encode_json(\@response)] ];
|
|
|
- }
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
__PACKAGE__->run_if_script;
|