Commit fda0317b by dongshufeng

change dynmaic topo logic

parent 3c2f2ee7
...@@ -3,7 +3,7 @@ use std::collections::HashMap; ...@@ -3,7 +3,7 @@ use std::collections::HashMap;
use arrow_schema::{DataType, Field, Schema}; use arrow_schema::{DataType, Field, Schema};
use eig_domain::DataUnit; use eig_domain::DataUnit;
use mems::model::{get_df_from_in_plugin, get_meas_from_plugin_input, get_wasm_result, PluginInput, PluginOutput}; use mems::model::{get_df_from_in_plugin, get_meas_from_plugin_input, get_wasm_result, ModelType, PluginInput, PluginOutput};
use crate::read::{read_edges, read_points, read_terminals}; use crate::read::{read_edges, read_points, read_terminals};
mod read; mod read;
...@@ -142,7 +142,20 @@ pub unsafe fn run(ptr: i32, len: u32) -> u64 { ...@@ -142,7 +142,20 @@ pub unsafe fn run(ptr: i32, len: u32) -> u64 {
cn_tn.insert(cn2, tn); cn_tn.insert(cn2, tn);
} }
} }
// get outgoing edges
let mut outgoing = vec![];
for model_input in &input.model {
match model_input {
ModelType::Outgoing(edge_name) => {
outgoing = edge_name.clone();
}
_ => {}
}
}
let mut csv_bytes = Vec::with_capacity(2);
let mut schema = Vec::with_capacity(2);
if outgoing.is_empty() || outgoing.contains(&DYN_TOPO_DF_NAME.to_string()) ||
(!outgoing.contains(&DYN_TOPO_DF_NAME.to_string()) && !outgoing.contains(&DEV_TOPO_DF_NAME.to_string())) {
// build topology // build topology
let mut topo_csv = String::from("cn,tn\n"); let mut topo_csv = String::from("cn,tn\n");
for (cn, tn) in &cn_tn { for (cn, tn) in &cn_tn {
...@@ -153,6 +166,10 @@ pub unsafe fn run(ptr: i32, len: u32) -> u64 { ...@@ -153,6 +166,10 @@ pub unsafe fn run(ptr: i32, len: u32) -> u64 {
Field::new("cn", DataType::UInt64, false), Field::new("cn", DataType::UInt64, false),
Field::new("tn", DataType::UInt64, false), Field::new("tn", DataType::UInt64, false),
]); ]);
csv_bytes.push((DYN_TOPO_DF_NAME.to_string(), topo_csv.into_bytes()));
schema.push(topo_schema);
}
if outgoing.contains(&DEV_TOPO_DF_NAME.to_string()) {
// build dev connection // build dev connection
let mut dev_csv = String::from("terminal,cn,tn,dev\n"); let mut dev_csv = String::from("terminal,cn,tn,dev\n");
for (terminal, dev) in terminal_dev { for (terminal, dev) in terminal_dev {
...@@ -172,11 +189,12 @@ pub unsafe fn run(ptr: i32, len: u32) -> u64 { ...@@ -172,11 +189,12 @@ pub unsafe fn run(ptr: i32, len: u32) -> u64 {
Field::new("tn", DataType::UInt64, false), Field::new("tn", DataType::UInt64, false),
Field::new("dev", DataType::UInt64, false), Field::new("dev", DataType::UInt64, false),
]); ]);
let csv_bytes = vec![(DYN_TOPO_DF_NAME.to_string(), topo_csv.into_bytes()), csv_bytes.push((DEV_TOPO_DF_NAME.to_string(), dev_csv.into_bytes()));
(DEV_TOPO_DF_NAME.to_string(), dev_csv.into_bytes())]; schema.push(dev_schema);
}
let output = PluginOutput { let output = PluginOutput {
error_msg: None, error_msg: None,
schema: Some(vec![topo_schema, dev_schema]), schema: Some(schema),
csv_bytes, csv_bytes,
}; };
get_wasm_result(output) get_wasm_result(output)
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论