Implement /rpc_server_snapshot endpoint

This returns a JSON snapshot of the state of the server
This commit is contained in:
Nathan Sobo 2022-05-25 17:42:25 -06:00
parent 6a32d55d85
commit 742dd75041
6 changed files with 68 additions and 8 deletions

View file

@ -1,7 +1,7 @@
use crate::{
auth,
db::{User, UserId},
rpc::ResultExt,
rpc::{self, ResultExt},
AppState, Error, Result,
};
use anyhow::anyhow;
@ -15,11 +15,12 @@ use axum::{
Extension, Json, Router,
};
use serde::{Deserialize, Serialize};
use serde_json::Value;
use std::sync::Arc;
use tower::ServiceBuilder;
use tracing::instrument;
pub fn routes(rpc_server: &Arc<crate::rpc::Server>, state: Arc<AppState>) -> Router<Body> {
pub fn routes(rpc_server: &Arc<rpc::Server>, state: Arc<AppState>) -> Router<Body> {
Router::new()
.route("/users", get(get_users).post(create_user))
.route(
@ -29,6 +30,7 @@ pub fn routes(rpc_server: &Arc<crate::rpc::Server>, state: Arc<AppState>) -> Rou
.route("/users/:id/access_tokens", post(create_access_token))
.route("/invite_codes/:code", get(get_user_for_invite_code))
.route("/panic", post(trace_panic))
.route("/rpc_server_snapshot", get(get_rpc_server_snapshot))
.layer(
ServiceBuilder::new()
.layer(Extension(state))
@ -84,7 +86,7 @@ struct CreateUserParams {
async fn create_user(
Json(params): Json<CreateUserParams>,
Extension(app): Extension<Arc<AppState>>,
Extension(rpc_server): Extension<Arc<crate::rpc::Server>>,
Extension(rpc_server): Extension<Arc<rpc::Server>>,
) -> Result<Json<User>> {
println!("{:?}", params);
@ -177,6 +179,12 @@ async fn trace_panic(panic: Json<Panic>) -> Result<()> {
Ok(())
}
async fn get_rpc_server_snapshot<'a>(
Extension(rpc_server): Extension<Arc<rpc::Server>>,
) -> Result<Json<Value>> {
Ok(Json(serde_json::to_value(rpc_server.snapshot().await)?))
}
#[derive(Deserialize)]
struct CreateAccessTokenQueryParams {
public_key: String,