提交 a0a3a9a5 authored 作者: Serhij S's avatar Serhij S

added metrics-exporter-scope

上级 d24cb818
......@@ -2,6 +2,10 @@
## RoboPLC
### 0.4.4 (2024-08-27)
* Added metrics-exporter-scope
### 0.4.0 (2024-07-29)
* Custom real-time locking policies
......
[package]
name = "roboplc"
version = "0.4.3"
version = "0.4.4"
edition = "2021"
authors = ["Serhij S. <div@altertech.com>"]
license = "Apache-2.0"
......@@ -41,6 +41,7 @@ hostname = { version = "0.3.1", optional = true }
env_logger = "0.10"
log = "0.4.21"
metrics-exporter-prometheus = { version = "0.14.0", optional = true, default-features = false, features = ["http-listener"] }
metrics-exporter-scope = { version = "0.1.3", default-features = false, features = ["msrv"], optional = true }
metrics = { version = "0.22.3", optional = true }
snmp = { version = "0.2.2", optional = true }
rtsc = "0.3"
......@@ -57,7 +58,7 @@ rvideo = ["dep:rvideo"]
rflow = ["dep:rflow"]
modbus = ["rmodbus"]
openssl-vendored = ["busrt/openssl-vendored", "eva-common/openssl-vendored"]
metrics = ["dep:metrics", "metrics-exporter-prometheus"]
metrics = ["dep:metrics", "metrics-exporter-prometheus", "metrics-exporter-scope" , "tokio"]
async = ["dep:parking_lot_rt"]
full = ["eapi", "modbus", "metrics", "pipe", "rvideo", "rflow", "async"]
......
[package]
name = "roboplc-cli"
version = "0.4.6"
version = "0.4.7"
edition = "2021"
authors = ["Serhij S. <div@altertech.com>"]
license = "Apache-2.0"
......
......@@ -36,12 +36,13 @@ pub fn create(
}
}
add_dependency(
"roboplc@0.4",
"roboplc",
"0.4",
&robo_features,
env::var("ROBOPLC_PATH").ok(),
true,
)?;
add_dependency("tracing@0.1", &["log"], None, false)?;
add_dependency("tracing", "0.1", &["log"], None, false)?;
let mut robo_toml = Config {
remote: config::Remote {
key: maybe_key,
......@@ -72,13 +73,19 @@ pub fn create(
fn add_dependency(
name: &str,
version: &str,
features: &[&str],
path: Option<String>,
disable_defaults: bool,
) -> Result<(), Box<dyn std::error::Error>> {
println!("Adding dependency: {}", name.green().bold());
let dep = if path.is_some() {
name.to_owned()
} else {
format!("{}@{}", name, version)
};
println!("Adding dependency: {}", dep.green().bold());
let mut cmd = std::process::Command::new("cargo");
cmd.arg("-q").arg("add").arg(name);
cmd.arg("-q").arg("add").arg(dep);
if let Some(path) = path {
cmd.arg("--path").arg(path);
}
......@@ -101,9 +108,9 @@ fn prepare_main(tpl: &str, features: &[&str]) -> String {
let mut out = if features.contains(&"metrics") {
tpl.replace(
" // METRICS",
r" roboplc::metrics_exporter()
.set_bucket_duration(Duration::from_secs(600))?
.install()?;",
r" roboplc::metrics_exporter_install(
roboplc::metrics_exporter().set_bucket_duration(Duration::from_secs(600))?,
)?;",
)
} else {
tpl.replace(" // METRICS\n", "")
......
......@@ -309,6 +309,31 @@ pub fn metrics_exporter() -> metrics_exporter_prometheus::PrometheusBuilder {
metrics_exporter_prometheus::PrometheusBuilder::new()
}
/// Installs Prometheus metrics exporter together with [Scope
/// exporter](https://docs.rs/metrics-exporter-scope)
#[cfg(feature = "metrics")]
pub fn metrics_exporter_install(
builder: metrics_exporter_prometheus::PrometheusBuilder,
) -> Result<()> {
let runtime = tokio::runtime::Builder::new_current_thread()
.enable_all()
.build()?;
let (prometheus_exporter, prometheus_exporter_fut) = {
let _g = runtime.enter();
builder.build().map_err(Error::failed)?
};
metrics_exporter_scope::ScopeBuilder::new()
.with_fallback(Box::new(prometheus_exporter))
.install()
.map_err(Error::failed)?;
std::thread::Builder::new()
.name("metrics_exporter".to_owned())
.spawn(move || {
runtime.block_on(prometheus_exporter_fut).unwrap();
})?;
Ok(())
}
/// Sets panic handler to immediately kill the process and its childs with SIGKILL. The process is
/// killed when panic happens in ANY thread
#[cfg(target_os = "linux")]
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论