prs10: intermediate work
This commit is contained in:
11
Cargo.lock
generated
11
Cargo.lock
generated
@@ -195,6 +195,15 @@ version = "0.21.7"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567"
|
checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "bit-struct"
|
||||||
|
version = "0.3.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "270fbbb014407467f7a2c9b1fa0b74057d5cbc452f18bac3bb5aad601e590521"
|
||||||
|
dependencies = [
|
||||||
|
"num-traits",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bitflags"
|
name = "bitflags"
|
||||||
version = "1.3.2"
|
version = "1.3.2"
|
||||||
@@ -259,6 +268,7 @@ dependencies = [
|
|||||||
"async-stream",
|
"async-stream",
|
||||||
"async-trait",
|
"async-trait",
|
||||||
"backoff",
|
"backoff",
|
||||||
|
"bit-struct",
|
||||||
"bitflags 1.3.2",
|
"bitflags 1.3.2",
|
||||||
"byteorder",
|
"byteorder",
|
||||||
"bytes",
|
"bytes",
|
||||||
@@ -272,7 +282,6 @@ dependencies = [
|
|||||||
"influxdb2",
|
"influxdb2",
|
||||||
"itertools 0.14.0",
|
"itertools 0.14.0",
|
||||||
"libc",
|
"libc",
|
||||||
"log",
|
|
||||||
"serde",
|
"serde",
|
||||||
"serde_derive",
|
"serde_derive",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ influxdb2 = { version = "0.3.3", features = [
|
|||||||
], default-features = false }
|
], default-features = false }
|
||||||
tokio = { version = "1", features = ["rt", "io-util"] }
|
tokio = { version = "1", features = ["rt", "io-util"] }
|
||||||
clap = { version = "4.0", features = ["derive"] }
|
clap = { version = "4.0", features = ["derive"] }
|
||||||
log = "0.4"
|
|
||||||
figment = { version = "0.10", features = ["toml"] }
|
figment = { version = "0.10", features = ["toml"] }
|
||||||
gethostname = "0.3"
|
gethostname = "0.3"
|
||||||
futures = "0.3.24"
|
futures = "0.3.24"
|
||||||
@@ -36,6 +35,7 @@ backoff = { version = "0.4.0", features = ["tokio"] }
|
|||||||
serde_repr = "0.1.20"
|
serde_repr = "0.1.20"
|
||||||
tracing = "0.1.44"
|
tracing = "0.1.44"
|
||||||
tracing-subscriber = { version = "0.3.22", features = ["fmt"] }
|
tracing-subscriber = { version = "0.3.22", features = ["fmt"] }
|
||||||
|
bit-struct = { version = "0.3.2", default-features = false }
|
||||||
|
|
||||||
[dependencies.chrony-candm]
|
[dependencies.chrony-candm]
|
||||||
git = "https://github.com/aws/chrony-candm"
|
git = "https://github.com/aws/chrony-candm"
|
||||||
|
|||||||
@@ -23,6 +23,13 @@
|
|||||||
port = "/dev/ttyUSB0"
|
port = "/dev/ttyUSB0"
|
||||||
status_interval = 10
|
status_interval = 10
|
||||||
measurement = "uccm_gpsdo"
|
measurement = "uccm_gpsdo"
|
||||||
|
|
||||||
|
[sources.prs10]
|
||||||
|
enabled = true
|
||||||
|
port = "/dev/ttyUSB0"
|
||||||
|
status_interval = 10
|
||||||
|
stats_interval = 10
|
||||||
|
measurement = "prs10_gpsdo"
|
||||||
|
|
||||||
|
|
||||||
[targets]
|
[targets]
|
||||||
@@ -38,4 +45,4 @@ token = ""
|
|||||||
|
|
||||||
[influxdb.tags]
|
[influxdb.tags]
|
||||||
# host = "qubit" # default is the local hostname
|
# host = "qubit" # default is the local hostname
|
||||||
# arbitrary = "tags" # are allowed
|
# arbitrary = "tags" # are allowed
|
||||||
|
|||||||
25
src/lib.rs
25
src/lib.rs
@@ -2,6 +2,7 @@ pub mod chrony;
|
|||||||
pub mod chrony_refclock;
|
pub mod chrony_refclock;
|
||||||
pub mod gpsd;
|
pub mod gpsd;
|
||||||
pub mod hwmon;
|
pub mod hwmon;
|
||||||
|
pub mod prs10;
|
||||||
pub mod uccm;
|
pub mod uccm;
|
||||||
|
|
||||||
use async_trait::async_trait;
|
use async_trait::async_trait;
|
||||||
@@ -127,6 +128,29 @@ impl Default for GpsdConfig {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize, Clone)]
|
||||||
|
pub struct Prs10Config {
|
||||||
|
pub enabled: bool,
|
||||||
|
pub port: String,
|
||||||
|
pub baud: u32,
|
||||||
|
pub timeout: std::time::Duration,
|
||||||
|
pub status_interval: std::time::Duration,
|
||||||
|
pub stats_interval: std::time::Duration,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Default for Prs10Config {
|
||||||
|
fn default() -> Self {
|
||||||
|
Prs10Config {
|
||||||
|
enabled: false,
|
||||||
|
port: "/dev/ttyS0".into(),
|
||||||
|
baud: 9600,
|
||||||
|
timeout: std::time::Duration::from_secs(1),
|
||||||
|
status_interval: std::time::Duration::from_secs(10),
|
||||||
|
stats_interval: std::time::Duration::from_secs(10),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug)]
|
||||||
pub struct TimeReport {
|
pub struct TimeReport {
|
||||||
pub system_time: DateTime<Utc>,
|
pub system_time: DateTime<Utc>,
|
||||||
@@ -226,6 +250,7 @@ pub struct SourcesConfig {
|
|||||||
pub hwmon: HwmonConfig,
|
pub hwmon: HwmonConfig,
|
||||||
pub uccm: UCCMConfig,
|
pub uccm: UCCMConfig,
|
||||||
pub gpsd: GpsdConfig,
|
pub gpsd: GpsdConfig,
|
||||||
|
pub prs10: Prs10Config,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, Clone, Default)]
|
#[derive(Serialize, Deserialize, Clone, Default)]
|
||||||
|
|||||||
25
src/main.rs
25
src/main.rs
@@ -5,7 +5,10 @@ use tokio::sync::broadcast;
|
|||||||
use tracing::{Instrument, debug, error, info, info_span, warn};
|
use tracing::{Instrument, debug, error, info, info_span, warn};
|
||||||
use tracing_subscriber;
|
use tracing_subscriber;
|
||||||
|
|
||||||
use crate::{chrony::*, chrony_refclock::ChronySockServer, hwmon::HwmonSource, uccm::UCCMMonitor};
|
use crate::{
|
||||||
|
chrony::*, chrony_refclock::ChronySockServer, hwmon::HwmonSource, prs10::Prs10Monitor,
|
||||||
|
uccm::UCCMMonitor,
|
||||||
|
};
|
||||||
use chimemon::{gpsd::GpsdSource, *};
|
use chimemon::{gpsd::GpsdSource, *};
|
||||||
|
|
||||||
const PROGRAM_NAME: &str = "chimemon";
|
const PROGRAM_NAME: &str = "chimemon";
|
||||||
@@ -138,6 +141,19 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let prs10 = if config.sources.prs10.enabled {
|
||||||
|
Some(Prs10Monitor::new(config.sources.prs10))
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
};
|
||||||
|
if let Some(prs10) = prs10 {
|
||||||
|
tasks.push(tokio::spawn(
|
||||||
|
prs10
|
||||||
|
.run(sourcechan.clone())
|
||||||
|
.instrument(info_span!("prs10-task")),
|
||||||
|
))
|
||||||
|
}
|
||||||
|
|
||||||
if tasks.len() == 0 {
|
if tasks.len() == 0 {
|
||||||
error!("No tasks configured, exiting.");
|
error!("No tasks configured, exiting.");
|
||||||
return Ok(()); // not an error, but exit before starting a dummy task
|
return Ok(()); // not an error, but exit before starting a dummy task
|
||||||
@@ -152,6 +168,13 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|||||||
loop {
|
loop {
|
||||||
while let Ok(m) = chan.recv().await {
|
while let Ok(m) = chan.recv().await {
|
||||||
info!("received {m:?}");
|
info!("received {m:?}");
|
||||||
|
match m {
|
||||||
|
ChimemonMessage::SourceReport(report) => {
|
||||||
|
let metrics = report.details.to_metrics();
|
||||||
|
info!("metrics: {metrics:?}");
|
||||||
|
}
|
||||||
|
_ => {}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user