Page MenuHomeDevCentral

D712.id1792.diff
No OneTemporary

D712.id1792.diff

diff --git a/Cargo.toml b/Cargo.toml
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -12,8 +12,11 @@
env_logger = "^0.3"
iron = "0.4.*"
log = "^0.3.5"
+persistent= "^0.2.1"
+r2d2 = "^0.7"
+r2d2_sqlite = "^0.1.0"
router = "*"
-rust-sqlite = "0.3.0"
+rusqlite = "^0.7.3"
[dev-dependencies]
iron-test = "0.4"
diff --git a/src/http_server.rs b/src/http_server.rs
--- a/src/http_server.rs
+++ b/src/http_server.rs
@@ -6,7 +6,11 @@
License: BSD-2-Clause
------------------------------------------------------------- */
+use store::SqliteDB;
+use store::SqlitePool;
+
use iron::prelude::*;
+use persistent::Read;
use router::Router;
use std::env;
@@ -23,11 +27,17 @@
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/// Prepares an Iron handler.
-fn initialize_handler() -> Router {
- router!(
+fn initialize_handler(pool: SqlitePool) -> Chain {
+ let router = router!(
index: get "/" => ::web_handlers::get,
status: get "/status" => ::web_handlers::alive
- )
+ );
+
+ let mut chain = Chain::new(router);
+ chain.link(Read::<SqliteDB>::both(pool));
+
+
+ chain
}
/// Gets the address the HTTP server should bind to.
@@ -36,13 +46,13 @@
}
/// Runs an HTTP server.
-pub fn run() {
+pub fn run(pool: SqlitePool) {
let listen = get_bind_address();
info!("Starting HTTP server");
info!("Listen to http://{}", listen);
- let _server = Iron::new(initialize_handler()).http(&*listen);
+ let _server = Iron::new(initialize_handler(pool)).http(&*listen);
if let Err(err) = _server {
error!("{}", err)
}
diff --git a/src/main.rs b/src/main.rs
--- a/src/main.rs
+++ b/src/main.rs
@@ -13,21 +13,26 @@
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
#[macro_use]
+extern crate lazy_static;
+
+#[macro_use]
extern crate log;
extern crate env_logger;
+extern crate r2d2;
+extern crate r2d2_sqlite;
+
extern crate iron;
+extern crate persistent;
#[macro_use]
extern crate router;
-extern crate sqlite3;
-
/* -------------------------------------------------------------
Modules
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-mod http_server;
mod store;
+mod http_server;
mod web_handlers;
/* -------------------------------------------------------------
@@ -42,5 +47,7 @@
env!("CARGO_PKG_NAME"),
env!("CARGO_PKG_VERSION"));
- http_server::run();
+ let pool = store::get_pool();
+
+ http_server::run(pool);
}
diff --git a/src/store.rs b/src/store.rs
--- a/src/store.rs
+++ b/src/store.rs
@@ -6,11 +6,10 @@
License: BSD-2-Clause
------------------------------------------------------------- */
-use sqlite3::DatabaseConnection;
-use sqlite3::SqliteResult;
-use sqlite3::StatementUpdate;
-use sqlite3::ToSql;
-use sqlite3::access::ByFilename;
+use iron::typemap::Key;
+
+use r2d2;
+use r2d2_sqlite::SqliteConnectionManager;
use std::env;
use std::fs;
@@ -29,6 +28,16 @@
}
/* -------------------------------------------------------------
+ SQLite pool
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
+
+pub type SqlitePool = r2d2::Pool<SqliteConnectionManager>;
+pub type SqliteConnection = r2d2::PooledConnection<SqliteConnectionManager>;
+
+pub struct SqliteDB;
+impl Key for SqliteDB { type Value = SqlitePool;}
+
+/* -------------------------------------------------------------
Data store context
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
@@ -108,6 +117,14 @@
)
}
+/// Gets pool.
+pub fn get_pool() -> SqlitePool {
+ let config = r2d2::Config::builder().pool_size(2).build();
+ let manager = SqliteConnectionManager::new(&*get_path());
+
+ r2d2::Pool::new(config, manager).unwrap()
+}
+
/// Gets the SQL tables schema for the log store.
pub fn get_schema<'a> () -> &'a str {
include_str!("../sql/schema.sql")

File Metadata

Mime Type
text/plain
Expires
Sun, Jul 27, 14:00 (13 h, 28 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2849671
Default Alt Text
D712.id1792.diff (3 KB)

Event Timeline