Skip to content

Instantly share code, notes, and snippets.

@jberger
Last active August 29, 2015 13:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jberger/9026436 to your computer and use it in GitHub Desktop.
Save jberger/9026436 to your computer and use it in GitHub Desktop.
Mojolicious entry for http://www.techempower.com/
use Mojolicious::Lite;
use Mango;
use JSON::XS 'encode_json';
use Scalar::Util 'looks_like_number';
helper mango => sub { state $mango = Mango->new('mongodb://localhost:27017') };
helper world => sub { shift->mango->db('test')->collection('World') };
helper fortune => sub { shift->mango->db('test')->collection('Fortune') };
helper render_json => sub { shift->render( data => encode_json(shift), format => 'json' ) };
get '/json' => sub { shift->render_json({message => 'Hello, World!'}) };
get '/mojo_json' => sub { shift->render(json => {message => 'Hello, World!'}) };
get '/db' => sub { shift->render_query(1) };
get '/queries' => sub {
my $c = shift;
my $q = $c->param('queries');
$q = 1 unless looks_like_number($q);
$q = 500 if $q > 500;
$c->render_query($q);
};
get '/plaintext' => sub { shift->render( text => 'Hello, World!' ) };
helper 'render_query' => sub {
my ($self, $q) = @_;
$self->render_later;
my $r = [];
my $tx = $self->tx;
my $delay = Mojo::IOLoop->delay(sub{
$self->render_json($r) unless $tx->is_finished;
});
my $world = $self->world;
foreach (1 .. $q) {
my $id = int rand 10_000;
my $end = $delay->begin;
$world->find_one({_id => $id} => sub {
my ($collection, $err, $doc) = @_;
# return warn $err if $err;
push @$r, { id => $id, randomNumber => $doc->{randomNumber} };
$end->();
});
}
};
helper 'populate' => sub {
my $self = shift;
my $world = $self->world;
eval{ $world->drop };
my $i = 1;
$world->insert({_id => $i++, randomNumber => int rand 10_000 }) for 1 .. 10_000;
my $j = 1;
my $fortune = $self->fortune;
eval { $fortune->drop };
for (1..12) {
my $f = `fortune`;
$fortune->insert({_id => $j++, message => $f});
}
};
app->start;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment