add user_count in systemlog
This commit is contained in:
@@ -1,4 +1,6 @@
|
||||
use crate::api::{CurrentUser, JsonApi};
|
||||
use crate::cache::cached_user_count;
|
||||
use crate::db_conn::Db;
|
||||
use crate::random_hasher::RandomHasher;
|
||||
use crate::rds_conn::RdsConn;
|
||||
use crate::rds_models::{get_admin_list, get_candidate_list, Systemlog};
|
||||
@@ -6,13 +8,19 @@ use rocket::serde::json::{json, Value};
|
||||
use rocket::State;
|
||||
|
||||
#[get("/systemlog")]
|
||||
pub async fn get_systemlog(user: CurrentUser, rh: &State<RandomHasher>, rconn: RdsConn) -> JsonApi {
|
||||
pub async fn get_systemlog(
|
||||
user: CurrentUser,
|
||||
rh: &State<RandomHasher>,
|
||||
db: Db,
|
||||
mut rconn: RdsConn,
|
||||
) -> JsonApi {
|
||||
let logs = Systemlog::get_list(&rconn, 50).await?;
|
||||
|
||||
Ok(json!({
|
||||
"tmp_token": rh.get_tmp_token(),
|
||||
"salt": look!(rh.salt),
|
||||
"start_time": rh.start_time.timestamp(),
|
||||
"user_count": cached_user_count(&db, &mut rconn).await?,
|
||||
"custom_title": user.custom_title,
|
||||
"admin_list": get_admin_list(&rconn).await?,
|
||||
"candidate_list": get_candidate_list(&rconn).await?,
|
||||
|
||||
19
src/cache.rs
19
src/cache.rs
@@ -1,4 +1,5 @@
|
||||
use crate::api::CurrentUser;
|
||||
use crate::api::{Api, CurrentUser};
|
||||
use crate::db_conn::Db;
|
||||
use crate::models::{Comment, Post, User};
|
||||
use crate::rds_conn::RdsConn;
|
||||
use crate::rds_models::{clear_all, init, BlockedUsers};
|
||||
@@ -10,6 +11,9 @@ use futures_util::stream::StreamExt;
|
||||
use rocket::futures::future;
|
||||
use std::collections::HashMap;
|
||||
|
||||
const KEY_USER_COUNT: &str = "hole_v2:cache:user_count";
|
||||
const USER_COUNT_EXPIRE_TIME: usize = 5 * 60;
|
||||
|
||||
const INSTANCE_EXPIRE_TIME: usize = 60 * 60;
|
||||
|
||||
const MIN_LENGTH: isize = 200;
|
||||
@@ -363,3 +367,16 @@ impl BlockDictCache {
|
||||
self.rconn.del(&self.key).await
|
||||
}
|
||||
}
|
||||
|
||||
pub async fn cached_user_count(db: &Db, rconn: &mut RdsConn) -> Api<i64> {
|
||||
let cnt: Option<i64> = rconn.get(KEY_USER_COUNT).await?;
|
||||
if let Some(x) = cnt {
|
||||
Ok(x)
|
||||
} else {
|
||||
let x = User::get_count(db).await?;
|
||||
rconn
|
||||
.set_ex(KEY_USER_COUNT, x, USER_COUNT_EXPIRE_TIME)
|
||||
.await?;
|
||||
Ok(x)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -450,6 +450,11 @@ impl User {
|
||||
.unwrap();
|
||||
UserCache::clear_all(rconn).await;
|
||||
}
|
||||
|
||||
pub async fn get_count(db: &Db) -> QueryResult<i64> {
|
||||
db.run(move |c| users::table.count().get_result(with_log!(c)))
|
||||
.await
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Insertable)]
|
||||
|
||||
Reference in New Issue
Block a user