Browse Source

add user_count in systemlog

master
hole-thu 2 years ago
parent
commit
bbed041253
  1. 2
      Dockerfile
  2. 10
      src/api/systemlog.rs
  3. 19
      src/cache.rs
  4. 5
      src/models.rs

2
Dockerfile

@ -1,4 +1,4 @@
FROM rust:1.64-bullseye as builder FROM rust:1-bullseye as builder
WORKDIR /usr/src/ WORKDIR /usr/src/
RUN cargo new myapp --vcs none RUN cargo new myapp --vcs none
WORKDIR /usr/src/myapp WORKDIR /usr/src/myapp

10
src/api/systemlog.rs

@ -1,4 +1,6 @@
use crate::api::{CurrentUser, JsonApi}; use crate::api::{CurrentUser, JsonApi};
use crate::cache::cached_user_count;
use crate::db_conn::Db;
use crate::random_hasher::RandomHasher; use crate::random_hasher::RandomHasher;
use crate::rds_conn::RdsConn; use crate::rds_conn::RdsConn;
use crate::rds_models::{get_admin_list, get_candidate_list, Systemlog}; use crate::rds_models::{get_admin_list, get_candidate_list, Systemlog};
@ -6,13 +8,19 @@ use rocket::serde::json::{json, Value};
use rocket::State; use rocket::State;
#[get("/systemlog")] #[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?; let logs = Systemlog::get_list(&rconn, 50).await?;
Ok(json!({ Ok(json!({
"tmp_token": rh.get_tmp_token(), "tmp_token": rh.get_tmp_token(),
"salt": look!(rh.salt), "salt": look!(rh.salt),
"start_time": rh.start_time.timestamp(), "start_time": rh.start_time.timestamp(),
"user_count": cached_user_count(&db, &mut rconn).await?,
"custom_title": user.custom_title, "custom_title": user.custom_title,
"admin_list": get_admin_list(&rconn).await?, "admin_list": get_admin_list(&rconn).await?,
"candidate_list": get_candidate_list(&rconn).await?, "candidate_list": get_candidate_list(&rconn).await?,

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::models::{Comment, Post, User};
use crate::rds_conn::RdsConn; use crate::rds_conn::RdsConn;
use crate::rds_models::{clear_all, init, BlockedUsers}; use crate::rds_models::{clear_all, init, BlockedUsers};
@ -10,6 +11,9 @@ use futures_util::stream::StreamExt;
use rocket::futures::future; use rocket::futures::future;
use std::collections::HashMap; 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 INSTANCE_EXPIRE_TIME: usize = 60 * 60;
const MIN_LENGTH: isize = 200; const MIN_LENGTH: isize = 200;
@ -363,3 +367,16 @@ impl BlockDictCache {
self.rconn.del(&self.key).await 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)
}
}

5
src/models.rs

@ -450,6 +450,11 @@ impl User {
.unwrap(); .unwrap();
UserCache::clear_all(rconn).await; 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)] #[derive(Insertable)]

Loading…
Cancel
Save