From 5bb2ebc7ebc4407f605e9f6c9595de1e5f621477 Mon Sep 17 00:00:00 2001 From: monsterkrampe Date: Mon, 19 Feb 2024 10:25:35 +0100 Subject: [PATCH] Add dummy endpoints for PMC-VIS --- server/src/main.rs | 12 +- server/src/pmc_vis.rs | 838 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 849 insertions(+), 1 deletion(-) create mode 100644 server/src/pmc_vis.rs diff --git a/server/src/main.rs b/server/src/main.rs index 93615b6..44342c3 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -19,6 +19,7 @@ mod adf; mod config; mod double_labeled_graph; mod user; +mod pmc_vis; use adf::{ add_adf_problem, delete_adf_problem, get_adf_problem, get_adf_problems_for_user, @@ -28,6 +29,9 @@ use config::{AppState, ASSET_DIRECTORY, COOKIE_DURATION}; use user::{ create_username_index, delete_account, login, logout, register, update_user, user_info, }; +use pmc_vis::{ + pmc_vis_get_initial, pmc_vis_get_outgoing, +}; #[actix_web::main] async fn main() -> std::io::Result<()> { @@ -58,6 +62,7 @@ async fn main() -> std::io::Result<()> { #[cfg(feature = "cors_for_local_development")] let cors = Cors::default() .allowed_origin("http://localhost:1234") + .allowed_origin("http://localhost:3000") .allow_any_method() .allow_any_header() .supports_credentials() @@ -97,7 +102,12 @@ async fn main() -> std::io::Result<()> { .service(delete_adf_problem) .service(get_adf_problems_for_user), ) - // this mus be last to not override anything + .service( + web::scope("/pmc-vis") + .service(pmc_vis_get_initial) + .service(pmc_vis_get_outgoing), + ) + // this must be last to not override anything .service( fs::Files::new("/", ASSET_DIRECTORY) .index_file("index.html") diff --git a/server/src/pmc_vis.rs b/server/src/pmc_vis.rs new file mode 100644 index 0000000..eaeae45 --- /dev/null +++ b/server/src/pmc_vis.rs @@ -0,0 +1,838 @@ +use actix_identity::Identity; +use actix_web::{get, web, HttpResponse, Responder, http::header}; +use serde::Deserialize; +use crate::config::AppState; + + +const DUMMY_INITIAL: &str = r#"{ + "nodes": [ + { + "id": "0", + "name": "0;0;0;0", + "type": "s", + "details": { + "Variable Values": { + "game_sum": { + "value": 0, + "type": "numbers" + }, + "phase": { + "value": 0, + "type": "numbers" + }, + "rounds": { + "value": 0, + "type": "numbers" + }, + "sum": { + "value": 0, + "type": "numbers" + } + }, + "Reward Structures": { + "points": { + "value": 0.0, + "type": "numbers" + }, + "rolls": { + "value": 0.0, + "type": "numbers" + } + }, + "Model Checking Results": { + "Assurence": { + "value": 1.0, + "type": "numbers" + }, + "Loser": { + "value": 0.0, + "type": "numbers" + }, + "Winner": { + "value": 0.5459603775108021, + "type": "numbers" + } + }, + "Atomic Propositions": { + "deadlock": { + "value": false, + "type": "boolean" + }, + "end": { + "value": false, + "type": "boolean" + }, + "init": { + "value": true, + "icon": true, + "identifier": "fa-solid fa-arrow-right", + "type": "boolean" + }, + "lost": { + "value": false, + "type": "boolean" + }, + "won": { + "value": false, + "type": "boolean" + } + } + }, + "viewDetails": { + "cluster identifier": null + } + } + ], + "edges": [], + "info": { + "Atomic Propositions": { + "init": { + "identifier": "fa-solid fa-arrow-right", + "icon": true + }, + "lost": { + "identifier": "l0", + "icon": false + }, + "won": { + "identifier": "w0", + "icon": false + }, + "end": { + "identifier": "e0", + "icon": false + }, + "deadlock": { + "identifier": "fa-solid fa-rotate-right", + "icon": true + } + }, + "ID": "Pig2", + "Model Checking Results": { + "Assurence": "1.0 (exact floating point)", + "Loser": "0.0 (exact floating point)", + "Winner": "0.5459603775108021 (+/- 4.479762978110217E-6 estimated; rel err 8.205289545982817E-6)" + }, + "Scheduler": { + "Assurence": 0, + "Loser": 2, + "Winner": 1 + } + }, + "scheduler": [ + "Assurence", + "Winner", + "Loser" + ] +}"#; + +const DUMMY_OUTGOING : &str = r#"{ + "nodes": [ + { + "id": "0", + "name": "0;0;0;0", + "type": "s", + "details": { + "Variable Values": { + "game_sum": { + "value": 0, + "type": "numbers" + }, + "phase": { + "value": 0, + "type": "numbers" + }, + "rounds": { + "value": 0, + "type": "numbers" + }, + "sum": { + "value": 0, + "type": "numbers" + } + }, + "Reward Structures": { + "points": { + "value": 0.0, + "type": "numbers" + }, + "rolls": { + "value": 0.0, + "type": "numbers" + } + }, + "Model Checking Results": { + "Assurence": { + "value": 1.0, + "type": "numbers" + }, + "Loser": { + "value": 0.0, + "type": "numbers" + }, + "Winner": { + "value": 0.5459603775108021, + "type": "numbers" + } + }, + "Atomic Propositions": { + "deadlock": { + "value": false, + "type": "boolean" + }, + "end": { + "value": false, + "type": "boolean" + }, + "init": { + "value": true, + "icon": true, + "identifier": "fa-solid fa-arrow-right", + "type": "boolean" + }, + "lost": { + "value": false, + "type": "boolean" + }, + "won": { + "value": false, + "type": "boolean" + } + } + }, + "viewDetails": { + "cluster identifier": null + } + }, + { + "id": "1", + "name": "0;0;0;2", + "type": "s", + "details": { + "Variable Values": { + "game_sum": { + "value": 0, + "type": "numbers" + }, + "phase": { + "value": 2, + "type": "numbers" + }, + "rounds": { + "value": 0, + "type": "numbers" + }, + "sum": { + "value": 0, + "type": "numbers" + } + }, + "Reward Structures": { + "points": { + "value": 0.0, + "type": "numbers" + }, + "rolls": { + "value": 0.0, + "type": "numbers" + } + }, + "Model Checking Results": { + "Assurence": { + "value": 1.0, + "type": "numbers" + }, + "Loser": { + "value": 0.0, + "type": "numbers" + }, + "Winner": { + "value": 0.4200261401421442, + "type": "numbers" + } + }, + "Atomic Propositions": { + "deadlock": { + "value": false, + "type": "boolean" + }, + "end": { + "value": false, + "type": "boolean" + }, + "init": { + "value": false, + "type": "boolean" + }, + "lost": { + "value": false, + "type": "boolean" + }, + "won": { + "value": false, + "type": "boolean" + } + } + }, + "viewDetails": { + "cluster identifier": null + } + }, + { + "id": "3", + "name": "0;0;2;1", + "type": "s", + "details": { + "Variable Values": { + "game_sum": { + "value": 0, + "type": "numbers" + }, + "phase": { + "value": 1, + "type": "numbers" + }, + "rounds": { + "value": 0, + "type": "numbers" + }, + "sum": { + "value": 2, + "type": "numbers" + } + }, + "Reward Structures": { + "points": { + "value": 0.0, + "type": "numbers" + }, + "rolls": { + "value": 0.0, + "type": "numbers" + } + }, + "Model Checking Results": { + "Assurence": { + "value": 1.0, + "type": "numbers" + }, + "Loser": { + "value": 0.0, + "type": "numbers" + }, + "Winner": { + "value": 0.5578419259350655, + "type": "numbers" + } + }, + "Atomic Propositions": { + "deadlock": { + "value": false, + "type": "boolean" + }, + "end": { + "value": false, + "type": "boolean" + }, + "init": { + "value": false, + "type": "boolean" + }, + "lost": { + "value": false, + "type": "boolean" + }, + "won": { + "value": false, + "type": "boolean" + } + } + }, + "viewDetails": { + "cluster identifier": null + } + }, + { + "id": "6", + "name": "0;0;3;1", + "type": "s", + "details": { + "Variable Values": { + "game_sum": { + "value": 0, + "type": "numbers" + }, + "phase": { + "value": 1, + "type": "numbers" + }, + "rounds": { + "value": 0, + "type": "numbers" + }, + "sum": { + "value": 3, + "type": "numbers" + } + }, + "Reward Structures": { + "points": { + "value": 0.0, + "type": "numbers" + }, + "rolls": { + "value": 0.0, + "type": "numbers" + } + }, + "Model Checking Results": { + "Assurence": { + "value": 1.0, + "type": "numbers" + }, + "Loser": { + "value": 0.0, + "type": "numbers" + }, + "Winner": { + "value": 0.5641941966513407, + "type": "numbers" + } + }, + "Atomic Propositions": { + "deadlock": { + "value": false, + "type": "boolean" + }, + "end": { + "value": false, + "type": "boolean" + }, + "init": { + "value": false, + "type": "boolean" + }, + "lost": { + "value": false, + "type": "boolean" + }, + "won": { + "value": false, + "type": "boolean" + } + } + }, + "viewDetails": { + "cluster identifier": null + } + }, + { + "id": "9", + "name": "0;0;4;1", + "type": "s", + "details": { + "Variable Values": { + "game_sum": { + "value": 0, + "type": "numbers" + }, + "phase": { + "value": 1, + "type": "numbers" + }, + "rounds": { + "value": 0, + "type": "numbers" + }, + "sum": { + "value": 4, + "type": "numbers" + } + }, + "Reward Structures": { + "points": { + "value": 0.0, + "type": "numbers" + }, + "rolls": { + "value": 0.0, + "type": "numbers" + } + }, + "Model Checking Results": { + "Assurence": { + "value": 1.0, + "type": "numbers" + }, + "Loser": { + "value": 0.0, + "type": "numbers" + }, + "Winner": { + "value": 0.5708391005779379, + "type": "numbers" + } + }, + "Atomic Propositions": { + "deadlock": { + "value": false, + "type": "boolean" + }, + "end": { + "value": false, + "type": "boolean" + }, + "init": { + "value": false, + "type": "boolean" + }, + "lost": { + "value": false, + "type": "boolean" + }, + "won": { + "value": false, + "type": "boolean" + } + } + }, + "viewDetails": { + "cluster identifier": null + } + }, + { + "id": "12", + "name": "0;0;5;1", + "type": "s", + "details": { + "Variable Values": { + "game_sum": { + "value": 0, + "type": "numbers" + }, + "phase": { + "value": 1, + "type": "numbers" + }, + "rounds": { + "value": 0, + "type": "numbers" + }, + "sum": { + "value": 5, + "type": "numbers" + } + }, + "Reward Structures": { + "points": { + "value": 0.0, + "type": "numbers" + }, + "rolls": { + "value": 0.0, + "type": "numbers" + } + }, + "Model Checking Results": { + "Assurence": { + "value": 1.0, + "type": "numbers" + }, + "Loser": { + "value": 0.0, + "type": "numbers" + }, + "Winner": { + "value": 0.577792783058856, + "type": "numbers" + } + }, + "Atomic Propositions": { + "deadlock": { + "value": false, + "type": "boolean" + }, + "end": { + "value": false, + "type": "boolean" + }, + "init": { + "value": false, + "type": "boolean" + }, + "lost": { + "value": false, + "type": "boolean" + }, + "won": { + "value": false, + "type": "boolean" + } + } + }, + "viewDetails": { + "cluster identifier": null + } + }, + { + "id": "15", + "name": "0;0;6;1", + "type": "s", + "details": { + "Variable Values": { + "game_sum": { + "value": 0, + "type": "numbers" + }, + "phase": { + "value": 1, + "type": "numbers" + }, + "rounds": { + "value": 0, + "type": "numbers" + }, + "sum": { + "value": 6, + "type": "numbers" + } + }, + "Reward Structures": { + "points": { + "value": 0.0, + "type": "numbers" + }, + "rolls": { + "value": 0.0, + "type": "numbers" + } + }, + "Model Checking Results": { + "Assurence": { + "value": 1.0, + "type": "numbers" + }, + "Loser": { + "value": 0.0, + "type": "numbers" + }, + "Winner": { + "value": 0.5850696982205607, + "type": "numbers" + } + }, + "Atomic Propositions": { + "deadlock": { + "value": false, + "type": "boolean" + }, + "end": { + "value": false, + "type": "boolean" + }, + "init": { + "value": false, + "type": "boolean" + }, + "lost": { + "value": false, + "type": "boolean" + }, + "won": { + "value": false, + "type": "boolean" + } + } + }, + "viewDetails": { + "cluster identifier": null + } + }, + { + "id": "t_6624", + "scheduler": { + "Assurence": 1.0, + "Loser": 1.0, + "Winner": 1.0 + }, + "name": null, + "type": "t", + "details": { + "Scheduler": { + "Assurence": { + "value": 1.0, + "type": "numbers" + }, + "Loser": { + "value": 1.0, + "type": "numbers" + }, + "Winner": { + "value": 1.0, + "type": "numbers" + } + }, + "Variable Values": { + "action": { + "value": "[roll]", + "type": "numbers" + }, + "origin": { + "value": "0", + "type": "numbers" + }, + "outcome distribution": { + "value": { + "1": 0.16666666666666666, + "12": 0.16666666666666666, + "3": 0.16666666666666666, + "15": 0.16666666666666666, + "6": 0.16666666666666666, + "9": 0.16666666666666666 + }, + "type": "numbers" + } + }, + "Reward Structures": { + "points": { + "value": 0.0, + "type": "numbers" + }, + "rolls": { + "value": 0.0, + "type": "numbers" + } + }, + "Model Checking Results": { + "Assurence": { + "value": 0.9999999999999999, + "type": "numbers" + }, + "Loser": { + "value": 0.0, + "type": "numbers" + }, + "Winner": { + "value": 0.5459606407643175, + "type": "numbers" + } + } + }, + "viewDetails": { + "cluster identifier": [] + } + } + ], + "edges": [ + { + "source": "0", + "target": "t_6624", + "label": "[roll]" + }, + { + "source": "t_6624", + "target": "1", + "label": "0.16666666666666666" + }, + { + "source": "t_6624", + "target": "12", + "label": "0.16666666666666666" + }, + { + "source": "t_6624", + "target": "3", + "label": "0.16666666666666666" + }, + { + "source": "t_6624", + "target": "15", + "label": "0.16666666666666666" + }, + { + "source": "t_6624", + "target": "6", + "label": "0.16666666666666666" + }, + { + "source": "t_6624", + "target": "9", + "label": "0.16666666666666666" + } + ], + "info": { + "Atomic Propositions": { + "init": { + "identifier": "fa-solid fa-arrow-right", + "icon": true + }, + "lost": { + "identifier": "l0", + "icon": false + }, + "won": { + "identifier": "w0", + "icon": false + }, + "end": { + "identifier": "e0", + "icon": false + }, + "deadlock": { + "identifier": "fa-solid fa-rotate-right", + "icon": true + } + }, + "ID": "Pig2", + "Model Checking Results": { + "Assurence": "1.0 (exact floating point)", + "Loser": "0.0 (exact floating point)", + "Winner": "0.5459603775108021 (+/- 4.479762978110217E-6 estimated; rel err 8.205289545982817E-6)" + }, + "Scheduler": { + "Assurence": 0, + "Loser": 2, + "Winner": 1 + } + }, + "scheduler": [ + "Assurence", + "Winner", + "Loser" + ] +}"#; + +#[get("/{problem_id}/initial")] +async fn pmc_vis_get_initial( + _app_state: web::Data, + _identity: Option, + path: web::Path, +) -> impl Responder { + let _problem_id = path.into_inner(); + + HttpResponse::Ok() + .append_header(header::ContentType::json()) + .body(DUMMY_INITIAL) + // HttpResponse::Ok().json(...) +} + +#[derive(Deserialize)] +struct OutgoingQuery { + id: String, +} + +#[get("/{problem_id}/outgoing")] +async fn pmc_vis_get_outgoing( + _app_state: web::Data, + _identity: Option, + path: web::Path, + query: web::Query, +) -> impl Responder { + let _problem_id = path.into_inner(); + let _node_id = &query.id; + + HttpResponse::Ok() + .append_header(header::ContentType::json()) + .body(DUMMY_OUTGOING) + // HttpResponse::Ok().json(...) +}