diff options
author | Dessalines <tyhou13@gmx.com> | 2020-01-12 10:31:51 -0500 |
---|---|---|
committer | Dessalines <tyhou13@gmx.com> | 2020-01-12 10:31:51 -0500 |
commit | dff8b947bb779d27d4b5953fe1f34166ac5c4104 (patch) | |
tree | 2cad663e4ef1689ae741cbce995be42095a8c500 /server/src/routes/nodeinfo.rs | |
parent | 677d716ae6b21ecb0569d661c1d76520dade1643 (diff) |
Trying to add r2d2 connection pooling to websockets.
Diffstat (limited to 'server/src/routes/nodeinfo.rs')
-rw-r--r-- | server/src/routes/nodeinfo.rs | 64 |
1 files changed, 35 insertions, 29 deletions
diff --git a/server/src/routes/nodeinfo.rs b/server/src/routes/nodeinfo.rs index 2b7135fb..6ab540f9 100644 --- a/server/src/routes/nodeinfo.rs +++ b/server/src/routes/nodeinfo.rs @@ -1,10 +1,11 @@ -use crate::db::establish_connection; use crate::db::site_view::SiteView; use crate::version; use crate::Settings; use actix_web::body::Body; use actix_web::web; use actix_web::HttpResponse; +use diesel::r2d2::{ConnectionManager, Pool}; +use diesel::PgConnection; use serde_json::json; pub fn config(cfg: &mut web::ServiceConfig) { @@ -26,34 +27,39 @@ async fn node_info_well_known() -> HttpResponse<Body> { .body(json.to_string()) } -async fn node_info() -> HttpResponse<Body> { - let conn = establish_connection(); - let site_view = match SiteView::read(&conn) { - Ok(site_view) => site_view, - Err(_e) => return HttpResponse::InternalServerError().finish(), - }; - let protocols = if Settings::get().federation_enabled { - vec!["activitypub"] - } else { - vec![] - }; - let json = json!({ - "version": "2.0", - "software": { - "name": "lemmy", - "version": version::VERSION, - }, - "protocols": protocols, - "usage": { - "users": { - "total": site_view.number_of_users +async fn node_info( + db: web::Data<Pool<ConnectionManager<PgConnection>>>, +) -> Result<HttpResponse, actix_web::Error> { + let res = web::block(move || { + let conn = db.get()?; + let site_view = match SiteView::read(&conn) { + Ok(site_view) => site_view, + Err(_) => return Err(format_err!("not_found")), + }; + let protocols = if Settings::get().federation_enabled { + vec!["activitypub"] + } else { + vec![] + }; + Ok(json!({ + "version": "2.0", + "software": { + "name": "lemmy", + "version": version::VERSION, }, - "localPosts": site_view.number_of_posts, - "localComments": site_view.number_of_comments, - "openRegistrations": site_view.open_registration, + "protocols": protocols, + "usage": { + "users": { + "total": site_view.number_of_users + }, + "localPosts": site_view.number_of_posts, + "localComments": site_view.number_of_comments, + "openRegistrations": site_view.open_registration, } - }); - HttpResponse::Ok() - .content_type("application/json") - .body(json.to_string()) + })) + }) + .await + .map(|json| HttpResponse::Ok().json(json)) + .map_err(|_| HttpResponse::InternalServerError())?; + Ok(res) } |