metrics wip

This commit is contained in:
Shadowy Super Coder
2024-06-04 09:21:55 -06:00
parent 2568bfde5e
commit 8f7072d7e9

View File

@@ -1,19 +1,28 @@
use std::net::SocketAddr;
use axum::Router;
use chrono::Utc;
use futures::future::ready;
use rpc_toolkit::{Context, ParentHandler, Server};
use rpc_toolkit::{from_fn_async, Context, HandlerExt, ParentHandler, Server};
use sqlx::query;
use ts_rs::TS;
use crate::analytics::context::AnalyticsContext;
use crate::middleware::cors::Cors;
use crate::net::static_server::{bad_request, not_found, server_error};
use crate::net::web_server::WebServer;
use crate::rpc_continuations::Guid;
use crate::Error;
pub mod context;
pub fn analytics_api<C: Context>() -> ParentHandler<C> {
ParentHandler::new() // TODO: FullMetal
ParentHandler::new()
.subcommand("recordMetrics", from_fn_async(record_metrics).no_cli())
.subcommand(
"recordUserActivity",
from_fn_async(record_user_activity).no_cli(),
)
}
pub fn analytics_server_router(ctx: AnalyticsContext) -> Router {
@@ -76,3 +85,59 @@ impl WebServer {
Self::new(bind, analytics_server_router(ctx))
}
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize, TS)]
#[ts(export)]
#[serde(rename_all = "camelCase")]
struct MetricsParams {
version: char,
pkg_id: char,
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize, TS)]
#[ts(export)]
#[serde(rename_all = "camelCase")]
struct ActivityParams {
server_id: String,
os_version: String,
arch: String,
}
async fn record_metrics(
ctx: AnalyticsContext,
MetricsParams {
version,
pkg_id,
}: MetricsParams,
) -> Result<(), Error> {
let pool = ctx.db;
let created_at = Utc::now().to_rfc3339();
query!(
"INSERT INTO metric (created_at, version, pkg_id) VALUES ($1, $2, $3)",
created_at,
version,
pkg_id
)
.execute(pool)
.await?;
Ok(())
}
async fn record_user_activity(
analytics_ctx: AnalyticsContext,
ActivityParams { server_id, os_version, arch }: ActivityParams,
) -> Result<(), Error> {
let pool = analytics_ctx.db;
let created_at = Utc::now().to_rfc3339();
query!("INSERT INTO user_activity (created_at, server_id, os_version, arch) VALUES ($1, $2, $3, $4)",
created_at,
server_id,
os_vers,
arch
)
.execute(pool)
.await?;
Ok(())
}