mirror of
https://github.com/BioArchLinux/bioarchlinux-packages.git
synced 2025-03-10 06:24:00 +00:00
feat: impl api /logs
This commit is contained in:
parent
bff1851e43
commit
8fd2822ba3
5 changed files with 389 additions and 2 deletions
|
@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
|
- Implemente API for `/logs`
|
||||||
|
|
||||||
## [0.1.0] - 2022-01-23
|
## [0.1.0] - 2022-01-23
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
227
Cargo.lock
generated
227
Cargo.lock
generated
|
@ -232,18 +232,48 @@ dependencies = [
|
||||||
"thiserror",
|
"thiserror",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "anyhow"
|
||||||
|
version = "1.0.53"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "94a45b455c14666b85fc40a019e8ab9eb75e3a124e05494f5397122bc9eb06e0"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "archlinuxcn-packages"
|
name = "archlinuxcn-packages"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"actix-web",
|
"actix-web",
|
||||||
"ansi-to-html",
|
"ansi-to-html",
|
||||||
|
"anyhow",
|
||||||
|
"bigdecimal",
|
||||||
|
"cached",
|
||||||
"chrono",
|
"chrono",
|
||||||
"deadpool-postgres",
|
"deadpool-postgres",
|
||||||
"enum-display-derive",
|
"enum-display-derive",
|
||||||
|
"pg_bigdecimal",
|
||||||
"postgres-types",
|
"postgres-types",
|
||||||
"serde",
|
"serde",
|
||||||
"tokio-postgres",
|
"tokio-postgres",
|
||||||
|
"yaml-rust",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "async-mutex"
|
||||||
|
version = "1.4.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "479db852db25d9dbf6204e6cb6253698f175c15726470f78af0d918e99d6156e"
|
||||||
|
dependencies = [
|
||||||
|
"event-listener",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "async-rwlock"
|
||||||
|
version = "1.3.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "261803dcc39ba9e72760ba6e16d0199b1eef9fc44e81bffabbebb9f5aea3906c"
|
||||||
|
dependencies = [
|
||||||
|
"async-mutex",
|
||||||
|
"event-listener",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -269,6 +299,17 @@ version = "0.13.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd"
|
checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "bigdecimal"
|
||||||
|
version = "0.3.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "6aaf33151a6429fe9211d1b276eafdf70cdff28b071e76c0b0e1503221ea3744"
|
||||||
|
dependencies = [
|
||||||
|
"num-bigint",
|
||||||
|
"num-integer",
|
||||||
|
"num-traits",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bitflags"
|
name = "bitflags"
|
||||||
version = "1.3.2"
|
version = "1.3.2"
|
||||||
|
@ -326,6 +367,40 @@ dependencies = [
|
||||||
"bytes",
|
"bytes",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "cached"
|
||||||
|
version = "0.30.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "af4dfac631a8e77b2f327f7852bb6172771f5279c4512efe79fad6067b37be3d"
|
||||||
|
dependencies = [
|
||||||
|
"async-mutex",
|
||||||
|
"async-rwlock",
|
||||||
|
"async-trait",
|
||||||
|
"cached_proc_macro",
|
||||||
|
"cached_proc_macro_types",
|
||||||
|
"futures",
|
||||||
|
"hashbrown",
|
||||||
|
"once_cell",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "cached_proc_macro"
|
||||||
|
version = "0.9.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "725f434d6da2814b989bd905c62ca28a9383feff7440210dc279665fbbbc9511"
|
||||||
|
dependencies = [
|
||||||
|
"cached_proc_macro_types",
|
||||||
|
"darling",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "cached_proc_macro_types"
|
||||||
|
version = "0.1.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "3a4f925191b4367301851c6d99b09890311d74b0d43f274c0b34c86d308a3663"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cc"
|
name = "cc"
|
||||||
version = "1.0.72"
|
version = "1.0.72"
|
||||||
|
@ -398,6 +473,41 @@ dependencies = [
|
||||||
"generic-array",
|
"generic-array",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "darling"
|
||||||
|
version = "0.13.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d0d720b8683f8dd83c65155f0530560cba68cd2bf395f6513a483caee57ff7f4"
|
||||||
|
dependencies = [
|
||||||
|
"darling_core",
|
||||||
|
"darling_macro",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "darling_core"
|
||||||
|
version = "0.13.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "7a340f241d2ceed1deb47ae36c4144b2707ec7dd0b649f894cb39bb595986324"
|
||||||
|
dependencies = [
|
||||||
|
"fnv",
|
||||||
|
"ident_case",
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"strsim",
|
||||||
|
"syn",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "darling_macro"
|
||||||
|
version = "0.13.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "72c41b3b7352feb3211a0d743dc5700a4e3b60f51bd2b368892d1e0f9a95f44b"
|
||||||
|
dependencies = [
|
||||||
|
"darling_core",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "deadpool"
|
name = "deadpool"
|
||||||
version = "0.9.2"
|
version = "0.9.2"
|
||||||
|
@ -476,6 +586,12 @@ dependencies = [
|
||||||
"syn",
|
"syn",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "event-listener"
|
||||||
|
version = "2.5.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "77f3309417938f28bf8228fcff79a4a37103981e3e186d2ccd19c74b38f4eb71"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "fallible-iterator"
|
name = "fallible-iterator"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
|
@ -692,6 +808,12 @@ version = "1.0.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
|
checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "ident_case"
|
||||||
|
version = "1.0.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "idna"
|
name = "idna"
|
||||||
version = "0.2.3"
|
version = "0.2.3"
|
||||||
|
@ -755,6 +877,12 @@ version = "0.2.113"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "eef78b64d87775463c549fbd80e19249ef436ea3bf1de2a1eb7e717ec7fab1e9"
|
checksum = "eef78b64d87775463c549fbd80e19249ef436ea3bf1de2a1eb7e717ec7fab1e9"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "linked-hash-map"
|
||||||
|
version = "0.5.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "local-channel"
|
name = "local-channel"
|
||||||
version = "0.1.2"
|
version = "0.1.2"
|
||||||
|
@ -872,6 +1000,40 @@ dependencies = [
|
||||||
"winapi",
|
"winapi",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "num"
|
||||||
|
version = "0.4.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "43db66d1170d347f9a065114077f7dccb00c1b9478c89384490a3425279a4606"
|
||||||
|
dependencies = [
|
||||||
|
"num-bigint",
|
||||||
|
"num-complex",
|
||||||
|
"num-integer",
|
||||||
|
"num-iter",
|
||||||
|
"num-rational",
|
||||||
|
"num-traits",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "num-bigint"
|
||||||
|
version = "0.4.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f"
|
||||||
|
dependencies = [
|
||||||
|
"autocfg",
|
||||||
|
"num-integer",
|
||||||
|
"num-traits",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "num-complex"
|
||||||
|
version = "0.4.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "26873667bbbb7c5182d4a37c1add32cdf09f841af72da53318fdb81543c15085"
|
||||||
|
dependencies = [
|
||||||
|
"num-traits",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "num-integer"
|
name = "num-integer"
|
||||||
version = "0.1.44"
|
version = "0.1.44"
|
||||||
|
@ -882,6 +1044,29 @@ dependencies = [
|
||||||
"num-traits",
|
"num-traits",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "num-iter"
|
||||||
|
version = "0.1.42"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b2021c8337a54d21aca0d59a92577a029af9431cb59b909b03252b9c164fad59"
|
||||||
|
dependencies = [
|
||||||
|
"autocfg",
|
||||||
|
"num-integer",
|
||||||
|
"num-traits",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "num-rational"
|
||||||
|
version = "0.4.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d41702bd167c2df5520b384281bc111a4b5efcf7fbc4c9c222c815b07e0a6a6a"
|
||||||
|
dependencies = [
|
||||||
|
"autocfg",
|
||||||
|
"num-bigint",
|
||||||
|
"num-integer",
|
||||||
|
"num-traits",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "num-traits"
|
name = "num-traits"
|
||||||
version = "0.2.14"
|
version = "0.2.14"
|
||||||
|
@ -953,6 +1138,19 @@ version = "2.1.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
|
checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pg_bigdecimal"
|
||||||
|
version = "0.1.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "aaef67cc0b89c04b673c77c16ff90d27f01d83fc74531b6fd881b81bddf188df"
|
||||||
|
dependencies = [
|
||||||
|
"bigdecimal",
|
||||||
|
"byteorder",
|
||||||
|
"bytes",
|
||||||
|
"num",
|
||||||
|
"postgres",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "phf"
|
name = "phf"
|
||||||
version = "0.10.1"
|
version = "0.10.1"
|
||||||
|
@ -983,6 +1181,20 @@ version = "0.1.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
|
checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "postgres"
|
||||||
|
version = "0.19.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "eb76d6535496f633fa799bb872ffb4790e9cbdedda9d35564ca0252f930c0dd5"
|
||||||
|
dependencies = [
|
||||||
|
"bytes",
|
||||||
|
"fallible-iterator",
|
||||||
|
"futures",
|
||||||
|
"log",
|
||||||
|
"tokio",
|
||||||
|
"tokio-postgres",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "postgres-derive"
|
name = "postgres-derive"
|
||||||
version = "0.4.1"
|
version = "0.4.1"
|
||||||
|
@ -1254,6 +1466,12 @@ dependencies = [
|
||||||
"unicode-normalization",
|
"unicode-normalization",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "strsim"
|
||||||
|
version = "0.10.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "subtle"
|
name = "subtle"
|
||||||
version = "2.4.1"
|
version = "2.4.1"
|
||||||
|
@ -1481,6 +1699,15 @@ version = "0.4.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
|
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "yaml-rust"
|
||||||
|
version = "0.4.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85"
|
||||||
|
dependencies = [
|
||||||
|
"linked-hash-map",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "zstd"
|
name = "zstd"
|
||||||
version = "0.9.2+zstd.1.5.1"
|
version = "0.9.2+zstd.1.5.1"
|
||||||
|
|
|
@ -8,9 +8,14 @@ edition = "2021"
|
||||||
[dependencies]
|
[dependencies]
|
||||||
actix-web = "4.0.0-beta.21"
|
actix-web = "4.0.0-beta.21"
|
||||||
ansi-to-html = "0.1.0"
|
ansi-to-html = "0.1.0"
|
||||||
|
anyhow = "1.0.53"
|
||||||
|
bigdecimal = "0.3.0"
|
||||||
|
cached = "0.30.0"
|
||||||
chrono = "0.4.19"
|
chrono = "0.4.19"
|
||||||
deadpool-postgres = "0.10.1"
|
deadpool-postgres = "0.10.1"
|
||||||
enum-display-derive = "0.1.1"
|
enum-display-derive = "0.1.1"
|
||||||
|
pg_bigdecimal = "0.1.4"
|
||||||
postgres-types = { version = "0.2.2", features = ["derive"]}
|
postgres-types = { version = "0.2.2", features = ["derive"]}
|
||||||
serde = { version = "1.0.135", features = ["derive"] }
|
serde = { version = "1.0.135", features = ["derive"] }
|
||||||
tokio-postgres = { version = "0.7.5", features = ["with-chrono-0_4"]}
|
tokio-postgres = { version = "0.7.5", features = ["with-chrono-0_4"]}
|
||||||
|
yaml-rust = "0.4.5"
|
||||||
|
|
87
html/logs.html
Normal file
87
html/logs.html
Normal file
|
@ -0,0 +1,87 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>Archlinuxcn Packages</title>
|
||||||
|
<link rel="stylesheet" href="https://cdn.datatables.net/1.10.20/css/jquery.dataTables.min.css"
|
||||||
|
integrity="sha256-YY1izqyhIj4W3iyJOaGWOpXDSwrHWFL4Nfk+W0LyCHE=" crossorigin="anonymous">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<table id="l" class="stripe cell-border" style="text-align:center">
|
||||||
|
</table>
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/jquery@3.4.1/dist/jquery.min.js"
|
||||||
|
integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/datatables.net@1.10.20/js/jquery.dataTables.min.js"
|
||||||
|
integrity="sha256-LXQzPhL1IRyKkA7HpCOBi8I+OC8HqzHUYkjK8S+LKTs=" crossorigin="anonymous"></script>
|
||||||
|
<script>
|
||||||
|
$(document).ready(function () {
|
||||||
|
$('#l').DataTable({
|
||||||
|
"searchDelay": 100,
|
||||||
|
"iDisplayLength": 100,
|
||||||
|
"aLengthMenu": [[100, 250, 500, 1000, -1], [100, 250, 500, 1000, "所有"]],
|
||||||
|
"ajax": {
|
||||||
|
url: "/imlonghao-api/logs",
|
||||||
|
dataSrc: ""
|
||||||
|
},
|
||||||
|
"order": [[5, "desc"]],
|
||||||
|
"columnDefs": [
|
||||||
|
{
|
||||||
|
targets: 0,
|
||||||
|
title: "包名",
|
||||||
|
data: "pkgbase"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
targets: 1,
|
||||||
|
title: "打包者",
|
||||||
|
data: "maintainer"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
targets: 2,
|
||||||
|
title: "版本号",
|
||||||
|
data: "pkg_version"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
targets: 3,
|
||||||
|
title: "状态",
|
||||||
|
data: "result"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
targets: 4,
|
||||||
|
title: "持续时间(秒)",
|
||||||
|
data: "elapsed"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
targets: 5,
|
||||||
|
title: "CPU 使用率(%)",
|
||||||
|
data: "cpu"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
targets: 6,
|
||||||
|
title: "内存使用率(GiB)",
|
||||||
|
data: "memory"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
targets: 7,
|
||||||
|
title: "打包时间",
|
||||||
|
data: "ts",
|
||||||
|
render: function (data, type, row, meta) {
|
||||||
|
return new Date(data * 1000).toISOString()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
targets: 8,
|
||||||
|
title: "GitHub",
|
||||||
|
data: "pkgbase",
|
||||||
|
render: function (data, type, row, meta) {
|
||||||
|
return `<a href=https://github.com/archlinuxcn/repo/blob/master/archlinuxcn/${data}/ target=_blank rel=noopener>GitHub</a>`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
70
src/main.rs
70
src/main.rs
|
@ -2,9 +2,12 @@
|
||||||
extern crate enum_display_derive;
|
extern crate enum_display_derive;
|
||||||
|
|
||||||
use actix_web::{get, web, App, HttpResponse, HttpServer, Responder};
|
use actix_web::{get, web, App, HttpResponse, HttpServer, Responder};
|
||||||
|
use anyhow::{Context, Result};
|
||||||
|
use cached::proc_macro::cached;
|
||||||
use postgres_types::{FromSql, ToSql};
|
use postgres_types::{FromSql, ToSql};
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
use std::fmt::Display;
|
use std::fmt::Display;
|
||||||
|
use yaml_rust::YamlLoader;
|
||||||
|
|
||||||
#[derive(Debug, ToSql, FromSql, Display)]
|
#[derive(Debug, ToSql, FromSql, Display)]
|
||||||
#[postgres(name = "batchevent")]
|
#[postgres(name = "batchevent")]
|
||||||
|
@ -54,6 +57,36 @@ struct CurrentResponse {
|
||||||
elapsed: i32,
|
elapsed: i32,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize)]
|
||||||
|
struct LogsResponse {
|
||||||
|
ts: i64,
|
||||||
|
pkgbase: String,
|
||||||
|
pkg_version: String,
|
||||||
|
maintainer: String,
|
||||||
|
elapsed: i32,
|
||||||
|
result: String,
|
||||||
|
cpu: i32,
|
||||||
|
memory: f64,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cached(time = 86400, result = true)]
|
||||||
|
fn get_maintainer(pkg: String) -> Result<String> {
|
||||||
|
let contents = std::fs::read_to_string(format!(
|
||||||
|
"/data/archgitrepo-webhook/archlinuxcn/{}/lilac.yaml",
|
||||||
|
pkg
|
||||||
|
))?;
|
||||||
|
let docs = YamlLoader::load_from_str(&contents)?;
|
||||||
|
let doc = &docs[0];
|
||||||
|
let maintainers_yaml = doc["maintainers"]
|
||||||
|
.as_vec()
|
||||||
|
.context("maintainers is empty")?;
|
||||||
|
let mut maintainers: Vec<&str> = vec![];
|
||||||
|
for m in maintainers_yaml {
|
||||||
|
maintainers.push(m["github"].as_str().unwrap_or("None"));
|
||||||
|
}
|
||||||
|
Ok(maintainers.join(", "))
|
||||||
|
}
|
||||||
|
|
||||||
#[get("/imlonghao-api/status")]
|
#[get("/imlonghao-api/status")]
|
||||||
async fn status(db: web::Data<deadpool_postgres::Pool>) -> impl Responder {
|
async fn status(db: web::Data<deadpool_postgres::Pool>) -> impl Responder {
|
||||||
let conn = db.get().await.unwrap();
|
let conn = db.get().await.unwrap();
|
||||||
|
@ -102,8 +135,41 @@ async fn current(db: web::Data<deadpool_postgres::Pool>) -> impl Responder {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[get("/imlonghao-api/logs")]
|
#[get("/imlonghao-api/logs")]
|
||||||
async fn logs() -> impl Responder {
|
async fn logs(db: web::Data<deadpool_postgres::Pool>) -> impl Responder {
|
||||||
HttpResponse::Ok().body("Todo!")
|
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 (
|
||||||
|
select *, row_number() over (partition by pkgbase order by ts desc) as k
|
||||||
|
from lilac.pkglog
|
||||||
|
) as w where k = 1 order by ts desc",
|
||||||
|
&[],
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
let mut results: Vec<LogsResponse> = vec![];
|
||||||
|
for row in rows {
|
||||||
|
let ts: chrono::DateTime<chrono::Utc> = 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]
|
#[actix_web::main]
|
||||||
|
|
Loading…
Add table
Reference in a new issue