Status events with human readable time, bool set events
This commit is contained in:
@@ -10,9 +10,12 @@ use items_0::AsAnyRef;
|
||||
use netpod::log::*;
|
||||
use netpod::BinnedRange;
|
||||
use netpod::NanoRange;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use serde::Deserialize;
|
||||
use serde::Serialize;
|
||||
use std::any::Any;
|
||||
use std::fmt;
|
||||
use std::time::Duration;
|
||||
use std::time::SystemTime;
|
||||
|
||||
// TODO maybe rename to ChannelStatus?
|
||||
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
|
||||
@@ -25,8 +28,6 @@ impl ConnStatus {
|
||||
pub fn from_ca_ingest_status_kind(k: u32) -> Self {
|
||||
match k {
|
||||
1 => Self::Connect,
|
||||
2 => Self::Disconnect,
|
||||
3 => Self::Disconnect,
|
||||
_ => Self::Disconnect,
|
||||
}
|
||||
}
|
||||
@@ -35,12 +36,47 @@ impl ConnStatus {
|
||||
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
|
||||
pub struct ConnStatusEvent {
|
||||
pub ts: u64,
|
||||
#[serde(with = "humantime_serde")]
|
||||
//pub datetime: chrono::DateTime<chrono::Utc>,
|
||||
pub datetime: SystemTime,
|
||||
pub status: ConnStatus,
|
||||
}
|
||||
|
||||
impl ConnStatusEvent {
|
||||
pub fn new(ts: u64, status: ConnStatus) -> Self {
|
||||
Self { ts, status }
|
||||
let datetime = SystemTime::UNIX_EPOCH + Duration::from_millis(ts / 1000000);
|
||||
Self { ts, datetime, status }
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
|
||||
pub enum ChannelStatus {
|
||||
Connect,
|
||||
Disconnect,
|
||||
}
|
||||
|
||||
impl ChannelStatus {
|
||||
pub fn from_ca_ingest_status_kind(k: u32) -> Self {
|
||||
match k {
|
||||
1 => Self::Connect,
|
||||
_ => Self::Disconnect,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
|
||||
pub struct ChannelStatusEvent {
|
||||
pub ts: u64,
|
||||
#[serde(with = "humantime_serde")]
|
||||
//pub datetime: chrono::DateTime<chrono::Utc>,
|
||||
pub datetime: SystemTime,
|
||||
pub status: ChannelStatus,
|
||||
}
|
||||
|
||||
impl ChannelStatusEvent {
|
||||
pub fn new(ts: u64, status: ChannelStatus) -> Self {
|
||||
let datetime = SystemTime::UNIX_EPOCH + Duration::from_millis(ts / 1000000);
|
||||
Self { ts, datetime, status }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -88,6 +124,7 @@ mod serde_channel_events {
|
||||
use super::{ChannelEvents, Events};
|
||||
use crate::channelevents::ConnStatusEvent;
|
||||
use crate::eventsdim0::EventsDim0;
|
||||
use crate::eventsdim1::EventsDim1;
|
||||
use items_0::subfr::SubFrId;
|
||||
use serde::de::{self, EnumAccess, VariantAccess, Visitor};
|
||||
use serde::ser::SerializeSeq;
|
||||
@@ -174,6 +211,22 @@ mod serde_channel_events {
|
||||
let obj: EventsDim0<f64> = seq.next_element()?.ok_or(de::Error::missing_field("[2] obj"))?;
|
||||
Ok(EvBox(Box::new(obj)))
|
||||
}
|
||||
bool::SUB => {
|
||||
let obj: EventsDim0<bool> = seq.next_element()?.ok_or(de::Error::missing_field("[2] obj"))?;
|
||||
Ok(EvBox(Box::new(obj)))
|
||||
}
|
||||
_ => Err(de::Error::custom(&format!("unknown nty {e1}"))),
|
||||
}
|
||||
} else if e0 == EventsDim1::<u8>::serde_id() {
|
||||
match e1 {
|
||||
f32::SUB => {
|
||||
let obj: EventsDim1<f32> = seq.next_element()?.ok_or(de::Error::missing_field("[2] obj"))?;
|
||||
Ok(EvBox(Box::new(obj)))
|
||||
}
|
||||
bool::SUB => {
|
||||
let obj: EventsDim1<bool> = seq.next_element()?.ok_or(de::Error::missing_field("[2] obj"))?;
|
||||
Ok(EvBox(Box::new(obj)))
|
||||
}
|
||||
_ => Err(de::Error::custom(&format!("unknown nty {e1}"))),
|
||||
}
|
||||
} else {
|
||||
@@ -324,7 +377,9 @@ mod test_channel_events_serde {
|
||||
use bincode::DefaultOptions;
|
||||
use items_0::bincode;
|
||||
use items_0::Empty;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use serde::Deserialize;
|
||||
use serde::Serialize;
|
||||
use std::time::SystemTime;
|
||||
|
||||
#[test]
|
||||
fn channel_events() {
|
||||
@@ -382,6 +437,7 @@ mod test_channel_events_serde {
|
||||
evs.push(12, 3, 3.2f32);
|
||||
let status = ConnStatusEvent {
|
||||
ts: 567,
|
||||
datetime: SystemTime::UNIX_EPOCH,
|
||||
status: crate::channelevents::ConnStatus::Connect,
|
||||
};
|
||||
let item = ChannelEvents::Status(status);
|
||||
|
||||
24
items_2/src/databuffereventblobs.rs
Normal file
24
items_2/src/databuffereventblobs.rs
Normal file
@@ -0,0 +1,24 @@
|
||||
use items::FrameType;
|
||||
use items::FrameTypeInnerStatic;
|
||||
use serde::Serialize;
|
||||
|
||||
pub struct DatabufferEventBlob {}
|
||||
|
||||
impl FrameTypeInnerStatic for DatabufferEventBlob {
|
||||
const FRAME_TYPE_ID: u32 = items::DATABUFFER_EVENT_BLOB_FRAME_TYPE_ID;
|
||||
}
|
||||
|
||||
impl FrameType for DatabufferEventBlob {
|
||||
fn frame_type_id(&self) -> u32 {
|
||||
<Self as FrameTypeInnerStatic>::FRAME_TYPE_ID
|
||||
}
|
||||
}
|
||||
|
||||
impl Serialize for DatabufferEventBlob {
|
||||
fn serialize<S>(&self, _serializer: S) -> Result<S::Ok, S::Error>
|
||||
where
|
||||
S: serde::Serializer,
|
||||
{
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
1059
items_2/src/eventsdim1.rs
Normal file
1059
items_2/src/eventsdim1.rs
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,7 +1,9 @@
|
||||
pub mod binsdim0;
|
||||
pub mod binsxbindim0;
|
||||
pub mod channelevents;
|
||||
pub mod databuffereventblobs;
|
||||
pub mod eventsdim0;
|
||||
pub mod eventsdim1;
|
||||
pub mod eventsxbindim0;
|
||||
pub mod merger;
|
||||
pub mod merger_cev;
|
||||
@@ -222,23 +224,47 @@ pub fn empty_events_dyn_2(scalar_type: &ScalarType, shape: &Shape, agg_kind: &Ag
|
||||
I64 => Box::new(K::<i64>::empty()),
|
||||
F32 => Box::new(K::<f32>::empty()),
|
||||
F64 => Box::new(K::<f64>::empty()),
|
||||
BOOL => Box::new(K::<bool>::empty()),
|
||||
_ => {
|
||||
error!("TODO empty_events_dyn {scalar_type:?} {shape:?} {agg_kind:?}");
|
||||
error!("TODO empty_events_dyn_2 {scalar_type:?} {shape:?} {agg_kind:?}");
|
||||
err::todoval()
|
||||
}
|
||||
}
|
||||
}
|
||||
_ => {
|
||||
error!("TODO empty_events_dyn {scalar_type:?} {shape:?} {agg_kind:?}");
|
||||
error!("TODO empty_events_dyn_2 {scalar_type:?} {shape:?} {agg_kind:?}");
|
||||
err::todoval()
|
||||
}
|
||||
},
|
||||
Shape::Wave(..) => match agg_kind {
|
||||
AggKind::Plain => {
|
||||
use ScalarType::*;
|
||||
type K<T> = eventsdim1::EventsDim1<T>;
|
||||
match scalar_type {
|
||||
U8 => Box::new(K::<u8>::empty()),
|
||||
U16 => Box::new(K::<u16>::empty()),
|
||||
U32 => Box::new(K::<u32>::empty()),
|
||||
U64 => Box::new(K::<u64>::empty()),
|
||||
I8 => Box::new(K::<i8>::empty()),
|
||||
I16 => Box::new(K::<i16>::empty()),
|
||||
I32 => Box::new(K::<i32>::empty()),
|
||||
I64 => Box::new(K::<i64>::empty()),
|
||||
F32 => Box::new(K::<f32>::empty()),
|
||||
F64 => Box::new(K::<f64>::empty()),
|
||||
BOOL => Box::new(K::<bool>::empty()),
|
||||
_ => {
|
||||
error!("TODO empty_events_dyn_2 {scalar_type:?} {shape:?} {agg_kind:?}");
|
||||
err::todoval()
|
||||
}
|
||||
}
|
||||
}
|
||||
_ => {
|
||||
error!("TODO empty_events_dyn_2 {scalar_type:?} {shape:?} {agg_kind:?}");
|
||||
err::todoval()
|
||||
}
|
||||
},
|
||||
Shape::Wave(..) => {
|
||||
error!("TODO empty_events_dyn {scalar_type:?} {shape:?} {agg_kind:?}");
|
||||
err::todoval()
|
||||
}
|
||||
Shape::Image(..) => {
|
||||
error!("TODO empty_events_dyn {scalar_type:?} {shape:?} {agg_kind:?}");
|
||||
error!("TODO empty_events_dyn_2 {scalar_type:?} {shape:?} {agg_kind:?}");
|
||||
err::todoval()
|
||||
}
|
||||
}
|
||||
@@ -273,10 +299,33 @@ pub fn empty_events_dyn(scalar_type: &ScalarType, shape: &Shape, agg_kind: &AggK
|
||||
err::todoval()
|
||||
}
|
||||
},
|
||||
Shape::Wave(..) => {
|
||||
error!("TODO empty_events_dyn {scalar_type:?} {shape:?} {agg_kind:?}");
|
||||
err::todoval()
|
||||
}
|
||||
Shape::Wave(..) => match agg_kind {
|
||||
AggKind::Plain => {
|
||||
use ScalarType::*;
|
||||
type K<T> = eventsdim1::EventsDim1<T>;
|
||||
match scalar_type {
|
||||
U8 => Box::new(K::<u8>::empty()),
|
||||
U16 => Box::new(K::<u16>::empty()),
|
||||
U32 => Box::new(K::<u32>::empty()),
|
||||
U64 => Box::new(K::<u64>::empty()),
|
||||
I8 => Box::new(K::<i8>::empty()),
|
||||
I16 => Box::new(K::<i16>::empty()),
|
||||
I32 => Box::new(K::<i32>::empty()),
|
||||
I64 => Box::new(K::<i64>::empty()),
|
||||
F32 => Box::new(K::<f32>::empty()),
|
||||
F64 => Box::new(K::<f64>::empty()),
|
||||
BOOL => Box::new(K::<bool>::empty()),
|
||||
_ => {
|
||||
error!("TODO empty_events_dyn {scalar_type:?} {shape:?} {agg_kind:?}");
|
||||
err::todoval()
|
||||
}
|
||||
}
|
||||
}
|
||||
_ => {
|
||||
error!("TODO empty_events_dyn {scalar_type:?} {shape:?} {agg_kind:?}");
|
||||
err::todoval()
|
||||
}
|
||||
},
|
||||
Shape::Image(..) => {
|
||||
error!("TODO empty_events_dyn {scalar_type:?} {shape:?} {agg_kind:?}");
|
||||
err::todoval()
|
||||
|
||||
@@ -237,6 +237,7 @@ fn merge03() {
|
||||
let inp2_events_a = {
|
||||
let ev = ConnStatusEvent {
|
||||
ts: 1199,
|
||||
datetime: std::time::SystemTime::UNIX_EPOCH,
|
||||
status: ConnStatus::Disconnect,
|
||||
};
|
||||
let item: Sitemty<ChannelEvents> = Ok(StreamItem::DataItem(RangeCompletableItem::Data(
|
||||
@@ -248,6 +249,7 @@ fn merge03() {
|
||||
let inp2_events_b = {
|
||||
let ev = ConnStatusEvent {
|
||||
ts: 1199,
|
||||
datetime: std::time::SystemTime::UNIX_EPOCH,
|
||||
status: ConnStatus::Disconnect,
|
||||
};
|
||||
let item: Sitemty<ChannelEvents> = Ok(StreamItem::DataItem(RangeCompletableItem::Data(
|
||||
|
||||
Reference in New Issue
Block a user