Skip to content

Commit 55382d0

Browse files
committed
Serve experiment config and results from the API.
1 parent 2cbe8d8 commit 55382d0

File tree

3 files changed

+49
-12
lines changed

3 files changed

+49
-12
lines changed

src/report.rs

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ fn results_file(dest: &Path) -> PathBuf {
1313
}
1414

1515
#[derive(Serialize, Deserialize)]
16-
struct TestResults {
16+
pub struct TestResults {
1717
crates: Vec<CrateResult>,
1818
}
1919

@@ -40,13 +40,16 @@ struct BuildTestResult {
4040
log: String,
4141
}
4242

43-
fn generate_report(ex: &ex::Experiment, dest: &Path) -> Result<TestResults> {
43+
44+
pub fn generate_report(ex: &ex::Experiment, dest: Option<&Path>) -> Result<TestResults> {
4445
let db = FileDB::for_experiment(ex);
4546
assert_eq!(ex.toolchains.len(), 2);
4647

47-
fs::create_dir_all(dest)?;
48-
let json = serde_json::to_string(&ex)?;
49-
file::write_string(&dest.join("config.json"), &json)?;
48+
if let Some(dest) = dest {
49+
fs::create_dir_all(dest)?;
50+
let json = serde_json::to_string(&ex)?;
51+
file::write_string(&dest.join("config.json"), &json)?;
52+
}
5053

5154
let res = ex::ex_crates_and_dirs(ex)?
5255
.into_iter()
@@ -59,13 +62,15 @@ fn generate_report(ex: &ex::Experiment, dest: &Path) -> Result<TestResults> {
5962
let res = writer.load_test_result()?;
6063
// If there was no test result return an error
6164
let res = res.ok_or_else(|| Error::from("no result"))?;
62-
let mut result_log = writer.read_log()?;
6365

6466
let rel_log = writer.result_path_fragement();
6567

66-
// TODO: Seperate out writting log files so that they can
67-
// be served via HTTP directly instead.
68-
write_log_file(dest, &rel_log, &mut result_log)?;
68+
if let Some(dest) = dest {
69+
let mut result_log = writer.read_log()?;
70+
// TODO: Seperate out writting log files so that they can
71+
// be served via HTTP directly instead.
72+
write_log_file(dest, &rel_log, &mut result_log)?;
73+
}
6974

7075
Ok(BuildTestResult {
7176
res: res,
@@ -93,7 +98,7 @@ fn generate_report(ex: &ex::Experiment, dest: &Path) -> Result<TestResults> {
9398
pub fn gen(ex_name: &str, dest: &Path) -> Result<()> {
9499
let ex = ex::Experiment::load(ex_name)?;
95100

96-
let res = generate_report(&ex, dest)?;
101+
let res = generate_report(&ex, Some(dest))?;
97102
let json = serde_json::to_string(&res)?;
98103

99104
info!("writing results to {}", results_file(dest).display());

src/server/api.rs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,27 @@ pub mod post {
3636
Response { out: format!("Got {}!", post.input) }
3737
}
3838
}
39+
40+
pub mod ex_report {
41+
use ex;
42+
use report::{TestResults, generate_report};
43+
use server::{Data, Params};
44+
45+
#[cfg_attr(feature = "cargo-clippy", allow(needless_pass_by_value))]
46+
pub fn handler(_data: &Data, params: Params) -> TestResults {
47+
let ex_name = params.find("experiment").unwrap();
48+
let ex = ex::Experiment::load(ex_name).unwrap();
49+
generate_report(&ex, None).unwrap()
50+
}
51+
}
52+
53+
pub mod ex_config {
54+
use ex;
55+
use server::{Data, Params};
56+
57+
#[cfg_attr(feature = "cargo-clippy", allow(needless_pass_by_value))]
58+
pub fn handler(_data: &Data, params: Params) -> ex::Experiment {
59+
let ex_name = params.find("experiment").unwrap();
60+
ex::Experiment::load(ex_name).unwrap()
61+
}
62+
}

src/server/mod.rs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,10 @@ impl Server {
6060

6161
fn handle_post<F, D, S>(&self,
6262
req: Request,
63-
_params: Params,
63+
params: Params,
6464
handler: F)
6565
-> <Server as Service>::Future
66-
where F: FnOnce(D, &Data) -> S + Send + 'static,
66+
where F: FnOnce(D, &Data, Params) -> S + Send + 'static,
6767
D: DeserializeOwned,
6868
S: Serialize
6969
{
@@ -145,6 +145,14 @@ pub fn start(data: Data) {
145145
let mut router = Router::<Handler>::new();
146146
route!(router, "/api/get", handle_get, api::get::handler);
147147
route!(router, "/api/post", handle_post, api::post::handler);
148+
route!(router,
149+
"/api/ex/:experiment/results",
150+
handle_get,
151+
api::ex_report::handler);
152+
route!(router,
153+
"/api/ex/:experiment/config",
154+
handle_get,
155+
api::ex_config::handler);
148156
route!(router,
149157
"/static/report.html",
150158
handle_static,

0 commit comments

Comments
 (0)