WIP refactor

This commit is contained in:
Dominik Werder
2023-03-18 09:25:04 +01:00
parent 6a86ac1063
commit 1baa78bd3a
39 changed files with 381 additions and 305 deletions

View File

@@ -1,10 +1,17 @@
use chrono::{DateTime, Duration, Utc};
use chrono::DateTime;
use chrono::Duration;
use chrono::Utc;
use clap::Parser;
use daqbuffer::cli::{ClientType, Opts, SubCmd};
use daqbuffer::cli::ClientType;
use daqbuffer::cli::Opts;
use daqbuffer::cli::SubCmd;
use err::Error;
use netpod::log::*;
use netpod::query::CacheUsage;
use netpod::{NodeConfig, NodeConfigCached, ProxyConfig};
use netpod::NodeConfig;
use netpod::NodeConfigCached;
use netpod::ProxyConfig;
use netpod::TsNano;
use tokio::fs::File;
use tokio::io::AsyncReadExt;
@@ -122,8 +129,12 @@ async fn go() -> Result<(), Error> {
#[allow(unused)]
fn simple_fetch() {
use daqbuffer::err::ErrConv;
use netpod::Nanos;
use netpod::{timeunits::*, ByteOrder, Channel, ChannelConfig, ScalarType, Shape};
use netpod::timeunits::*;
use netpod::ByteOrder;
use netpod::Channel;
use netpod::ChannelConfig;
use netpod::ScalarType;
use netpod::Shape;
taskrun::run(async {
let _rh = daqbufp2::nodes::require_test_hosts_running()?;
let t1 = chrono::Utc::now();
@@ -135,7 +146,7 @@ fn simple_fetch() {
series: None,
},
keyspace: 3,
time_bin_size: Nanos { ns: DAY },
time_bin_size: TsNano(DAY),
array: true,
scalar_type: ScalarType::F64,
shape: Shape::Wave(42),

View File

@@ -11,11 +11,11 @@ use items_0::streamitem::StreamItem;
use netpod::log::*;
use netpod::query::BinnedQuery;
use netpod::query::CacheUsage;
use netpod::range::evrange::NanoRange;
use netpod::AppendToUrl;
use netpod::ByteSize;
use netpod::Channel;
use netpod::HostPort;
use netpod::NanoRange;
use netpod::PerfOpts;
use netpod::APP_OCTET;
use streams::frames::inmem::InMemoryFrameAsyncReadStream;

View File

@@ -7,11 +7,11 @@ use http::StatusCode;
use hyper::Body;
use netpod::log::*;
use netpod::query::BinnedQuery;
use netpod::range::evrange::NanoRange;
use netpod::AppendToUrl;
use netpod::Channel;
use netpod::Cluster;
use netpod::HostPort;
use netpod::NanoRange;
use netpod::APP_JSON;
use serde_json::Value as JsonValue;
use url::Url;

View File

@@ -7,11 +7,11 @@ use http::StatusCode;
use hyper::Body;
use netpod::log::*;
use netpod::query::PlainEventsQuery;
use netpod::range::evrange::NanoRange;
use netpod::AppendToUrl;
use netpod::Channel;
use netpod::Cluster;
use netpod::HostPort;
use netpod::NanoRange;
use netpod::APP_JSON;
use serde_json::Value as JsonValue;
use url::Url;

View File

@@ -13,11 +13,11 @@ use items_0::subfr::SubFrId;
use netpod::log::*;
use netpod::query::BinnedQuery;
use netpod::query::CacheUsage;
use netpod::range::evrange::NanoRange;
use netpod::AppendToUrl;
use netpod::Channel;
use netpod::Cluster;
use netpod::HostPort;
use netpod::NanoRange;
use netpod::PerfOpts;
use netpod::APP_OCTET;
use serde::de::DeserializeOwned;

View File

@@ -12,11 +12,11 @@ use hyper::Body;
use items_0::streamitem::StreamItem;
use netpod::log::*;
use netpod::query::PlainEventsQuery;
use netpod::range::evrange::NanoRange;
use netpod::AppendToUrl;
use netpod::Channel;
use netpod::Cluster;
use netpod::HostPort;
use netpod::NanoRange;
use netpod::PerfOpts;
use netpod::APP_JSON;
use netpod::APP_OCTET;

View File

@@ -8,10 +8,10 @@ use hyper::Body;
use netpod::log::*;
use netpod::query::BinnedQuery;
use netpod::query::CacheUsage;
use netpod::range::evrange::NanoRange;
use netpod::AppendToUrl;
use netpod::Channel;
use netpod::Cluster;
use netpod::NanoRange;
use netpod::APP_JSON;
use std::time::Duration;
use url::Url;

View File

@@ -1,9 +1,17 @@
use crate::eventblobs::EventChunkerMultifile;
use netpod::{test_data_base_path_databuffer, timeunits::*, SfDatabuffer};
use netpod::{ByteOrder, ByteSize, Channel, ChannelConfig, NanoRange, Nanos, Node, ScalarType, Shape};
use netpod::range::evrange::NanoRange;
use netpod::test_data_base_path_databuffer;
use netpod::timeunits::*;
use netpod::ByteOrder;
use netpod::ByteSize;
use netpod::Channel;
use netpod::ChannelConfig;
use netpod::Node;
use netpod::ScalarType;
use netpod::SfDatabuffer;
use netpod::Shape;
use netpod::TsNano;
use streams::eventchunker::EventChunkerConf;
#[allow(unused_imports)]
use tracing::{debug, error, info, trace, warn};
pub fn make_test_node(id: u32) -> Node {
Node {
@@ -43,7 +51,7 @@ async fn agg_x_dim_0_inner() {
series: None,
},
keyspace: 2,
time_bin_size: Nanos { ns: DAY },
time_bin_size: TsNano(DAY),
array: false,
shape: Shape::Scalar,
scalar_type: ScalarType::F64,
@@ -55,7 +63,7 @@ async fn agg_x_dim_0_inner() {
buffer_size: 1024 * 4,
};
let _bin_count = 20;
let ts1 = query.timebin as u64 * query.channel_config.time_bin_size.ns;
let ts1 = query.timebin as u64 * query.channel_config.time_bin_size.0;
let ts2 = ts1 + HOUR * 24;
let range = NanoRange { beg: ts1, end: ts2 };
let event_chunker_conf = EventChunkerConf::new(ByteSize::kb(1024));
@@ -100,7 +108,7 @@ async fn agg_x_dim_1_inner() {
series: None,
},
keyspace: 3,
time_bin_size: Nanos { ns: DAY },
time_bin_size: TsNano(DAY),
array: true,
shape: Shape::Wave(1024),
scalar_type: ScalarType::F64,
@@ -112,7 +120,7 @@ async fn agg_x_dim_1_inner() {
buffer_size: 17,
};
let _bin_count = 10;
let ts1 = query.timebin as u64 * query.channel_config.time_bin_size.ns;
let ts1 = query.timebin as u64 * query.channel_config.time_bin_size.0;
let ts2 = ts1 + HOUR * 24;
let range = NanoRange { beg: ts1, end: ts2 };
let event_chunker_conf = EventChunkerConf::new(ByteSize::kb(1024));

View File

@@ -1,7 +1,7 @@
use err::Error;
use netpod::range::evrange::NanoRange;
use netpod::Channel;
use netpod::ChannelConfig;
use netpod::NanoRange;
use netpod::NodeConfigCached;
use parse::channelconfig::extract_matching_config_entry;
use parse::channelconfig::read_local_config;
@@ -29,7 +29,7 @@ pub async fn config(
let channel_config = ChannelConfig {
channel: channel.clone(),
keyspace: entry.ks as u8,
time_bin_size: entry.bs,
time_bin_size: entry.bs.clone(),
shape: shape,
scalar_type: entry.scalar_type.clone(),
byte_order: entry.byte_order.clone(),

View File

@@ -1,14 +1,22 @@
use super::paths;
use bytes::BytesMut;
use err::{ErrStr, Error};
use err::ErrStr;
use err::Error;
use futures_util::StreamExt;
use netpod::log::*;
use netpod::{ChannelConfig, NanoRange, Nanos, Node};
use netpod::range::evrange::NanoRange;
use netpod::ChannelConfig;
use netpod::Node;
use netpod::TsNano;
use std::fmt;
use std::path::PathBuf;
use std::time::Instant;
use tokio::fs::{File, OpenOptions};
use tokio::io::{AsyncReadExt, AsyncSeekExt, ErrorKind, SeekFrom};
use tokio::fs::File;
use tokio::fs::OpenOptions;
use tokio::io::AsyncReadExt;
use tokio::io::AsyncSeekExt;
use tokio::io::ErrorKind;
use tokio::io::SeekFrom;
pub struct Positioned {
pub file: OpenedFile,
@@ -237,13 +245,11 @@ async fn open_files_inner(
return Ok(());
}
for &tb in &timebins {
let ts_bin = Nanos {
ns: tb * channel_config.time_bin_size.ns,
};
if ts_bin.ns >= range.end {
let ts_bin = TsNano(tb * channel_config.time_bin_size.0);
if ts_bin.ns() >= range.end {
continue;
}
if ts_bin.ns + channel_config.time_bin_size.ns <= range.beg {
if ts_bin.ns() + channel_config.time_bin_size.ns() <= range.beg {
continue;
}
let mut a = Vec::new();
@@ -337,10 +343,8 @@ async fn open_expanded_files_inner(
}
let mut p1 = None;
for (i1, tb) in timebins.iter().enumerate().rev() {
let ts_bin = Nanos {
ns: tb * channel_config.time_bin_size.ns,
};
if ts_bin.ns <= range.beg {
let ts_bin = TsNano(tb * channel_config.time_bin_size.ns());
if ts_bin.ns() <= range.beg {
p1 = Some(i1);
break;
}
@@ -407,8 +411,10 @@ async fn open_expanded_files_inner(
mod test {
use super::*;
use err::Error;
use netpod::range::evrange::NanoRange;
use netpod::test_data_base_path_databuffer;
use netpod::timeunits::*;
use netpod::{test_data_base_path_databuffer, ChannelConfig, NanoRange, Nanos};
use netpod::ChannelConfig;
use std::path::PathBuf;
use tokio::fs::OpenOptions;
@@ -810,7 +816,7 @@ mod test {
#[test]
fn expanded_file_list() {
let range = netpod::NanoRange {
let range = NanoRange {
beg: DAY + HOUR * 5,
end: DAY + HOUR * 8,
};
@@ -823,7 +829,7 @@ mod test {
let channel_config = ChannelConfig {
channel: chn,
keyspace: 2,
time_bin_size: Nanos { ns: DAY },
time_bin_size: TsNano(DAY),
scalar_type: netpod::ScalarType::I32,
byte_order: netpod::ByteOrder::Big,
shape: netpod::Shape::Scalar,

View File

@@ -11,10 +11,10 @@ use items_0::streamitem::StreamItem;
use items_2::eventfull::EventFull;
use items_2::merger::Merger;
use netpod::log::*;
use netpod::range::evrange::NanoRange;
use netpod::timeunits::SEC;
use netpod::ChannelConfig;
use netpod::DiskIoTune;
use netpod::NanoRange;
use netpod::Node;
use std::pin::Pin;
use std::task::Context;
@@ -271,16 +271,17 @@ mod test {
use items_0::streamitem::RangeCompletableItem;
use items_0::streamitem::StreamItem;
use netpod::log::*;
use netpod::range::evrange::NanoRange;
use netpod::timeunits::DAY;
use netpod::timeunits::MS;
use netpod::ByteSize;
use netpod::ChannelConfig;
use netpod::DiskIoTune;
use netpod::Nanos;
use netpod::TsNano;
use streams::eventchunker::EventChunkerConf;
use streams::rangefilter2::RangeFilter2;
fn read_expanded_for_range(range: netpod::NanoRange, nodeix: usize) -> Result<(usize, Vec<u64>), Error> {
fn read_expanded_for_range(range: NanoRange, nodeix: usize) -> Result<(usize, Vec<u64>), Error> {
let chn = netpod::Channel {
backend: "test-disk-databuffer".into(),
name: "scalar-i32-be".into(),
@@ -290,7 +291,7 @@ mod test {
let channel_config = ChannelConfig {
channel: chn,
keyspace: 2,
time_bin_size: Nanos { ns: DAY },
time_bin_size: TsNano(DAY),
scalar_type: netpod::ScalarType::I32,
byte_order: netpod::ByteOrder::Big,
shape: netpod::Shape::Scalar,
@@ -346,7 +347,7 @@ mod test {
#[test]
fn read_expanded_0() -> Result<(), Error> {
let range = netpod::NanoRange {
let range = NanoRange {
beg: DAY + MS * 0,
end: DAY + MS * 100,
};
@@ -362,7 +363,7 @@ mod test {
#[test]
fn read_expanded_1() -> Result<(), Error> {
let range = netpod::NanoRange {
let range = NanoRange {
beg: DAY + MS * 0,
end: DAY + MS * 1501,
};
@@ -376,7 +377,7 @@ mod test {
#[test]
fn read_expanded_2() -> Result<(), Error> {
let range = netpod::NanoRange {
let range = NanoRange {
beg: DAY - MS * 100,
end: DAY + MS * 1501,
};
@@ -388,7 +389,7 @@ mod test {
#[test]
fn read_expanded_3() -> Result<(), Error> {
use netpod::timeunits::*;
let range = netpod::NanoRange {
let range = NanoRange {
beg: DAY - MS * 1500,
end: DAY + MS * 1501,
};

View File

@@ -1,12 +1,23 @@
use crate::ChannelConfigExt;
use bitshuffle::bitshuffle_compress;
use bytes::{BufMut, BytesMut};
use bytes::BufMut;
use bytes::BytesMut;
use err::Error;
use netpod::log::*;
use netpod::timeunits::*;
use netpod::{ByteOrder, Channel, ChannelConfig, GenVar, Nanos, Node, ScalarType, SfDatabuffer, Shape};
use std::path::{Path, PathBuf};
use tokio::fs::{File, OpenOptions};
use netpod::ByteOrder;
use netpod::Channel;
use netpod::ChannelConfig;
use netpod::GenVar;
use netpod::Node;
use netpod::ScalarType;
use netpod::SfDatabuffer;
use netpod::Shape;
use netpod::TsNano;
use std::path::Path;
use std::path::PathBuf;
use tokio::fs::File;
use tokio::fs::OpenOptions;
use tokio::io::AsyncWriteExt;
pub async fn gen_test_data() -> Result<(), Error> {
@@ -27,7 +38,7 @@ pub async fn gen_test_data() -> Result<(), Error> {
series: None,
},
keyspace: 2,
time_bin_size: Nanos { ns: DAY },
time_bin_size: TsNano(DAY),
scalar_type: ScalarType::I32,
byte_order: ByteOrder::Big,
shape: Shape::Scalar,
@@ -46,7 +57,7 @@ pub async fn gen_test_data() -> Result<(), Error> {
series: None,
},
keyspace: 3,
time_bin_size: Nanos { ns: DAY },
time_bin_size: TsNano(DAY),
array: true,
scalar_type: ScalarType::F64,
shape: Shape::Wave(21),
@@ -65,7 +76,7 @@ pub async fn gen_test_data() -> Result<(), Error> {
series: None,
},
keyspace: 3,
time_bin_size: Nanos { ns: DAY },
time_bin_size: TsNano(DAY),
scalar_type: ScalarType::U16,
byte_order: ByteOrder::Little,
shape: Shape::Wave(77),
@@ -84,7 +95,7 @@ pub async fn gen_test_data() -> Result<(), Error> {
series: None,
},
keyspace: 2,
time_bin_size: Nanos { ns: DAY },
time_bin_size: TsNano(DAY),
scalar_type: ScalarType::I32,
byte_order: ByteOrder::Little,
shape: Shape::Scalar,
@@ -103,7 +114,7 @@ pub async fn gen_test_data() -> Result<(), Error> {
series: None,
},
keyspace: 2,
time_bin_size: Nanos { ns: DAY },
time_bin_size: TsNano(DAY),
scalar_type: ScalarType::I32,
byte_order: ByteOrder::Little,
shape: Shape::Scalar,
@@ -170,9 +181,9 @@ async fn gen_channel(chn: &ChannelGenProps, split: u32, node: &Node, ensemble: &
.await
.map_err(|k| Error::with_msg(format!("can not generate config {:?}", k)))?;
let mut evix = 0;
let mut ts = Nanos { ns: 0 };
let mut ts = TsNano(0);
let mut pulse = 0;
while ts.ns < DAY * 3 {
while ts.ns() < DAY * 3 {
let res = gen_timebin(
evix,
ts,
@@ -187,7 +198,7 @@ async fn gen_channel(chn: &ChannelGenProps, split: u32, node: &Node, ensemble: &
)
.await?;
evix = res.evix;
ts.ns = res.ts.ns;
ts = res.ts;
pulse = res.pulse;
}
Ok(())
@@ -231,7 +242,7 @@ async fn gen_config(
buf.put_i64(ts);
buf.put_i64(pulse);
buf.put_u32(config.keyspace as u32);
buf.put_u64(config.time_bin_size.ns / MS);
buf.put_u64(config.time_bin_size.ns() / MS);
buf.put_i32(sc);
buf.put_i32(status);
buf.put_i8(bb);
@@ -316,13 +327,13 @@ impl CountedFile {
struct GenTimebinRes {
evix: u64,
ts: Nanos,
ts: TsNano,
pulse: u64,
}
async fn gen_timebin(
evix: u64,
ts: Nanos,
ts: TsNano,
pulse: u64,
ts_spacing: u64,
channel_path: &Path,
@@ -332,11 +343,11 @@ async fn gen_timebin(
ensemble: &Ensemble,
gen_var: &GenVar,
) -> Result<GenTimebinRes, Error> {
let tb = ts.ns / config.time_bin_size.ns;
let tb = ts.ns() / config.time_bin_size.ns();
let path = channel_path.join(format!("{:019}", tb)).join(format!("{:010}", split));
tokio::fs::create_dir_all(&path).await?;
let data_path = path.join(format!("{:019}_{:05}_Data", config.time_bin_size.ns / MS, 0));
let index_path = path.join(format!("{:019}_{:05}_Data_Index", config.time_bin_size.ns / MS, 0));
let data_path = path.join(format!("{:019}_{:05}_Data", config.time_bin_size.ns() / MS, 0));
let index_path = path.join(format!("{:019}_{:05}_Data_Index", config.time_bin_size.ns() / MS, 0));
info!("open data file {:?}", data_path);
let file = OpenOptions::new()
.write(true)
@@ -363,34 +374,32 @@ async fn gen_timebin(
let mut evix = evix;
let mut ts = ts;
let mut pulse = pulse;
let tsmax = Nanos {
ns: (tb + 1) * config.time_bin_size.ns,
};
while ts.ns < tsmax.ns {
let tsmax = TsNano((tb + 1) * config.time_bin_size.ns());
while ts.ns() < tsmax.ns() {
match gen_var {
// TODO
// Splits and nodes are not in 1-to-1 correspondence.
GenVar::Default => {
if evix % ensemble.nodes.len() as u64 == split as u64 {
gen_event(&mut file, index_file.as_mut(), evix, ts, pulse, config, gen_var).await?;
gen_event(&mut file, index_file.as_mut(), evix, ts.clone(), pulse, config, gen_var).await?;
}
}
GenVar::ConstRegular => {
if evix % ensemble.nodes.len() as u64 == split as u64 {
gen_event(&mut file, index_file.as_mut(), evix, ts, pulse, config, gen_var).await?;
gen_event(&mut file, index_file.as_mut(), evix, ts.clone(), pulse, config, gen_var).await?;
}
}
GenVar::TimeWeight => {
let m = evix % 20;
if m == 0 || m == 1 {
if evix % ensemble.nodes.len() as u64 == split as u64 {
gen_event(&mut file, index_file.as_mut(), evix, ts, pulse, config, gen_var).await?;
gen_event(&mut file, index_file.as_mut(), evix, ts.clone(), pulse, config, gen_var).await?;
}
}
}
}
evix += 1;
ts.ns += ts_spacing;
ts.0 += ts_spacing;
pulse += 1;
}
let ret = GenTimebinRes { evix, ts, pulse };
@@ -413,7 +422,7 @@ async fn gen_event(
file: &mut CountedFile,
index_file: Option<&mut CountedFile>,
evix: u64,
ts: Nanos,
ts: TsNano,
pulse: u64,
config: &ChannelConfig,
gen_var: &GenVar,
@@ -423,7 +432,7 @@ async fn gen_event(
let mut buf = BytesMut::with_capacity(1024 * 16);
buf.put_i32(0xcafecafe as u32 as i32);
buf.put_u64(ttl);
buf.put_u64(ts.ns);
buf.put_u64(ts.ns());
buf.put_u64(pulse);
buf.put_u64(ioc_ts);
buf.put_u8(0);
@@ -541,7 +550,7 @@ async fn gen_event(
file.write_all(buf.as_ref()).await?;
if let Some(f) = index_file {
let mut buf = BytesMut::with_capacity(16);
buf.put_u64(ts.ns);
buf.put_u64(ts.ns());
buf.put_u64(z);
f.write_all(&buf).await?;
}

View File

@@ -1,11 +1,13 @@
use arrayref::array_ref;
use err::Error;
use netpod::log::*;
use netpod::NanoRange;
use netpod::Nanos;
use netpod::range::evrange::NanoRange;
use netpod::TsNano;
use std::mem::size_of;
use tokio::fs::File;
use tokio::io::{AsyncReadExt, AsyncSeekExt, SeekFrom};
use tokio::io::AsyncReadExt;
use tokio::io::AsyncSeekExt;
use tokio::io::SeekFrom;
pub fn find_ge(range: NanoRange, expand_right: bool, buf: &[u8]) -> Result<Option<(u64, u64)>, Error> {
type VT = u64;
@@ -174,7 +176,7 @@ pub fn parse_channel_header(buf: &[u8]) -> Result<(u32,), Error> {
Ok((len1 as u32,))
}
pub fn parse_event(buf: &[u8]) -> Result<(u32, Nanos), Error> {
pub fn parse_event(buf: &[u8]) -> Result<(u32, TsNano), Error> {
if buf.len() < 4 {
return Err(Error::with_msg(format!("parse_event buf len: {}", buf.len())));
}
@@ -194,10 +196,10 @@ pub fn parse_event(buf: &[u8]) -> Result<(u32, Nanos), Error> {
return Err(Error::with_msg(format!("len mismatch len1: {} len2: {}", len1, len2)));
}
let ts = u64::from_be_bytes(*array_ref![buf, 12, 8]);
Ok((len1 as u32, Nanos { ns: ts }))
Ok((len1 as u32, TsNano(ts)))
}
pub async fn read_event_at(pos: u64, file: &mut File) -> Result<(u32, Nanos), Error> {
pub async fn read_event_at(pos: u64, file: &mut File) -> Result<(u32, TsNano), Error> {
file.seek(SeekFrom::Start(pos)).await?;
let mut buf = vec![0; 1024];
let _n1 = read(&mut buf, file).await?;
@@ -220,7 +222,7 @@ pub async fn position_static_len_datafile(
let evlen = ev.0 as u64;
let mut j = headoff;
let mut k = ((flen - headoff) / evlen - 1) * evlen + headoff;
let x = ev.1.ns;
let x = ev.1.ns();
let t = read_event_at(k, &mut file).await?;
if t.0 != evlen as u32 {
Err(Error::with_msg(format!(
@@ -228,7 +230,7 @@ pub async fn position_static_len_datafile(
t.0, evlen
)))?;
}
let y = t.1.ns;
let y = t.1.ns();
let mut nreads = 2;
if x >= range.end {
if expand_right {
@@ -275,7 +277,7 @@ pub async fn position_static_len_datafile(
)))?;
}
nreads += 1;
let e = t.1.ns;
let e = t.1.ns();
if e < range.beg {
x = e;
j = m;
@@ -301,7 +303,7 @@ pub async fn position_static_len_datafile_at_largest_smaller_than(
let evlen = ev.0 as u64;
let mut j = headoff;
let mut k = ((flen - headoff) / evlen - 1) * evlen + headoff;
let x = ev.1.ns;
let x = ev.1.ns();
let t = read_event_at(k, &mut file).await?;
if t.0 != evlen as u32 {
Err(Error::with_msg(format!(
@@ -309,7 +311,7 @@ pub async fn position_static_len_datafile_at_largest_smaller_than(
t.0, evlen
)))?;
}
let y = t.1.ns;
let y = t.1.ns();
let mut nreads = 2;
if x >= range.beg {
file.seek(SeekFrom::Start(j)).await?;
@@ -333,7 +335,7 @@ pub async fn position_static_len_datafile_at_largest_smaller_than(
)))?;
}
nreads += 1;
let x = t.1.ns;
let x = t.1.ns();
if x < range.beg {
j = m;
} else {

View File

@@ -1,7 +1,9 @@
use err::Error;
use futures_util::StreamExt;
use netpod::timeunits::MS;
use netpod::{ChannelConfig, Nanos, Node};
use netpod::ChannelConfig;
use netpod::Node;
use netpod::TsNano;
use std::path::PathBuf;
// TODO remove/replace this
@@ -19,7 +21,7 @@ pub fn datapath(timebin: u64, config: &netpod::ChannelConfig, split: u32, node:
.join(config.channel.name.clone())
.join(format!("{:019}", timebin))
.join(format!("{:010}", split))
.join(format!("{:019}_00000_Data", config.time_bin_size.ns / MS))
.join(format!("{:019}_00000_Data", config.time_bin_size.ns() / MS))
}
/**
@@ -76,7 +78,7 @@ pub async fn datapaths_for_timebin(
.join(config.channel.name.clone())
.join(format!("{:019}", timebin))
.join(format!("{:010}", split))
.join(format!("{:019}_00000_Data", config.time_bin_size.ns / MS));
.join(format!("{:019}_00000_Data", config.time_bin_size.ns() / MS));
ret.push(path);
}
Ok(ret)
@@ -92,21 +94,21 @@ pub fn channel_timebins_dir_path(channel_config: &ChannelConfig, node: &Node) ->
Ok(ret)
}
pub fn data_dir_path(ts: Nanos, channel_config: &ChannelConfig, split: u32, node: &Node) -> Result<PathBuf, Error> {
pub fn data_dir_path(ts: TsNano, channel_config: &ChannelConfig, split: u32, node: &Node) -> Result<PathBuf, Error> {
let ret = channel_timebins_dir_path(channel_config, node)?
.join(format!("{:019}", ts.ns / channel_config.time_bin_size.ns))
.join(format!("{:019}", ts.ns() / channel_config.time_bin_size.ns()))
.join(format!("{:010}", split));
Ok(ret)
}
pub fn data_path(ts: Nanos, channel_config: &ChannelConfig, split: u32, node: &Node) -> Result<PathBuf, Error> {
let fname = format!("{:019}_{:05}_Data", channel_config.time_bin_size.ns / MS, 0);
pub fn data_path(ts: TsNano, channel_config: &ChannelConfig, split: u32, node: &Node) -> Result<PathBuf, Error> {
let fname = format!("{:019}_{:05}_Data", channel_config.time_bin_size.ns() / MS, 0);
let ret = data_dir_path(ts, channel_config, split, node)?.join(fname);
Ok(ret)
}
pub fn index_path(ts: Nanos, channel_config: &ChannelConfig, split: u32, node: &Node) -> Result<PathBuf, Error> {
let fname = format!("{:019}_{:05}_Data_Index", channel_config.time_bin_size.ns / MS, 0);
pub fn index_path(ts: TsNano, channel_config: &ChannelConfig, split: u32, node: &Node) -> Result<PathBuf, Error> {
let fname = format!("{:019}_{:05}_Data_Index", channel_config.time_bin_size.ns() / MS, 0);
let ret = data_dir_path(ts, channel_config, split, node)?.join(fname);
Ok(ret)
}

View File

@@ -10,11 +10,11 @@ use items_2::channelevents::ChannelEvents;
use items_2::eventfull::EventFull;
use netpod::log::*;
use netpod::query::PlainEventsQuery;
use netpod::range::evrange::NanoRange;
use netpod::AggKind;
use netpod::ByteSize;
use netpod::Channel;
use netpod::DiskIoTune;
use netpod::NanoRange;
use netpod::NodeConfigCached;
use netpod::ScalarType;
use netpod::Shape;
@@ -92,7 +92,7 @@ pub async fn make_event_pipe(
let channel_config = netpod::ChannelConfig {
channel: evq.channel().clone(),
keyspace: entry.ks as u8,
time_bin_size: entry.bs,
time_bin_size: entry.bs.clone(),
shape,
scalar_type: entry.scalar_type.clone(),
byte_order: entry.byte_order.clone(),
@@ -172,8 +172,8 @@ pub fn make_local_event_blobs_stream(
let channel_config = netpod::ChannelConfig {
channel,
keyspace: entry.ks as u8,
time_bin_size: entry.bs,
shape: shape,
time_bin_size: entry.bs.clone(),
shape,
scalar_type: entry.scalar_type.clone(),
byte_order: entry.byte_order.clone(),
array: entry.is_array,
@@ -218,7 +218,7 @@ pub fn make_remote_event_blobs_stream(
let channel_config = netpod::ChannelConfig {
channel,
keyspace: entry.ks as u8,
time_bin_size: entry.bs,
time_bin_size: entry.bs.clone(),
shape: shape,
scalar_type: entry.scalar_type.clone(),
byte_order: entry.byte_order.clone(),

View File

@@ -3,11 +3,11 @@ use clap::Parser;
use err::Error;
#[allow(unused)]
use netpod::log::*;
use netpod::range::evrange::NanoRange;
use netpod::ByteOrder;
use netpod::ByteSize;
use netpod::Channel;
use netpod::ChannelConfig;
use netpod::NanoRange;
use netpod::Shape;
use std::path::PathBuf;
use streams::eventchunker::EventChunker;
@@ -87,7 +87,7 @@ pub fn main() -> Result<(), Error> {
series: None,
},
keyspace: ce.ks as u8,
time_bin_size: ce.bs,
time_bin_size: ce.bs.clone(),
scalar_type: ce.scalar_type.clone(),
compression: false,
shape: Shape::Scalar,

View File

@@ -27,13 +27,13 @@ use itertools::Itertools;
use netpod::log::*;
use netpod::query::api1::Api1Query;
use netpod::query::PlainEventsQuery;
use netpod::range::evrange::NanoRange;
use netpod::timeunits::SEC;
use netpod::ByteSize;
use netpod::Channel;
use netpod::ChannelSearchQuery;
use netpod::ChannelSearchResult;
use netpod::DiskIoTune;
use netpod::NanoRange;
use netpod::NodeConfigCached;
use netpod::PerfOpts;
use netpod::ProxyConfig;

View File

@@ -1,7 +1,7 @@
use err::Error;
use items_0::streamitem::RangeCompletableItem;
use items_0::streamitem::StreamItem;
use netpod::NanoRange;
use netpod::range::evrange::NanoRange;
use std::future::Future;
use std::marker::PhantomData;
use std::pin::Pin;
@@ -60,7 +60,7 @@ where
Self {
// TODO make buffer size a parameter:
buf: vec![0; 1024 * 32],
all: vec![],
all: Vec::new(),
file: Some(file),
_m1: PhantomData,
}

View File

@@ -4,8 +4,8 @@ use crate::Events;
use crate::WithLen;
use err::Error;
use netpod::log::*;
use netpod::range::evrange::SeriesRange;
use netpod::BinnedRangeEnum;
use netpod::SeriesRange;
use serde::Serialize;
use std::any::Any;
use std::fmt;

View File

@@ -12,10 +12,8 @@ pub mod bincode {
use collect_s::Collectable;
use collect_s::ToJsonResult;
use netpod::range::evrange::SeriesRange;
use netpod::BinnedRangeEnum;
use netpod::ScalarType;
use netpod::SeriesRange;
use netpod::Shape;
use std::any::Any;
use std::collections::VecDeque;
use std::fmt;
@@ -31,30 +29,12 @@ pub trait TimeBins {
fn ts_min_max(&self) -> Option<(u64, u64)>;
}
pub enum Fits {
Empty,
Lower,
Greater,
Inside,
PartlyLower,
PartlyGreater,
PartlyLowerAndGreater,
}
pub trait RangeOverlapInfo {
fn ends_before(&self, range: &SeriesRange) -> bool;
fn ends_after(&self, range: &SeriesRange) -> bool;
fn starts_after(&self, range: &SeriesRange) -> bool;
}
pub trait EmptyForScalarTypeShape {
fn empty(scalar_type: ScalarType, shape: Shape) -> Self;
}
pub trait EmptyForShape {
fn empty(shape: Shape) -> Self;
}
pub trait Empty {
fn empty() -> Self;
}

View File

@@ -19,10 +19,10 @@ use items_0::TimeBinner;
use items_0::TimeBins;
use items_0::WithLen;
use netpod::log::*;
use netpod::range::evrange::SeriesRange;
use netpod::timeunits::SEC;
use netpod::BinnedRangeEnum;
use netpod::Dim0Kind;
use netpod::SeriesRange;
use serde::Deserialize;
use serde::Serialize;
use std::any;

View File

@@ -22,11 +22,11 @@ use items_0::TimeBinner;
use items_0::TimeBins;
use items_0::WithLen;
use netpod::log::*;
use netpod::range::evrange::NanoRange;
use netpod::range::evrange::SeriesRange;
use netpod::timeunits::SEC;
use netpod::BinnedRangeEnum;
use netpod::Dim0Kind;
use netpod::NanoRange;
use netpod::SeriesRange;
use num_traits::Zero;
use serde::Deserialize;
use serde::Serialize;

View File

@@ -12,10 +12,10 @@ use items_0::AsAnyRef;
use items_0::MergeError;
use items_0::WithLen;
use netpod::log::*;
use netpod::range::evrange::NanoRange;
use netpod::range::evrange::SeriesRange;
use netpod::BinnedRange;
use netpod::BinnedRangeEnum;
use netpod::NanoRange;
use netpod::SeriesRange;
use serde::Deserialize;
use serde::Serialize;
use std::any::Any;

View File

@@ -22,11 +22,11 @@ use items_0::TimeBinnable;
use items_0::TimeBinner;
use items_0::WithLen;
use netpod::log::*;
use netpod::range::evrange::NanoRange;
use netpod::range::evrange::SeriesRange;
use netpod::timeunits::MS;
use netpod::timeunits::SEC;
use netpod::BinnedRangeEnum;
use netpod::NanoRange;
use netpod::SeriesRange;
use serde::Deserialize;
use serde::Serialize;
use std::any;

View File

@@ -22,9 +22,9 @@ use items_0::TimeBinnable;
use items_0::TimeBinner;
use items_0::WithLen;
use netpod::log::*;
use netpod::range::evrange::SeriesRange;
use netpod::timeunits::SEC;
use netpod::BinnedRangeEnum;
use netpod::SeriesRange;
use serde::Deserialize;
use serde::Serialize;
use std::any;

View File

@@ -15,8 +15,8 @@ use items_0::AsAnyRef;
use items_0::Empty;
use items_0::WithLen;
use netpod::log::*;
use netpod::range::evrange::SeriesRange;
use netpod::BinnedRangeEnum;
use netpod::SeriesRange;
use serde::Deserialize;
use serde::Serialize;
use std::any;

View File

@@ -29,8 +29,9 @@ use items_0::Events;
use items_0::MergeError;
use items_0::RangeOverlapInfo;
use merger::Mergeable;
use netpod::range::evrange::NanoRange;
use netpod::range::evrange::SeriesRange;
use netpod::timeunits::*;
use netpod::SeriesRange;
use serde::Deserialize;
use serde::Serialize;
use serde::Serializer;

View File

@@ -28,11 +28,12 @@ use items_0::Appendable;
use items_0::Empty;
use items_0::WithLen;
use netpod::log::*;
use netpod::range::evrange::NanoRange;
use netpod::range::evrange::SeriesRange;
use netpod::timeunits::*;
use netpod::AggKind;
use netpod::BinnedRange;
use netpod::BinnedRangeEnum;
use netpod::NanoRange;
use netpod::ScalarType;
use netpod::Shape;
use std::time::Duration;

View File

@@ -1,6 +1,7 @@
pub mod api4;
pub mod histo;
pub mod query;
pub mod range;
pub mod status;
pub mod streamext;
pub mod transform;
@@ -13,6 +14,9 @@ use chrono::Utc;
use err::Error;
use futures_util::Stream;
use futures_util::StreamExt;
use range::evrange::NanoRange;
use range::evrange::PulseRange;
use range::evrange::SeriesRange;
use serde::Deserialize;
use serde::Serialize;
use serde_json::Value as JsVal;
@@ -700,148 +704,6 @@ impl From<FilePos> for u64 {
}
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub enum TimeRange {
Time { beg: DateTime<Utc>, end: DateTime<Utc> },
Pulse { beg: u64, end: u64 },
Nano { beg: u64, end: u64 },
}
#[derive(Clone, Copy, PartialEq, PartialOrd, Serialize, Deserialize)]
pub struct Nanos {
pub ns: u64,
}
impl Nanos {
pub fn from_ns(ns: u64) -> Self {
Self { ns }
}
}
impl fmt::Debug for Nanos {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
let ts = chrono::Utc.timestamp_opt((self.ns / SEC) as i64, (self.ns % SEC) as u32);
f.debug_struct("Nanos").field("ns", &ts).finish()
}
}
#[derive(Clone, Serialize, Deserialize, PartialEq)]
pub struct NanoRange {
pub beg: u64,
pub end: u64,
}
impl fmt::Debug for NanoRange {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
let beg = chrono::Utc
.timestamp_opt((self.beg / SEC) as i64, (self.beg % SEC) as u32)
.earliest();
let end = chrono::Utc
.timestamp_opt((self.end / SEC) as i64, (self.end % SEC) as u32)
.earliest();
if let (Some(a), Some(b)) = (beg, end) {
f.debug_struct("NanoRange").field("beg", &a).field("end", &b).finish()
} else {
f.debug_struct("NanoRange")
.field("beg", &beg)
.field("end", &end)
.finish()
}
}
}
impl NanoRange {
pub fn from_date_time(beg: DateTime<Utc>, end: DateTime<Utc>) -> Self {
Self {
beg: beg.timestamp_nanos() as u64,
end: end.timestamp_nanos() as u64,
}
}
pub fn delta(&self) -> u64 {
self.end - self.beg
}
}
impl TryFrom<&SeriesRange> for NanoRange {
type Error = Error;
fn try_from(val: &SeriesRange) -> Result<NanoRange, Self::Error> {
match val {
SeriesRange::TimeRange(x) => Ok(x.clone()),
SeriesRange::PulseRange(_) => Err(Error::with_msg_no_trace("not a Time range")),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct PulseRange {
pub beg: u64,
pub end: u64,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub enum SeriesRange {
TimeRange(NanoRange),
PulseRange(PulseRange),
}
impl SeriesRange {
pub fn dim0kind(&self) -> Dim0Kind {
match self {
SeriesRange::TimeRange(_) => Dim0Kind::Time,
SeriesRange::PulseRange(_) => Dim0Kind::Pulse,
}
}
pub fn is_time(&self) -> bool {
match self {
SeriesRange::TimeRange(_) => true,
SeriesRange::PulseRange(_) => false,
}
}
pub fn is_pulse(&self) -> bool {
match self {
SeriesRange::TimeRange(_) => false,
SeriesRange::PulseRange(_) => true,
}
}
pub fn beg_u64(&self) -> u64 {
match self {
SeriesRange::TimeRange(x) => x.beg,
SeriesRange::PulseRange(x) => x.beg,
}
}
pub fn end_u64(&self) -> u64 {
match self {
SeriesRange::TimeRange(x) => x.beg,
SeriesRange::PulseRange(x) => x.beg,
}
}
pub fn delta_u64(&self) -> u64 {
match self {
SeriesRange::TimeRange(x) => x.end - x.beg,
SeriesRange::PulseRange(x) => x.end - x.beg,
}
}
}
impl From<NanoRange> for SeriesRange {
fn from(k: NanoRange) -> Self {
Self::TimeRange(k)
}
}
impl From<PulseRange> for SeriesRange {
fn from(k: PulseRange) -> Self {
Self::PulseRange(k)
}
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub enum ByteOrder {
Little,
@@ -897,7 +759,7 @@ pub enum GenVar {
pub struct ChannelConfig {
pub channel: Channel,
pub keyspace: u8,
pub time_bin_size: Nanos,
pub time_bin_size: TsNano,
pub scalar_type: ScalarType,
pub compression: bool,
pub shape: Shape,
@@ -1159,10 +1021,6 @@ fn test_shape_serde() {
assert_eq!(s, Shape::Image(12, 13));
}
pub trait HasShape {
fn shape(&self) -> Shape;
}
pub mod timeunits {
pub const MU: u64 = 1000;
pub const MS: u64 = MU * 1000;
@@ -1199,12 +1057,35 @@ pub trait Dim0Index: Clone + fmt::Debug + PartialOrd {
fn to_binned_range_enum(&self, bin_off: u64, bin_cnt: u64) -> BinnedRangeEnum;
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, PartialOrd)]
pub struct TsNano(u64);
#[derive(Clone, Serialize, Deserialize, PartialEq, PartialOrd)]
pub struct TsNano(pub u64);
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, PartialOrd)]
pub struct PulseId(u64);
impl TsNano {
pub fn from_ns(ns: u64) -> Self {
Self(ns)
}
pub fn ns(&self) -> u64 {
self.0
}
}
impl fmt::Debug for TsNano {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
let ts = Utc.timestamp_opt((self.0 / SEC) as i64, (self.0 % SEC) as u32);
f.debug_struct("TsNano").field("ns", &ts).finish()
}
}
impl PulseId {
pub fn from_id(id: u64) -> Self {
Self(id)
}
}
impl Dim0Index for TsNano {
fn add(&self, v: &Self) -> Self {
Self(self.0 + v.0)
@@ -1235,7 +1116,7 @@ impl Dim0Index for TsNano {
}
fn series_range(a: Self, b: Self) -> SeriesRange {
todo!()
SeriesRange::TimeRange(NanoRange { beg: a.0, end: b.0 })
}
fn prebin_bin_len_opts() -> Vec<Self> {
@@ -1305,7 +1186,7 @@ impl Dim0Index for PulseId {
}
fn series_range(a: Self, b: Self) -> SeriesRange {
todo!()
SeriesRange::PulseRange(PulseRange { beg: a.0, end: b.0 })
}
fn prebin_bin_len_opts() -> Vec<Self> {
@@ -1723,7 +1604,32 @@ impl BinnedRangeEnum {
}
pub fn range_at(&self, i: usize) -> Option<SeriesRange> {
err::todoval()
match self {
BinnedRangeEnum::Time(k) => {
if (i as u64) < k.bin_cnt {
let beg = k.bin_off + k.bin_len.0 * i as u64;
let x = SeriesRange::TimeRange(NanoRange {
beg,
end: beg + k.bin_len.0,
});
Some(x)
} else {
None
}
}
BinnedRangeEnum::Pulse(k) => {
if (i as u64) < k.bin_cnt {
let beg = k.bin_off + k.bin_len.0 * i as u64;
let x = SeriesRange::PulseRange(PulseRange {
beg,
end: beg + k.bin_len.0,
});
Some(x)
} else {
None
}
}
}
}
pub fn dim0kind(&self) -> Dim0Kind {

1
netpod/src/range.rs Normal file
View File

@@ -0,0 +1 @@
pub mod evrange;

133
netpod/src/range/evrange.rs Normal file
View File

@@ -0,0 +1,133 @@
use crate::timeunits::SEC;
use crate::Dim0Kind;
use chrono::DateTime;
use chrono::TimeZone;
use chrono::Utc;
use err::Error;
use serde::Deserialize;
use serde::Serialize;
use std::fmt;
#[derive(Clone, Debug, Serialize, Deserialize)]
pub enum TimeRange {
Time { beg: DateTime<Utc>, end: DateTime<Utc> },
Pulse { beg: u64, end: u64 },
Nano { beg: u64, end: u64 },
}
#[derive(Clone, Serialize, Deserialize, PartialEq)]
pub struct NanoRange {
pub beg: u64,
pub end: u64,
}
impl fmt::Debug for NanoRange {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
let beg = chrono::Utc
.timestamp_opt((self.beg / SEC) as i64, (self.beg % SEC) as u32)
.earliest();
let end = chrono::Utc
.timestamp_opt((self.end / SEC) as i64, (self.end % SEC) as u32)
.earliest();
if let (Some(a), Some(b)) = (beg, end) {
f.debug_struct("NanoRange").field("beg", &a).field("end", &b).finish()
} else {
f.debug_struct("NanoRange")
.field("beg", &beg)
.field("end", &end)
.finish()
}
}
}
impl NanoRange {
pub fn from_date_time(beg: DateTime<Utc>, end: DateTime<Utc>) -> Self {
Self {
beg: beg.timestamp_nanos() as u64,
end: end.timestamp_nanos() as u64,
}
}
pub fn delta(&self) -> u64 {
self.end - self.beg
}
}
impl TryFrom<&SeriesRange> for NanoRange {
type Error = Error;
fn try_from(val: &SeriesRange) -> Result<NanoRange, Self::Error> {
match val {
SeriesRange::TimeRange(x) => Ok(x.clone()),
SeriesRange::PulseRange(_) => Err(Error::with_msg_no_trace("not a Time range")),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct PulseRange {
pub beg: u64,
pub end: u64,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub enum SeriesRange {
TimeRange(NanoRange),
PulseRange(PulseRange),
}
impl SeriesRange {
pub fn dim0kind(&self) -> Dim0Kind {
match self {
SeriesRange::TimeRange(_) => Dim0Kind::Time,
SeriesRange::PulseRange(_) => Dim0Kind::Pulse,
}
}
pub fn is_time(&self) -> bool {
match self {
SeriesRange::TimeRange(_) => true,
SeriesRange::PulseRange(_) => false,
}
}
pub fn is_pulse(&self) -> bool {
match self {
SeriesRange::TimeRange(_) => false,
SeriesRange::PulseRange(_) => true,
}
}
pub fn beg_u64(&self) -> u64 {
match self {
SeriesRange::TimeRange(x) => x.beg,
SeriesRange::PulseRange(x) => x.beg,
}
}
pub fn end_u64(&self) -> u64 {
match self {
SeriesRange::TimeRange(x) => x.beg,
SeriesRange::PulseRange(x) => x.beg,
}
}
pub fn delta_u64(&self) -> u64 {
match self {
SeriesRange::TimeRange(x) => x.end - x.beg,
SeriesRange::PulseRange(x) => x.end - x.beg,
}
}
}
impl From<NanoRange> for SeriesRange {
fn from(k: NanoRange) -> Self {
Self::TimeRange(k)
}
}
impl From<PulseRange> for SeriesRange {
fn from(k: PulseRange) -> Self {
Self::PulseRange(k)
}
}

View File

@@ -1,8 +1,8 @@
use err::Error;
use netpod::log::*;
use netpod::range::evrange::NanoRange;
use netpod::ChConf;
use netpod::Channel;
use netpod::NanoRange;
use netpod::NodeConfigCached;
use netpod::ScalarType;
use netpod::Shape;

View File

@@ -12,13 +12,13 @@ use items_2::framable::EventQueryJsonStringFrame;
use items_2::frame::decode_frame;
use items_2::frame::make_frame;
use netpod::query::PlainEventsQuery;
use netpod::range::evrange::NanoRange;
use netpod::timeunits::SEC;
use netpod::AggKind;
use netpod::Channel;
use netpod::Cluster;
use netpod::Database;
use netpod::FileIoBufferSize;
use netpod::NanoRange;
use netpod::Node;
use netpod::NodeConfig;
use netpod::NodeConfigCached;

View File

@@ -1,13 +1,26 @@
use err::Error;
use netpod::range::evrange::NanoRange;
use netpod::timeunits::MS;
use netpod::{ByteOrder, Channel, NanoRange, Nanos, Node, ScalarType, Shape};
use netpod::{ChannelConfigQuery, ChannelConfigResponse};
use netpod::ByteOrder;
use netpod::Channel;
use netpod::ChannelConfigQuery;
use netpod::ChannelConfigResponse;
use netpod::Node;
use netpod::ScalarType;
use netpod::Shape;
use netpod::TsNano;
use nom::bytes::complete::take;
use nom::number::complete::{be_i16, be_i32, be_i64, be_i8, be_u8};
use nom::number::complete::be_i16;
use nom::number::complete::be_i32;
use nom::number::complete::be_i64;
use nom::number::complete::be_i8;
use nom::number::complete::be_u8;
use nom::Needed;
use num_derive::{FromPrimitive, ToPrimitive};
use num_derive::FromPrimitive;
use num_derive::ToPrimitive;
use num_traits::ToPrimitive;
use serde::{Deserialize, Serialize};
use serde::Deserialize;
use serde::Serialize;
use std::fmt;
use tokio::io::ErrorKind;
@@ -70,7 +83,7 @@ pub struct ConfigEntry {
pub ts: u64,
pub pulse: i64,
pub ks: i32,
pub bs: Nanos,
pub bs: TsNano,
pub split_count: i32,
pub status: i32,
pub bb: i8,
@@ -158,7 +171,7 @@ pub fn parse_entry(inp: &[u8]) -> NRes<Option<ConfigEntry>> {
let (inp, pulse) = be_i64(inp)?;
let (inp, ks) = be_i32(inp)?;
let (inp, bs) = be_i64(inp)?;
let bs = Nanos { ns: bs as u64 * MS };
let bs = TsNano(bs as u64 * MS);
let (inp, split_count) = be_i32(inp)?;
let (inp, status) = be_i32(inp)?;
let (inp, bb) = be_i8(inp)?;

View File

@@ -6,8 +6,9 @@ pub mod status;
use err::Error;
use errconv::ErrConv;
use netpod::range::evrange::NanoRange;
use netpod::range::evrange::SeriesRange;
use netpod::ScyllaConfig;
use netpod::SeriesRange;
use scylla::statement::Consistency;
use scylla::Session as ScySession;
use std::sync::Arc;

View File

@@ -6,7 +6,8 @@ use futures_util::Stream;
use items_2::channelevents::ChannelStatus;
use items_2::channelevents::ChannelStatusEvent;
use netpod::log::*;
use netpod::NanoRange;
use netpod::range::evrange::NanoRange;
use netpod::range::evrange::SeriesRange;
use netpod::CONNECTION_STATUS_DIV;
use scylla::Session as ScySession;
use std::collections::VecDeque;

View File

@@ -10,9 +10,9 @@ use items_0::streamitem::StatsItem;
use items_0::streamitem::StreamItem;
use items_0::WithLen;
use netpod::log::*;
use netpod::range::evrange::SeriesRange;
use netpod::BinnedRangeEnum;
use netpod::DiskStats;
use netpod::SeriesRange;
use std::fmt;
use std::time::Duration;
use std::time::Instant;

View File

@@ -14,11 +14,11 @@ use items_0::WithLen;
use items_2::eventfull::EventFull;
use netpod::histo::HistoLog2;
use netpod::log::*;
use netpod::range::evrange::NanoRange;
use netpod::timeunits::SEC;
use netpod::ByteSize;
use netpod::ChannelConfig;
use netpod::EventDataReadStats;
use netpod::NanoRange;
use netpod::ScalarType;
use netpod::Shape;
use parse::channelconfig::CompressionMethod;

View File

@@ -8,7 +8,7 @@ use items_0::streamitem::StreamItem;
use items_0::MergeError;
use items_2::merger::Mergeable;
use netpod::log::*;
use netpod::NanoRange;
use netpod::range::evrange::NanoRange;
use netpod::RangeFilterStats;
use std::fmt;
use std::pin::Pin;