Browse Source

Merge pull request #115 from dora-rs/fix-graph

Create dataflow html file in current directory
tags/v0.0.0-test-pr-120
Philipp Oppermann GitHub 3 years ago
parent
commit
eff266cd29
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 53 additions and 27 deletions
  1. +51
    -1
      binaries/cli/src/graph/mod.rs
  2. +2
    -26
      binaries/cli/src/main.rs

+ 51
- 1
binaries/cli/src/graph/mod.rs View File

@@ -1,10 +1,60 @@
use std::{fs, path::Path};
use std::{
fs::{self, File},
io::Write,
path::Path,
};

use dora_core::descriptor::Descriptor;
use eyre::Context;

const MERMAID_TEMPLATE: &str = include_str!("mermaid-template.html");

pub(crate) fn create(dataflow: std::path::PathBuf, mermaid: bool, open: bool) -> eyre::Result<()> {
if mermaid {
let visualized = visualize_as_mermaid(&dataflow)?;
println!("{visualized}");
println!(
"Paste the above output on https://mermaid.live/ or in a \
```mermaid code block on GitHub to display it."
);
} else {
let html = visualize_as_html(&dataflow)?;

let working_dir = std::env::current_dir().wrap_err("failed to get current working dir")?;
let graph_filename = match dataflow.file_stem().and_then(|n| n.to_str()) {
Some(name) => format!("{name}-graph"),
None => "graph".into(),
};
let mut extra = 0;
let path = loop {
let adjusted_file_name = if extra == 0 {
format!("{graph_filename}.html")
} else {
format!("{graph_filename}.{extra}.html")
};
let path = working_dir.join(&adjusted_file_name);
if path.exists() {
extra += 1;
} else {
break path;
}
};

let mut file = File::create(&path).context("failed to create graph HTML file")?;
file.write_all(html.as_bytes())?;

println!(
"View graph by opening the following in your browser:\n file://{}",
path.display()
);

if open {
webbrowser::open(path.as_os_str().to_str().unwrap())?;
}
}
Ok(())
}

pub fn visualize_as_html(dataflow: &Path) -> eyre::Result<String> {
let mermaid = visualize_as_mermaid(dataflow)?;
Ok(MERMAID_TEMPLATE.replacen("____insert____", &mermaid, 1))


+ 2
- 26
binaries/cli/src/main.rs View File

@@ -4,8 +4,7 @@ use dora_core::topics::{
ZENOH_CONTROL_START, ZENOH_CONTROL_STOP,
};
use eyre::{bail, eyre, Context};
use std::{io::Write, ops::Deref, path::PathBuf, sync::Arc};
use tempfile::NamedTempFile;
use std::{ops::Deref, path::PathBuf, sync::Arc};
use zenoh::{
prelude::{Receiver, Selector, SplitBuffer},
sync::ZFuture,
@@ -99,30 +98,7 @@ fn main() -> eyre::Result<()> {
mermaid,
open,
} => {
if mermaid {
let visualized = graph::visualize_as_mermaid(&dataflow)?;
println!("{visualized}");
println!(
"Paste the above output on https://mermaid.live/ or in a \
```mermaid code block on GitHub to display it."
);
} else {
let html = graph::visualize_as_html(&dataflow)?;
let mut file = NamedTempFile::new().context("failed to create temp file")?;
file.as_file_mut().write_all(html.as_bytes())?;

let path = file.path().to_owned();
file.keep()?;

println!(
"View graph by opening the following in your browser:\n file://{}",
path.display()
);

if open {
webbrowser::open(path.as_os_str().to_str().unwrap())?;
}
}
graph::create(dataflow, mermaid, open)?;
}
Command::Build { dataflow } => {
build::build(&dataflow)?;


Loading…
Cancel
Save