Factor out to separate crate
This commit is contained in:
+20
-19
@@ -3,7 +3,6 @@ use super::proto::CaItem;
|
||||
use super::proto::CaMsg;
|
||||
use super::proto::CaMsgTy;
|
||||
use super::proto::CaProto;
|
||||
use super::store::DataStore;
|
||||
use super::ExtraInsertsConf;
|
||||
use crate::batchquery::series_by_channel::ChannelInfoQuery;
|
||||
use crate::bsread::ChannelDescDecoded;
|
||||
@@ -12,17 +11,6 @@ use crate::ca::proto::EventAdd;
|
||||
use crate::series::ChannelStatusSeriesId;
|
||||
use crate::series::Existence;
|
||||
use crate::series::SeriesId;
|
||||
use crate::store::ChannelInfoItem;
|
||||
use crate::store::ChannelStatus;
|
||||
use crate::store::ChannelStatusClosedReason;
|
||||
use crate::store::ChannelStatusItem;
|
||||
use crate::store::CommonInsertItemQueueSender;
|
||||
use crate::store::ConnectionStatus;
|
||||
use crate::store::ConnectionStatusItem;
|
||||
use crate::store::InsertItem;
|
||||
use crate::store::IvlItem;
|
||||
use crate::store::MuteItem;
|
||||
use crate::store::QueryItem;
|
||||
use crate::timebin::ConnTimeBin;
|
||||
use async_channel::Sender;
|
||||
use err::Error;
|
||||
@@ -37,6 +25,19 @@ use netpod::ScalarType;
|
||||
use netpod::Shape;
|
||||
use netpod::TS_MSP_GRID_SPACING;
|
||||
use netpod::TS_MSP_GRID_UNIT;
|
||||
use scywr::iteminsertqueue as scywriiq;
|
||||
use scywr::store::DataStore;
|
||||
use scywriiq::ChannelInfoItem;
|
||||
use scywriiq::ChannelStatus;
|
||||
use scywriiq::ChannelStatusClosedReason;
|
||||
use scywriiq::ChannelStatusItem;
|
||||
use scywriiq::CommonInsertItemQueueSender;
|
||||
use scywriiq::ConnectionStatus;
|
||||
use scywriiq::ConnectionStatusItem;
|
||||
use scywriiq::InsertItem;
|
||||
use scywriiq::IvlItem;
|
||||
use scywriiq::MuteItem;
|
||||
use scywriiq::QueryItem;
|
||||
use serde::Serialize;
|
||||
use stats::CaConnStats;
|
||||
use stats::IntervalEma;
|
||||
@@ -763,7 +764,7 @@ impl CaConn {
|
||||
ChannelState::Created(series, ..) => {
|
||||
let item = QueryItem::ChannelStatus(ChannelStatusItem {
|
||||
ts: SystemTime::now(),
|
||||
series: series.clone(),
|
||||
series: series.into(),
|
||||
status: ChannelStatus::Closed(channel_reason.clone()),
|
||||
});
|
||||
self.insert_item_queue.push_back(item);
|
||||
@@ -896,7 +897,7 @@ impl CaConn {
|
||||
st.info_store_msp_last = msp;
|
||||
let item = QueryItem::ChannelInfo(ChannelInfoItem {
|
||||
ts_msp: msp,
|
||||
series: series.clone(),
|
||||
series: series.into(),
|
||||
ivl: st.item_recv_ivl_ema.ema().ema(),
|
||||
interest: 0.,
|
||||
evsize: 0,
|
||||
@@ -1029,7 +1030,7 @@ impl CaConn {
|
||||
{
|
||||
let item = QueryItem::ChannelStatus(ChannelStatusItem {
|
||||
ts: SystemTime::now(),
|
||||
series: series.clone().into_inner(),
|
||||
series: series.clone().into_inner().into(),
|
||||
status: ChannelStatus::Opened,
|
||||
});
|
||||
self.insert_item_queue.push_back(item);
|
||||
@@ -1080,14 +1081,14 @@ impl CaConn {
|
||||
};
|
||||
let ts_lsp = ts - ts_msp;
|
||||
let item = InsertItem {
|
||||
series,
|
||||
series: series.into(),
|
||||
ts_msp,
|
||||
ts_lsp,
|
||||
msp_bump: ts_msp_changed,
|
||||
pulse: 0,
|
||||
scalar_type,
|
||||
shape,
|
||||
val: ev.value.data,
|
||||
val: ev.value.data.into(),
|
||||
ts_msp_grid,
|
||||
};
|
||||
item_queue.push_back(QueryItem::Insert(item));
|
||||
@@ -1276,7 +1277,7 @@ impl CaConn {
|
||||
st.insert_recv_ivl_last = tsnow;
|
||||
let ema = st.insert_item_ivl_ema.ema();
|
||||
let item = IvlItem {
|
||||
series: series.clone(),
|
||||
series: (&series).into(),
|
||||
ts,
|
||||
ema: ema.ema(),
|
||||
emd: ema.emv().sqrt(),
|
||||
@@ -1286,7 +1287,7 @@ impl CaConn {
|
||||
if false && st.muted_before == 0 {
|
||||
let ema = st.insert_item_ivl_ema.ema();
|
||||
let item = MuteItem {
|
||||
series,
|
||||
series: series.into(),
|
||||
ts,
|
||||
ema: ema.ema(),
|
||||
emd: ema.emv().sqrt(),
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
use super::conn::CaConnEvent;
|
||||
use super::conn::ChannelSetOps;
|
||||
use super::conn::ConnCommand;
|
||||
use super::store::DataStore;
|
||||
use super::SlowWarnable;
|
||||
use crate::batchquery::series_by_channel::ChannelInfoQuery;
|
||||
use crate::ca::conn::CaConn;
|
||||
@@ -10,14 +9,15 @@ use crate::errconv::ErrConv;
|
||||
use crate::rt::JoinHandle;
|
||||
use crate::rt::TokMx;
|
||||
use crate::series::ChannelStatusSeriesId;
|
||||
use crate::store::CommonInsertItemQueue;
|
||||
use crate::store::CommonInsertItemQueueSender;
|
||||
use async_channel::Receiver;
|
||||
use async_channel::Sender;
|
||||
use err::Error;
|
||||
use futures_util::FutureExt;
|
||||
use futures_util::StreamExt;
|
||||
use netpod::log::*;
|
||||
use scywr::iteminsertqueue::CommonInsertItemQueue;
|
||||
use scywr::iteminsertqueue::CommonInsertItemQueueSender;
|
||||
use scywr::store::DataStore;
|
||||
use stats::CaConnStats;
|
||||
use std::collections::BTreeMap;
|
||||
use std::collections::VecDeque;
|
||||
|
||||
@@ -209,6 +209,22 @@ pub enum CaDataScalarValue {
|
||||
Bool(bool),
|
||||
}
|
||||
|
||||
impl From<CaDataScalarValue> for scywr::iteminsertqueue::ScalarValue {
|
||||
fn from(val: CaDataScalarValue) -> Self {
|
||||
use scywr::iteminsertqueue::ScalarValue;
|
||||
match val {
|
||||
CaDataScalarValue::I8(x) => ScalarValue::I8(x),
|
||||
CaDataScalarValue::I16(x) => ScalarValue::I16(x),
|
||||
CaDataScalarValue::I32(x) => ScalarValue::I32(x),
|
||||
CaDataScalarValue::F32(x) => ScalarValue::F32(x),
|
||||
CaDataScalarValue::F64(x) => ScalarValue::F64(x),
|
||||
CaDataScalarValue::Enum(x) => ScalarValue::Enum(x),
|
||||
CaDataScalarValue::String(x) => ScalarValue::String(x),
|
||||
CaDataScalarValue::Bool(x) => ScalarValue::Bool(x),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub trait GetValHelp<T> {
|
||||
type ScalTy: Clone;
|
||||
fn get(&self) -> Result<&Self::ScalTy, Error>;
|
||||
@@ -305,12 +321,36 @@ pub enum CaDataArrayValue {
|
||||
Bool(Vec<bool>),
|
||||
}
|
||||
|
||||
impl From<CaDataArrayValue> for scywr::iteminsertqueue::ArrayValue {
|
||||
fn from(val: CaDataArrayValue) -> Self {
|
||||
use scywr::iteminsertqueue::ArrayValue;
|
||||
match val {
|
||||
CaDataArrayValue::I8(x) => ArrayValue::I8(x),
|
||||
CaDataArrayValue::I16(x) => ArrayValue::I16(x),
|
||||
CaDataArrayValue::I32(x) => ArrayValue::I32(x),
|
||||
CaDataArrayValue::F32(x) => ArrayValue::F32(x),
|
||||
CaDataArrayValue::F64(x) => ArrayValue::F64(x),
|
||||
CaDataArrayValue::Bool(x) => ArrayValue::Bool(x),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
pub enum CaDataValue {
|
||||
Scalar(CaDataScalarValue),
|
||||
Array(CaDataArrayValue),
|
||||
}
|
||||
|
||||
impl From<CaDataValue> for scywr::iteminsertqueue::DataValue {
|
||||
fn from(value: CaDataValue) -> Self {
|
||||
use scywr::iteminsertqueue::DataValue;
|
||||
match value {
|
||||
CaDataValue::Scalar(x) => DataValue::Scalar(x.into()),
|
||||
CaDataValue::Array(x) => DataValue::Array(x.into()),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct CaEventValue {
|
||||
pub ts: Option<NonZeroU64>,
|
||||
|
||||
@@ -1,191 +0,0 @@
|
||||
use err::thiserror;
|
||||
use err::ThisError;
|
||||
use netpod::ScyllaConfig;
|
||||
use scylla::execution_profile::ExecutionProfileBuilder;
|
||||
use scylla::prepared_statement::PreparedStatement;
|
||||
use scylla::statement::Consistency;
|
||||
use scylla::transport::errors::NewSessionError;
|
||||
use scylla::transport::errors::QueryError;
|
||||
use scylla::Session as ScySession;
|
||||
use std::sync::Arc;
|
||||
|
||||
#[derive(Debug, ThisError)]
|
||||
pub enum Error {
|
||||
NewSessionError(#[from] NewSessionError),
|
||||
QueryError(#[from] QueryError),
|
||||
}
|
||||
|
||||
pub struct DataStore {
|
||||
pub scy: Arc<ScySession>,
|
||||
pub qu_insert_ts_msp: Arc<PreparedStatement>,
|
||||
pub qu_insert_series_by_ts_msp: Arc<PreparedStatement>,
|
||||
pub qu_insert_scalar_i8: Arc<PreparedStatement>,
|
||||
pub qu_insert_scalar_i16: Arc<PreparedStatement>,
|
||||
pub qu_insert_scalar_i32: Arc<PreparedStatement>,
|
||||
pub qu_insert_scalar_f32: Arc<PreparedStatement>,
|
||||
pub qu_insert_scalar_f64: Arc<PreparedStatement>,
|
||||
pub qu_insert_scalar_string: Arc<PreparedStatement>,
|
||||
pub qu_insert_array_i8: Arc<PreparedStatement>,
|
||||
pub qu_insert_array_i16: Arc<PreparedStatement>,
|
||||
pub qu_insert_array_i32: Arc<PreparedStatement>,
|
||||
pub qu_insert_array_f32: Arc<PreparedStatement>,
|
||||
pub qu_insert_array_f64: Arc<PreparedStatement>,
|
||||
pub qu_insert_array_bool: Arc<PreparedStatement>,
|
||||
pub qu_insert_muted: Arc<PreparedStatement>,
|
||||
pub qu_insert_item_recv_ivl: Arc<PreparedStatement>,
|
||||
pub qu_insert_connection_status: Arc<PreparedStatement>,
|
||||
pub qu_insert_channel_status: Arc<PreparedStatement>,
|
||||
pub qu_insert_channel_status_by_ts_msp: Arc<PreparedStatement>,
|
||||
pub qu_insert_channel_ping: Arc<PreparedStatement>,
|
||||
pub qu_insert_binned_scalar_f32_v01: Arc<PreparedStatement>,
|
||||
}
|
||||
|
||||
impl DataStore {
|
||||
pub async fn new(scyconf: &ScyllaConfig) -> Result<Self, Error> {
|
||||
let scy = scylla::SessionBuilder::new()
|
||||
.known_nodes(&scyconf.hosts)
|
||||
.use_keyspace(&scyconf.keyspace, true)
|
||||
.default_execution_profile_handle(
|
||||
ExecutionProfileBuilder::default()
|
||||
.consistency(Consistency::LocalOne)
|
||||
.build()
|
||||
.into_handle(),
|
||||
)
|
||||
.build()
|
||||
.await?;
|
||||
let scy = Arc::new(scy);
|
||||
|
||||
let q = scy
|
||||
.prepare("insert into ts_msp (series, ts_msp) values (?, ?) using ttl ?")
|
||||
.await?;
|
||||
let qu_insert_ts_msp = Arc::new(q);
|
||||
|
||||
let cql = "insert into series_by_ts_msp (part, ts_msp, shape_kind, scalar_type, series) values (?, ?, ?, ?, ?) using ttl ?";
|
||||
let q = scy.prepare(cql).await?;
|
||||
let qu_insert_series_by_ts_msp = Arc::new(q);
|
||||
|
||||
// scalar:
|
||||
let cql =
|
||||
"insert into events_scalar_i8 (series, ts_msp, ts_lsp, pulse, value) values (?, ?, ?, ?, ?) using ttl ?";
|
||||
let q = scy.prepare(cql).await?;
|
||||
let qu_insert_scalar_i8 = Arc::new(q);
|
||||
|
||||
let cql =
|
||||
"insert into events_scalar_i16 (series, ts_msp, ts_lsp, pulse, value) values (?, ?, ?, ?, ?) using ttl ?";
|
||||
let q = scy.prepare(cql).await?;
|
||||
let qu_insert_scalar_i16 = Arc::new(q);
|
||||
|
||||
let cql =
|
||||
"insert into events_scalar_i32 (series, ts_msp, ts_lsp, pulse, value) values (?, ?, ?, ?, ?) using ttl ?";
|
||||
let q = scy.prepare(cql).await?;
|
||||
let qu_insert_scalar_i32 = Arc::new(q);
|
||||
|
||||
let cql =
|
||||
"insert into events_scalar_f32 (series, ts_msp, ts_lsp, pulse, value) values (?, ?, ?, ?, ?) using ttl ?";
|
||||
let q = scy.prepare(cql).await?;
|
||||
let qu_insert_scalar_f32 = Arc::new(q);
|
||||
|
||||
let cql =
|
||||
"insert into events_scalar_f64 (series, ts_msp, ts_lsp, pulse, value) values (?, ?, ?, ?, ?) using ttl ?";
|
||||
let q = scy.prepare(cql).await?;
|
||||
let qu_insert_scalar_f64 = Arc::new(q);
|
||||
|
||||
let cql="insert into events_scalar_string (series, ts_msp, ts_lsp, pulse, value) values (?, ?, ?, ?, ?) using ttl ?";
|
||||
let q = scy.prepare(cql).await?;
|
||||
let qu_insert_scalar_string = Arc::new(q);
|
||||
|
||||
// array
|
||||
let cql =
|
||||
"insert into events_array_i8 (series, ts_msp, ts_lsp, pulse, value) values (?, ?, ?, ?, ?) using ttl ?";
|
||||
let q = scy.prepare(cql).await?;
|
||||
let qu_insert_array_i8 = Arc::new(q);
|
||||
|
||||
let cql =
|
||||
"insert into events_array_i16 (series, ts_msp, ts_lsp, pulse, value) values (?, ?, ?, ?, ?) using ttl ?";
|
||||
let q = scy.prepare(cql).await?;
|
||||
let qu_insert_array_i16 = Arc::new(q);
|
||||
|
||||
let cql =
|
||||
"insert into events_array_i32 (series, ts_msp, ts_lsp, pulse, value) values (?, ?, ?, ?, ?) using ttl ?";
|
||||
let q = scy.prepare(cql).await?;
|
||||
let qu_insert_array_i32 = Arc::new(q);
|
||||
|
||||
let cql =
|
||||
"insert into events_array_f32 (series, ts_msp, ts_lsp, pulse, value) values (?, ?, ?, ?, ?) using ttl ?";
|
||||
let q = scy.prepare(cql).await?;
|
||||
let qu_insert_array_f32 = Arc::new(q);
|
||||
|
||||
let cql =
|
||||
"insert into events_array_f64 (series, ts_msp, ts_lsp, pulse, value) values (?, ?, ?, ?, ?) using ttl ?";
|
||||
let q = scy.prepare(cql).await?;
|
||||
let qu_insert_array_f64 = Arc::new(q);
|
||||
|
||||
let cql =
|
||||
"insert into events_array_bool (series, ts_msp, ts_lsp, pulse, value) values (?, ?, ?, ?, ?) using ttl ?";
|
||||
let q = scy.prepare(cql).await?;
|
||||
let qu_insert_array_bool = Arc::new(q);
|
||||
|
||||
// Others:
|
||||
let cql = "insert into muted (part, series, ts, ema, emd) values (?, ?, ?, ?, ?) using ttl ?";
|
||||
let q = scy.prepare(cql).await?;
|
||||
let qu_insert_muted = Arc::new(q);
|
||||
|
||||
let cql = "insert into item_recv_ivl (part, series, ts, ema, emd) values (?, ?, ?, ?, ?) using ttl ?";
|
||||
let q = scy.prepare(cql).await?;
|
||||
let qu_insert_item_recv_ivl = Arc::new(q);
|
||||
|
||||
// Connection status:
|
||||
let cql = "insert into connection_status (ts_msp, ts_lsp, kind, addr) values (?, ?, ?, ?) using ttl ?";
|
||||
let q = scy.prepare(cql).await?;
|
||||
let qu_insert_connection_status = Arc::new(q);
|
||||
|
||||
let cql = "insert into channel_status (series, ts_msp, ts_lsp, kind) values (?, ?, ?, ?) using ttl ?";
|
||||
let q = scy.prepare(cql).await?;
|
||||
let qu_insert_channel_status = Arc::new(q);
|
||||
|
||||
let cql = "insert into channel_status_by_ts_msp (ts_msp, ts_lsp, series, kind) values (?, ?, ?, ?) using ttl ?";
|
||||
let q = scy.prepare(cql).await?;
|
||||
let qu_insert_channel_status_by_ts_msp = Arc::new(q);
|
||||
|
||||
let cql = concat!(
|
||||
"insert into channel_ping (",
|
||||
"part, ts_msp, series, ivl, interest, evsize",
|
||||
") values (?, ?, ?, ?, ?, ?) using ttl ?"
|
||||
);
|
||||
let q = scy.prepare(cql).await?;
|
||||
let qu_insert_channel_ping = Arc::new(q);
|
||||
|
||||
let cql = concat!(
|
||||
"insert into binned_scalar_f32_v01 (",
|
||||
"series, bin_len_sec, bin_count, off_msp, off_lsp, counts, mins, maxs, avgs)",
|
||||
" values (?, ?, ?, ?, ?, ?, ?, ?, ?) using ttl ?"
|
||||
);
|
||||
let q = scy.prepare(cql).await?;
|
||||
let qu_insert_binned_scalar_f32_v01 = Arc::new(q);
|
||||
let ret = Self {
|
||||
scy,
|
||||
qu_insert_ts_msp,
|
||||
qu_insert_series_by_ts_msp,
|
||||
qu_insert_scalar_i8,
|
||||
qu_insert_scalar_i16,
|
||||
qu_insert_scalar_i32,
|
||||
qu_insert_scalar_f32,
|
||||
qu_insert_scalar_f64,
|
||||
qu_insert_scalar_string,
|
||||
qu_insert_array_i8,
|
||||
qu_insert_array_i16,
|
||||
qu_insert_array_i32,
|
||||
qu_insert_array_f32,
|
||||
qu_insert_array_f64,
|
||||
qu_insert_array_bool,
|
||||
qu_insert_muted,
|
||||
qu_insert_item_recv_ivl,
|
||||
qu_insert_connection_status,
|
||||
qu_insert_channel_status,
|
||||
qu_insert_channel_status_by_ts_msp,
|
||||
qu_insert_channel_ping,
|
||||
qu_insert_binned_scalar_f32_v01,
|
||||
};
|
||||
Ok(ret)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user