From 03c72c03bf6e194c658f74fbf13feb5178deb4ea Mon Sep 17 00:00:00 2001 From: imlonghao Date: Sun, 23 Jan 2022 14:57:27 +0800 Subject: [PATCH] feat: impl API /pkg/{name} --- src/main.rs | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/src/main.rs b/src/main.rs index 9775655..8526cef 100644 --- a/src/main.rs +++ b/src/main.rs @@ -173,6 +173,44 @@ async fn logs(db: web::Data) -> impl Responder { HttpResponse::Ok().json(results) } +#[get("/imlonghao-api/pkg/{name}")] +async fn get_pkg( + name: web::Path, + db: web::Data, +) -> impl Responder { + let conn = db.get().await.unwrap(); + let rows = conn + .query( + "select ts, pkgbase, COALESCE(pkg_version, '') AS pkg_version, elapsed, result, COALESCE(case when elapsed = 0 then 0 else cputime * 100 / elapsed end, -1) AS cpu, COALESCE(round(memory / 1073741824.0, 3), -1) AS memory from lilac.pkglog WHERE pkgbase=$1 order by id desc", + &[&name.to_string()], + ) + .await + .unwrap(); + let mut results: Vec = vec![]; + for row in rows { + let ts: chrono::DateTime = row.get("ts"); + let pkgbase: String = row.get("pkgbase"); + let pkg_version: String = row.get("pkg_version"); + let maintainer = get_maintainer(pkgbase.clone()).unwrap_or("Unknown".to_string()); + let elapsed: i32 = row.get("elapsed"); + let result: BuildResult = row.get("result"); + let cpu: i32 = row.get("cpu"); + let memory: pg_bigdecimal::PgNumeric = row.get("memory"); + let memory_bd: bigdecimal::BigDecimal = memory.n.unwrap(); + results.push(LogsResponse { + ts: ts.timestamp(), + pkgbase: pkgbase, + pkg_version: pkg_version, + maintainer: maintainer, + elapsed: elapsed, + result: result.to_string(), + cpu: cpu, + memory: memory_bd.to_f64().unwrap(), + }) + } + HttpResponse::Ok().json(results) +} + #[actix_web::main] async fn main() -> std::io::Result<()> { let mut cfg = deadpool_postgres::Config::new(); @@ -195,6 +233,7 @@ async fn main() -> std::io::Result<()> { .service(status) .service(current) .service(logs) + .service(get_pkg) }) .bind("127.0.0.1:9077")? .run()