mirror of
https://github.com/BioArchLinux/bioarchlinux-packages.git
synced 2025-03-10 06:24:00 +00:00
feat: impl API /imlonghao-api/pkg/{name}/log/{ts}
This commit is contained in:
parent
d46051dc5f
commit
ce79ff8a76
1 changed files with 47 additions and 1 deletions
48
src/main.rs
48
src/main.rs
|
@ -10,7 +10,19 @@ use serde::Serialize;
|
||||||
use std::fmt::Display;
|
use std::fmt::Display;
|
||||||
use yaml_rust::YamlLoader;
|
use yaml_rust::YamlLoader;
|
||||||
|
|
||||||
#[derive(Debug, ToSql, FromSql, Display)]
|
const STYLE_HTML: &'static str = r#"<style>
|
||||||
|
code {
|
||||||
|
font-family: "SFMono-Regular", Monaco, Menlo, Consolas, "Liberation Mono", Courier, monospace;
|
||||||
|
font-size: 12px;
|
||||||
|
line-height: 20px;
|
||||||
|
white-space: pre-wrap;
|
||||||
|
margin: 0 auto;
|
||||||
|
width: 80%;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
</style>"#;
|
||||||
|
|
||||||
|
#[derive(Debug, ToSql, FromSql, Display, PartialEq)]
|
||||||
#[postgres(name = "batchevent")]
|
#[postgres(name = "batchevent")]
|
||||||
enum BatchEvent {
|
enum BatchEvent {
|
||||||
#[postgres(name = "start")]
|
#[postgres(name = "start")]
|
||||||
|
@ -211,6 +223,39 @@ async fn get_pkg(
|
||||||
HttpResponse::Ok().json(results)
|
HttpResponse::Ok().json(results)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[get("/imlonghao-api/pkg/{name}/log/{ts}")]
|
||||||
|
async fn get_pkg_log(
|
||||||
|
path: web::Path<(String, i64)>,
|
||||||
|
db: web::Data<deadpool_postgres::Pool>,
|
||||||
|
) -> impl Responder {
|
||||||
|
let (name, ts) = path.into_inner();
|
||||||
|
let dt = chrono::DateTime::<chrono::Utc>::from_utc(
|
||||||
|
chrono::naive::NaiveDateTime::from_timestamp(ts, 0),
|
||||||
|
chrono::Utc,
|
||||||
|
);
|
||||||
|
let conn = db.get().await.unwrap();
|
||||||
|
let rows = conn
|
||||||
|
.query(
|
||||||
|
"select * from lilac.batch where ts < $1 order by id desc limit 1",
|
||||||
|
&[&dt],
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
let event: BatchEvent = rows[0].get("event");
|
||||||
|
if event != BatchEvent::Start {
|
||||||
|
return HttpResponse::BadRequest().body("wrong time");
|
||||||
|
}
|
||||||
|
let logdir: String = rows[0].get("logdir");
|
||||||
|
let contents =
|
||||||
|
std::fs::read_to_string(format!("/home/lilydjwg/.lilac/log/{}/{}.log", logdir, name))
|
||||||
|
.unwrap();
|
||||||
|
let converted = ansi_to_html::convert(&contents, true, false).unwrap();
|
||||||
|
let html = format!("{}<code>{}</code>", STYLE_HTML, converted);
|
||||||
|
HttpResponse::Ok()
|
||||||
|
.content_type("text/html; charset=UTF-8")
|
||||||
|
.body(html)
|
||||||
|
}
|
||||||
|
|
||||||
#[actix_web::main]
|
#[actix_web::main]
|
||||||
async fn main() -> std::io::Result<()> {
|
async fn main() -> std::io::Result<()> {
|
||||||
let mut cfg = deadpool_postgres::Config::new();
|
let mut cfg = deadpool_postgres::Config::new();
|
||||||
|
@ -234,6 +279,7 @@ async fn main() -> std::io::Result<()> {
|
||||||
.service(current)
|
.service(current)
|
||||||
.service(logs)
|
.service(logs)
|
||||||
.service(get_pkg)
|
.service(get_pkg)
|
||||||
|
.service(get_pkg_log)
|
||||||
})
|
})
|
||||||
.bind("127.0.0.1:9077")?
|
.bind("127.0.0.1:9077")?
|
||||||
.run()
|
.run()
|
||||||
|
|
Loading…
Add table
Reference in a new issue