initial
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
[target.'cfg(target_os="macos")']
|
||||
# Postgres symbols won't be available until runtime
|
||||
rustflags = ["-Clink-arg=-Wl,-undefined,dynamic_lookup"]
|
||||
@@ -0,0 +1,9 @@
|
||||
.DS_Store
|
||||
.idea/
|
||||
/target
|
||||
*.iml
|
||||
**/*.rs.bk
|
||||
Cargo.lock
|
||||
tests/pg_regress/results
|
||||
tests/pg_regress/regression.diffs
|
||||
tests/pg_regress/regression.out
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
[package]
|
||||
name = "pgerr"
|
||||
version = "0.0.0"
|
||||
edition = "2021"
|
||||
|
||||
[lib]
|
||||
crate-type = ["cdylib", "lib"]
|
||||
|
||||
[[bin]]
|
||||
name = "pgrx_embed_pgerr"
|
||||
path = "./src/bin/pgrx_embed.rs"
|
||||
|
||||
[features]
|
||||
default = ["pg13"]
|
||||
pg13 = ["pgrx/pg13", "pgrx-tests/pg13" ]
|
||||
pg14 = ["pgrx/pg14", "pgrx-tests/pg14" ]
|
||||
pg15 = ["pgrx/pg15", "pgrx-tests/pg15" ]
|
||||
pg16 = ["pgrx/pg16", "pgrx-tests/pg16" ]
|
||||
pg17 = ["pgrx/pg17", "pgrx-tests/pg17" ]
|
||||
pg18 = ["pgrx/pg18", "pgrx-tests/pg18" ]
|
||||
pg_test = []
|
||||
|
||||
[dependencies]
|
||||
pgrx = "=0.16.1"
|
||||
serde_json = "1.0.149"
|
||||
sysinfo = "0.37.2"
|
||||
|
||||
[dev-dependencies]
|
||||
pgrx-tests = "=0.16.1"
|
||||
|
||||
[profile.dev]
|
||||
panic = "unwind"
|
||||
|
||||
[profile.release]
|
||||
panic = "unwind"
|
||||
opt-level = 3
|
||||
lto = "fat"
|
||||
codegen-units = 1
|
||||
@@ -0,0 +1,6 @@
|
||||
comment = 'pgerr: Created by pgrx'
|
||||
default_version = '@CARGO_VERSION@'
|
||||
module_pathname = 'pgerr'
|
||||
relocatable = false
|
||||
superuser = true
|
||||
trusted = false
|
||||
@@ -0,0 +1,2 @@
|
||||
- Install `cargo`, `pgrx` and initialize
|
||||
- run with `cargo pgrx run p17`
|
||||
@@ -0,0 +1 @@
|
||||
::pgrx::pgrx_embed!();
|
||||
+67
@@ -0,0 +1,67 @@
|
||||
use std::{thread, time::Duration};
|
||||
|
||||
use pgrx::prelude::*;
|
||||
use sysinfo::System;
|
||||
|
||||
::pgrx::pg_module_magic!(name, version);
|
||||
|
||||
#[pg_extern]
|
||||
fn pgerr() -> String {
|
||||
String::from("pgerr extension running!")
|
||||
}
|
||||
|
||||
pub struct SystemMetrics {
|
||||
pub cpu_usage: f32,
|
||||
pub used_memory: f32,
|
||||
pub total_memory: f32,
|
||||
}
|
||||
|
||||
fn get_metrics() -> SystemMetrics {
|
||||
let mut sys = System::new_all();
|
||||
|
||||
sys.refresh_all();
|
||||
thread::sleep(Duration::from_millis(500));
|
||||
sys.refresh_all();
|
||||
|
||||
SystemMetrics {
|
||||
cpu_usage: sys.global_cpu_usage(),
|
||||
used_memory: sys.used_memory() as f32,
|
||||
total_memory: sys.total_memory() as f32,
|
||||
}
|
||||
}
|
||||
|
||||
fn convert_bytes(byte_value: &mut f32, iters: Option<i32>) {
|
||||
let iters = iters.unwrap_or(3);
|
||||
|
||||
for _ in 0..iters {
|
||||
*byte_value /= 1024.0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#[pg_extern]
|
||||
fn sys_stats(json: bool) -> String {
|
||||
let mut stats = get_metrics();
|
||||
convert_bytes(&mut stats.used_memory, None);
|
||||
convert_bytes(&mut stats.total_memory, None);
|
||||
|
||||
let result = if json {
|
||||
format!(
|
||||
"
|
||||
{{
|
||||
\"cpu\": {},
|
||||
\"ram_used\": {},
|
||||
\"ram_total\": {}
|
||||
}}
|
||||
",
|
||||
stats.cpu_usage, stats.used_memory, stats.total_memory
|
||||
)
|
||||
} else {
|
||||
format!(
|
||||
"cpu={},ram used={}GB, ram total={}GB",
|
||||
stats.cpu_usage, stats.used_memory, stats.total_memory
|
||||
)
|
||||
};
|
||||
|
||||
result
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
-- this setup file is run immediately after the regression database is (re)created
|
||||
-- the file is optional but you likely want to create the extension
|
||||
CREATE EXTENSION pgerr;
|
||||
@@ -0,0 +1,3 @@
|
||||
-- this setup file is run immediately after the regression database is (re)created
|
||||
-- the file is optional but you likely want to create the extension
|
||||
CREATE EXTENSION pgerr;
|
||||
Reference in New Issue
Block a user