summaryrefslogtreecommitdiffstats
path: root/server/src/routes/nodeinfo.rs
diff options
context:
space:
mode:
authorDessalines <tyhou13@gmx.com>2020-01-12 10:31:51 -0500
committerDessalines <tyhou13@gmx.com>2020-01-12 10:31:51 -0500
commitdff8b947bb779d27d4b5953fe1f34166ac5c4104 (patch)
tree2cad663e4ef1689ae741cbce995be42095a8c500 /server/src/routes/nodeinfo.rs
parent677d716ae6b21ecb0569d661c1d76520dade1643 (diff)
Trying to add r2d2 connection pooling to websockets.
Diffstat (limited to 'server/src/routes/nodeinfo.rs')
-rw-r--r--server/src/routes/nodeinfo.rs64
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)
}