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 @@
-->
-
+
{{ enable_sync ? '关闭同步'
:
'开启同步' }}
@@ -14,26 +14,33 @@
@click="change_mode(k)">{{
v }}
-
+
+
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"