use super::influxclient::get_influxdb;
use crate::time_util;
use anyhow::anyhow;
#[allow(unused_imports)]
use chrono::{DateTime, FixedOffset, Utc};
use influxdb::InfluxDbWriteable;
use influxdb::{ReadQuery, WriteQuery};
use tracing::error;
static SYS_STATUS_ID: &str = "system_status";
#[derive(InfluxDbWriteable)]
pub struct TsSysStatus {
pub time: DateTime<Utc>,
pub data: String,
}
impl TsSysStatus {
pub async fn write(data: String) {
let client = get_influxdb();
let tsdata = TsSysStatus {
time: time_util::get_current_time(),
data: data,
}
.into_query(SYS_STATUS_ID);
let result = client.query(tsdata).await;
if result.is_err() {
error!("write ts data error: {:?}", result.err());
}
}
pub async fn write_batch(data: Vec<String>) {
let client = get_influxdb();
let tsdata: Vec<WriteQuery> = data
.into_iter()
.map(|v| {
TsSysStatus {
time: time_util::get_current_time(),
data: v,
}
.into_query(SYS_STATUS_ID)
})
.collect();
let result = client.query(tsdata).await;
if result.is_err() {
error!("write ts data error: {:?}", result.err());
}
}
pub async fn read() -> anyhow::Result<()> {
let client = get_influxdb();
let read_query = ReadQuery::new(format!("SELECT * FROM {}", SYS_STATUS_ID));
let read_result = client.query(read_query).await;
if read_result.is_err() {
return Err(anyhow!("write ts data error: {:?}", read_result.err()));
}
let tsdata = read_result.unwrap();
println!("{:?}", tsdata);
anyhow::Ok(())
}
}