diff --git a/Makefile b/Makefile index 302fa19..b24574f 100644 --- a/Makefile +++ b/Makefile @@ -21,7 +21,7 @@ dropTag: @git push origin :refs/tags/$(version) run: - go run *.go -d + @cd oab && cargo run -- -c ./cfg-demo.yml syncDB: diff --git a/oab/Cargo.lock b/oab/Cargo.lock index 1b24754..a428237 100644 --- a/oab/Cargo.lock +++ b/oab/Cargo.lock @@ -884,6 +884,30 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "crossbeam-deque" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" +dependencies = [ + "cfg-if", + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7" +dependencies = [ + "autocfg", + "cfg-if", + "crossbeam-utils", + "memoffset", + "scopeguard", +] + [[package]] name = "crossbeam-queue" version = "0.3.8" @@ -1935,6 +1959,15 @@ version = "2.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" +[[package]] +name = "memoffset" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" +dependencies = [ + "autocfg", +] + [[package]] name = "mime" version = "0.3.17" @@ -2022,6 +2055,15 @@ dependencies = [ "minimal-lexical", ] +[[package]] +name = "ntapi" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4" +dependencies = [ + "winapi", +] + [[package]] name = "nu-ansi-term" version = "0.46.0" @@ -2158,6 +2200,7 @@ dependencies = [ "serde_yaml", "service-manager", "sqlx 0.5.13", + "sysinfo", "thiserror", "tokio", "tracing", @@ -2596,6 +2639,26 @@ dependencies = [ "getrandom", ] +[[package]] +name = "rayon" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + [[package]] name = "redox_syscall" version = "0.2.16" @@ -3753,6 +3816,21 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "sysinfo" +version = "0.29.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a18d114d420ada3a891e6bc8e96a2023402203296a47cdd65083377dad18ba5" +dependencies = [ + "cfg-if", + "core-foundation-sys", + "libc", + "ntapi", + "once_cell", + "rayon", + "winapi", +] + [[package]] name = "system-configuration" version = "0.5.1" diff --git a/oab/Cargo.toml b/oab/Cargo.toml index c3050ca..3bca8f8 100644 --- a/oab/Cargo.toml +++ b/oab/Cargo.toml @@ -61,4 +61,5 @@ bytes = "1.5.0" nkeys = "0.3.2" tracing-appender = "0.2.2" reqwest = "0.11.22" +sysinfo = "0.29.10" diff --git a/oab/dist/index.html b/oab/dist/index.html index a53749a..81a771a 100644 --- a/oab/dist/index.html +++ b/oab/dist/index.html @@ -1,3 +1,3 @@ -OA +OA
\ No newline at end of file diff --git a/oab/src/libs/task.rs b/oab/src/libs/task.rs index 2e205f0..2c1b405 100644 --- a/oab/src/libs/task.rs +++ b/oab/src/libs/task.rs @@ -9,7 +9,9 @@ use std::time::{Duration, Instant}; use futures_util::StreamExt; use serde::{Deserialize, Serialize}; use std::collections::HashMap; +use std::process; use std::sync::{Arc, Mutex}; +use sysinfo::{Pid, ProcessExt, System, SystemExt}; use tracing::{info, warn}; #[derive(Debug, Clone, Deserialize, Serialize)] @@ -25,6 +27,38 @@ struct ClientInfo { name: String, host: String, } + +pub fn start_stats_info(url: String) { + tokio::spawn(async move { + let pid = process::id(); + info!("star on pid {}", pid); + let mut s = System::new_all(); + let pid = Pid::from(pid as usize); + let props = sysinfo::ProcessRefreshKind::everything(); + let url = format!("http://{}/api/v1/import/prometheus", url); + let client = reqwest::Client::new(); + let start = Instant::now(); + loop { + tokio::time::sleep(std::time::Duration::from_secs(1)).await; + s.refresh_process_specifics(pid, props); + if let Some(process) = s.process(pid) { + let stat_str = format!( + "oa_stats_cpu {}\noa_stats_mem {}\noa_stats_start {}", + process.cpu_usage(), + process.memory(), + start.elapsed().as_secs(), + ); + match client.post(&url).body(stat_str).send().await { + Ok(_) => {} + Err(e) => { + warn!("{}", e); + } + } + } + } + }); +} + pub fn start_nats_online(client: async_nats::client::Client) { let db: Arc>> = Arc::new(Mutex::new(HashMap::new())); { diff --git a/oab/src/main.rs b/oab/src/main.rs index e868a0b..abc0c7d 100644 --- a/oab/src/main.rs +++ b/oab/src/main.rs @@ -49,8 +49,10 @@ async fn main() -> Result<()> { web(data).await?; Ok(()) } + async fn web(data: AppState) -> Result<()> { // libs::task::start_nats_online(client.clone()); + libs::task::start_stats_info(data.info.ts_url.clone()); let url = data.server_url.clone(); let dav = libs::fs::core(); let serv = HttpServer::new(move || { diff --git a/oaweb/package.json b/oaweb/package.json index a4e4fde..fb6a6ee 100644 --- a/oaweb/package.json +++ b/oaweb/package.json @@ -17,7 +17,7 @@ "@toast-ui/editor": "^3.2.2", "@types/validator": "^13.11.2", "@veypi/msg": "^0.1.1", - "@veypi/oaer": "^0.0.6", + "@veypi/oaer": "^0.0.9", "@veypi/one-icon": "2", "animate.css": "^4.1.1", "axios": "^1.2.1", diff --git a/oaweb/src/cfg.ts b/oaweb/src/cfg.ts index 47642f3..b11ab4f 100644 --- a/oaweb/src/cfg.ts +++ b/oaweb/src/cfg.ts @@ -7,7 +7,7 @@ const cfg = { - host: 'http://' + window.location.host, + host: window.location.protocol + '//' + window.location.host, id: 'FR9P5t8debxc11aFF', } diff --git a/oaweb/src/components/tschart/params.ts b/oaweb/src/components/tschart/params.ts index 7d33840..3e6653e 100644 --- a/oaweb/src/components/tschart/params.ts +++ b/oaweb/src/components/tschart/params.ts @@ -7,65 +7,69 @@ import { ref } from 'vue' -let mode = ref(0) -let mode_label = ['近5分钟', '近1小时', '近24小时', '近7天', '近30天'] -let change_mode = (m: number) => { - mode.value = m - let now = new Date() - switch (m) { - case 0: { - now.setMinutes(now.getMinutes() - 5) - params.value.start = now - params.value.step = "2s" - break - } - case 1: { - now.setHours(now.getHours() - 1) - params.value.start = now - params.value.step = "10s" - break - } - case 2: { - now.setHours(now.getHours() - 24) - params.value.start = now - params.value.step = "20s" - break - } - case 3: { - now.setHours(now.getHours() - 24 * 7) - params.value.start = now - params.value.step = "30s" - break - } - case 4: { - now.setHours(now.getHours() - 24 * 29) - params.value.start = now - params.value.step = "1h" - break - } - case 5: { - break +const use_params = () => { + let mode = ref(0) + let mode_label = ['近5分钟', '近1小时', '近24小时', '近7天', '近30天'] + let change_mode = (m: number) => { + mode.value = m + let now = new Date() + switch (m) { + case 0: { + now.setMinutes(now.getMinutes() - 5) + params.value.start = now + params.value.step = "2s" + break + } + case 1: { + now.setHours(now.getHours() - 1) + params.value.start = now + params.value.step = "10s" + break + } + case 2: { + now.setHours(now.getHours() - 24) + params.value.start = now + params.value.step = "20s" + break + } + case 3: { + now.setHours(now.getHours() - 24 * 7) + params.value.start = now + params.value.step = "30s" + break + } + case 4: { + now.setHours(now.getHours() - 24 * 29) + params.value.start = now + params.value.step = "1h" + break + } + case 5: { + break + } } } -} -let params = ref<{ start: Date, end: Date, step: string }>({ - start: new Date(), - end: new Date(), - step: '2s' -}) + let params = ref<{ start: Date, end: Date, step: string }>({ + start: new Date(), + end: new Date(), + step: '2s' + }) -change_mode(0) + change_mode(0) -const set_delta = (start?: Date, end?: Date) => { - if (start) { - params.value.start = start - } - if (end) { - params.value.end = end + const set_delta = (start?: Date, end?: Date) => { + if (start) { + params.value.start = start + } + if (end) { + params.value.end = end + } + let delta = params.value.end.getTime() - + params.value.start.getTime() + console.log(delta) } - let delta = params.value.end.getTime() - - params.value.start.getTime() - console.log(delta) + return { params, change_mode, mode, mode_label } } -export { params, change_mode, mode, mode_label } + +export default use_params diff --git a/oaweb/src/components/tschart/tschart.vue b/oaweb/src/components/tschart/tschart.vue index 12fced8..3457880 100644 --- a/oaweb/src/components/tschart/tschart.vue +++ b/oaweb/src/components/tschart/tschart.vue @@ -6,7 +6,7 @@ --> + diff --git a/oaweb/yarn.lock b/oaweb/yarn.lock index e3c36a6..aade555 100644 --- a/oaweb/yarn.lock +++ b/oaweb/yarn.lock @@ -530,18 +530,20 @@ resolved "https://registry.yarnpkg.com/@veypi/msg/-/msg-0.1.1.tgz#94864ae2c0a81991b8a30d87f12d2245fdebbead" integrity sha512-UiAF/Y0EGT/37tGApptzHBNUpo78LbnrEkCqGAGMkJp86wrUyOgTAvuvQ197Ifqw9PIbjZM9dAgMv4DfMJQEYA== -"@veypi/oaer@^0.0.6": - version "0.0.6" - resolved "https://registry.yarnpkg.com/@veypi/oaer/-/oaer-0.0.6.tgz#02a1f9c54ec4e43805123a9f16ddfeda152e6758" - integrity sha512-B1czF/GGWPCVRdtXvqVjTE9m/Tli8fmhy9K6lPnbt89QzkdYVmQ6DMs1rugMlPw+Lflc3pqeQuCUmlKjKgMqPQ== +"@veypi/oaer@^0.0.9": + version "0.0.9" + resolved "https://registry.yarnpkg.com/@veypi/oaer/-/oaer-0.0.9.tgz#b47d9bd635dfaa3df1d756e6c132f717969f60e2" + integrity sha512-YmyykQW6Kw4XeQ47/ogObSx3JotfX08Kali3GoN4eOGl2Sa++q+kqkDq+2IFmdw0P9naZ+pzu7OChjo7TjZuHg== dependencies: "@veypi/msg" "^0.1.0" "@veypi/one-icon" "2" animate.css "^4.1.1" autoprefixer "^10.4.16" + axios "^1.5.1" js-base64 "^3.7.5" mitt "^3.0.1" postcss "^8.4.31" + tailwindcss "^3.3.3" webdav "^5.3.0" "@veypi/one-icon@2": @@ -869,6 +871,15 @@ axios@^1.2.1: form-data "^4.0.0" proxy-from-env "^1.1.0" +axios@^1.5.1: + version "1.6.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.0.tgz#f1e5292f26b2fd5c2e66876adc5b06cdbd7d2102" + integrity sha512-EZ1DYihju9pwVB+jg67ogm+Tmqc6JmhamRN6I4Zt8DfZu5lbcQGw3ozH9lFejSJgs/ibaef3A9PMXPLeefFGJg== + dependencies: + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"