|
@@ -2,28 +2,28 @@
|
|
extern crate lazy_static;
|
|
extern crate lazy_static;
|
|
#[macro_use]
|
|
#[macro_use]
|
|
extern crate rocket;
|
|
extern crate rocket;
|
|
-extern crate serde_derive;
|
|
|
|
extern crate dotenv;
|
|
extern crate dotenv;
|
|
|
|
+extern crate serde_derive;
|
|
|
|
|
|
|
|
+mod database;
|
|
mod models;
|
|
mod models;
|
|
mod random;
|
|
mod random;
|
|
-mod database;
|
|
|
|
|
|
|
|
use dotenv::dotenv;
|
|
use dotenv::dotenv;
|
|
-use std::net::{IpAddr, Ipv4Addr};
|
|
|
|
|
|
+use figment::Figment;
|
|
|
|
+use rocket::config::{Config, LogLevel};
|
|
|
|
+use rocket::response::content::RawHtml;
|
|
|
|
+use rocket::serde::json::Json;
|
|
|
|
+use rocket::{Build, Rocket};
|
|
|
|
+use rocket_db_pools::{sqlx, Connection, Database};
|
|
|
|
+use sqlx::Acquire;
|
|
use std::env;
|
|
use std::env;
|
|
|
|
+use std::net::{IpAddr, Ipv4Addr};
|
|
use std::thread::available_parallelism;
|
|
use std::thread::available_parallelism;
|
|
-use rocket::{Rocket, Build};
|
|
|
|
-use rocket::serde::json::Json;
|
|
|
|
-use rocket::response::content::RawHtml;
|
|
|
|
-use rocket::config::{Config, LogLevel};
|
|
|
|
use yarte::Template;
|
|
use yarte::Template;
|
|
-use rocket_db_pools::{sqlx, Database, Connection};
|
|
|
|
-use sqlx::Acquire;
|
|
|
|
-use figment::Figment;
|
|
|
|
|
|
|
|
-use models::{World, Fortune, Message};
|
|
|
|
use database::HelloWorld;
|
|
use database::HelloWorld;
|
|
|
|
+use models::{Fortune, Message, World};
|
|
use random::random_number;
|
|
use random::random_number;
|
|
|
|
|
|
#[get("/plaintext")]
|
|
#[get("/plaintext")]
|
|
@@ -43,15 +43,19 @@ async fn json() -> Json<models::Message> {
|
|
async fn db(mut db: Connection<HelloWorld>) -> Json<World> {
|
|
async fn db(mut db: Connection<HelloWorld>) -> Json<World> {
|
|
let number = random_number();
|
|
let number = random_number();
|
|
|
|
|
|
- let result : World = sqlx::query_as("SELECT id, randomnumber FROM World WHERE id = $1").bind(number)
|
|
|
|
- .fetch_one(&mut *db).await.ok().expect("error loading world");
|
|
|
|
|
|
+ let result: World = sqlx::query_as("SELECT id, randomnumber FROM World WHERE id = $1")
|
|
|
|
+ .bind(number)
|
|
|
|
+ .fetch_one(&mut *db)
|
|
|
|
+ .await
|
|
|
|
+ .ok()
|
|
|
|
+ .expect("error loading world");
|
|
|
|
|
|
Json(result)
|
|
Json(result)
|
|
}
|
|
}
|
|
|
|
|
|
#[get("/queries")]
|
|
#[get("/queries")]
|
|
async fn queries_empty(db: Connection<HelloWorld>) -> Json<Vec<World>> {
|
|
async fn queries_empty(db: Connection<HelloWorld>) -> Json<Vec<World>> {
|
|
- queries(db,1).await
|
|
|
|
|
|
+ queries(db, 1).await
|
|
}
|
|
}
|
|
|
|
|
|
#[get("/queries?<q>")]
|
|
#[get("/queries?<q>")]
|
|
@@ -69,8 +73,12 @@ async fn queries(mut db: Connection<HelloWorld>, q: u16) -> Json<Vec<World>> {
|
|
for _ in 0..q {
|
|
for _ in 0..q {
|
|
let query_id = random_number();
|
|
let query_id = random_number();
|
|
|
|
|
|
- let result :World = sqlx::query_as("SELECT * FROM World WHERE id = $1").bind(query_id)
|
|
|
|
- .fetch_one(&mut *db).await.ok().expect("error loading world");
|
|
|
|
|
|
+ let result: World = sqlx::query_as("SELECT * FROM World WHERE id = $1")
|
|
|
|
+ .bind(query_id)
|
|
|
|
+ .fetch_one(&mut *db)
|
|
|
|
+ .await
|
|
|
|
+ .ok()
|
|
|
|
+ .expect("error loading world");
|
|
|
|
|
|
results.push(result);
|
|
results.push(result);
|
|
}
|
|
}
|
|
@@ -86,8 +94,11 @@ pub struct FortunesTemplate<'a> {
|
|
|
|
|
|
#[get("/fortunes")]
|
|
#[get("/fortunes")]
|
|
async fn fortunes(mut db: Connection<HelloWorld>) -> RawHtml<String> {
|
|
async fn fortunes(mut db: Connection<HelloWorld>) -> RawHtml<String> {
|
|
- let mut fortunes: Vec<Fortune> = sqlx::query_as("SELECT * FROM Fortune").fetch_all(&mut *db).await
|
|
|
|
- .ok().expect("Could not load Fortunes");
|
|
|
|
|
|
+ let mut fortunes: Vec<Fortune> = sqlx::query_as("SELECT * FROM Fortune")
|
|
|
|
+ .fetch_all(&mut *db)
|
|
|
|
+ .await
|
|
|
|
+ .ok()
|
|
|
|
+ .expect("Could not load Fortunes");
|
|
|
|
|
|
fortunes.push(Fortune {
|
|
fortunes.push(Fortune {
|
|
id: 0,
|
|
id: 0,
|
|
@@ -107,7 +118,7 @@ async fn fortunes(mut db: Connection<HelloWorld>) -> RawHtml<String> {
|
|
|
|
|
|
#[get("/updates")]
|
|
#[get("/updates")]
|
|
async fn updates_empty(db: Connection<HelloWorld>) -> Json<Vec<World>> {
|
|
async fn updates_empty(db: Connection<HelloWorld>) -> Json<Vec<World>> {
|
|
- updates(db,1).await
|
|
|
|
|
|
+ updates(db, 1).await
|
|
}
|
|
}
|
|
|
|
|
|
#[get("/updates?<q>")]
|
|
#[get("/updates?<q>")]
|
|
@@ -124,21 +135,32 @@ async fn updates(mut db: Connection<HelloWorld>, q: u16) -> Json<Vec<World>> {
|
|
|
|
|
|
for _ in 0..q {
|
|
for _ in 0..q {
|
|
let query_id = random_number();
|
|
let query_id = random_number();
|
|
- let mut result :World = sqlx::query_as("SELECT * FROM World WHERE id = $1").bind(query_id)
|
|
|
|
- .fetch_one(&mut *db).await.ok().expect("World was not found");
|
|
|
|
|
|
+ let mut result: World = sqlx::query_as("SELECT * FROM World WHERE id = $1")
|
|
|
|
+ .bind(query_id)
|
|
|
|
+ .fetch_one(&mut *db)
|
|
|
|
+ .await
|
|
|
|
+ .ok()
|
|
|
|
+ .expect("World was not found");
|
|
|
|
|
|
result.random_number = random_number();
|
|
result.random_number = random_number();
|
|
results.push(result);
|
|
results.push(result);
|
|
}
|
|
}
|
|
|
|
|
|
let mut pool = db.into_inner();
|
|
let mut pool = db.into_inner();
|
|
- let mut tx = pool.begin().await.ok().expect("could not start transaction");
|
|
|
|
|
|
+ let mut tx = pool
|
|
|
|
+ .begin()
|
|
|
|
+ .await
|
|
|
|
+ .ok()
|
|
|
|
+ .expect("could not start transaction");
|
|
|
|
|
|
for w in &results {
|
|
for w in &results {
|
|
sqlx::query("UPDATE World SET randomnumber = $1 WHERE id = $2")
|
|
sqlx::query("UPDATE World SET randomnumber = $1 WHERE id = $2")
|
|
- .bind(w.random_number).bind(w.id)
|
|
|
|
|
|
+ .bind(w.random_number)
|
|
|
|
+ .bind(w.id)
|
|
.execute(&mut tx)
|
|
.execute(&mut tx)
|
|
- .await.ok().expect("Could not update World");
|
|
|
|
|
|
+ .await
|
|
|
|
+ .ok()
|
|
|
|
+ .expect("Could not update World");
|
|
}
|
|
}
|
|
|
|
|
|
tx.commit().await.ok().expect("could not update worlds");
|
|
tx.commit().await.ok().expect("could not update worlds");
|
|
@@ -157,21 +179,27 @@ pub fn launch() -> Rocket<Build> {
|
|
port: 8000,
|
|
port: 8000,
|
|
keep_alive: 0,
|
|
keep_alive: 0,
|
|
log_level: LogLevel::Off,
|
|
log_level: LogLevel::Off,
|
|
- workers: available_parallelism().expect("could not get parallelism").get() * 16,
|
|
|
|
|
|
+ workers: available_parallelism()
|
|
|
|
+ .expect("could not get parallelism")
|
|
|
|
+ .get()
|
|
|
|
+ * 16,
|
|
..Default::default()
|
|
..Default::default()
|
|
};
|
|
};
|
|
|
|
|
|
- let database_url = env::var("ROCKET_BENCHMARK_DATABASE_URL").ok()
|
|
|
|
|
|
+ let database_url = env::var("ROCKET_BENCHMARK_DATABASE_URL")
|
|
|
|
+ .ok()
|
|
.expect("ROCKET_BENCHMARK_DATABASE_URL environment variable was not set");
|
|
.expect("ROCKET_BENCHMARK_DATABASE_URL environment variable was not set");
|
|
|
|
|
|
- let figment = Figment::from(config)
|
|
|
|
- .merge(("databases.hello_world", rocket_db_pools::Config {
|
|
|
|
- url: database_url,
|
|
|
|
- min_connections: None,
|
|
|
|
- max_connections: 100,
|
|
|
|
- connect_timeout: 3,
|
|
|
|
- idle_timeout: None,
|
|
|
|
- }));
|
|
|
|
|
|
+ let figment = Figment::from(config).merge((
|
|
|
|
+ "databases.hello_world",
|
|
|
|
+ rocket_db_pools::Config {
|
|
|
|
+ url: database_url,
|
|
|
|
+ min_connections: None,
|
|
|
|
+ max_connections: 100,
|
|
|
|
+ connect_timeout: 3,
|
|
|
|
+ idle_timeout: None,
|
|
|
|
+ },
|
|
|
|
+ ));
|
|
|
|
|
|
rocket::custom(figment)
|
|
rocket::custom(figment)
|
|
.mount(
|
|
.mount(
|
|
@@ -189,4 +217,3 @@ pub fn launch() -> Rocket<Build> {
|
|
)
|
|
)
|
|
.attach(HelloWorld::init())
|
|
.attach(HelloWorld::init())
|
|
}
|
|
}
|
|
-
|
|
|