Skip to content

Commit 028e7c9

Browse files
Revert "Revert "Dan product left nav update"" (#1466)
1 parent d31b6f4 commit 028e7c9

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+1309
-806
lines changed

pgml-dashboard/src/api/cms.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1123,7 +1123,7 @@ This is the end of the markdown
11231123
}
11241124
}
11251125

1126-
// Ensure Docs render and ther are no unparsed gitbook compnents.
1126+
// Ensure Docs render and there are no unparsed gitbook compnents.
11271127
#[sqlx::test]
11281128
async fn render_guides_test() {
11291129
let client = Client::tracked(rocket().await).await.unwrap();
Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
use rocket::route::Route;
2+
use sailfish::TemplateOnce;
3+
4+
use crate::{
5+
guards::ConnectedCluster,
6+
responses::{Error, ResponseOk},
7+
};
8+
9+
use crate::templates::{components::NavLink, *};
10+
11+
use crate::models;
12+
use crate::templates;
13+
use crate::utils::tabs;
14+
use crate::utils::urls;
15+
16+
use std::collections::HashMap;
17+
18+
// Returns models page
19+
#[get("/models")]
20+
pub async fn deployment_models(cluster: ConnectedCluster<'_>) -> Result<ResponseOk, Error> {
21+
let mut layout = crate::templates::WebAppBase::new("Dashboard", &cluster.inner.context);
22+
layout.breadcrumbs(vec![NavLink::new("Models", &urls::deployment_models()).active()]);
23+
24+
let tabs = vec![tabs::Tab {
25+
name: "Models",
26+
content: ModelsTab {}.render_once().unwrap(),
27+
}];
28+
29+
let nav_tabs = tabs::Tabs::new(tabs, Some("Models"), Some("Models"))?;
30+
31+
Ok(ResponseOk(layout.render(templates::Dashboard { tabs: nav_tabs })))
32+
}
33+
34+
// Returns models page
35+
#[get("/models/<model_id>")]
36+
pub async fn model(cluster: ConnectedCluster<'_>, model_id: i64) -> Result<ResponseOk, Error> {
37+
let model = models::Model::get_by_id(cluster.pool(), model_id).await?;
38+
let project = models::Project::get_by_id(cluster.pool(), model.project_id).await?;
39+
40+
let mut layout = crate::templates::WebAppBase::new("Dashboard", &cluster.inner.context);
41+
layout.breadcrumbs(vec![
42+
NavLink::new("Models", &urls::deployment_models()),
43+
NavLink::new(&project.name, &urls::deployment_project_by_id(project.id)),
44+
NavLink::new(&model.algorithm, &urls::deployment_model_by_id(model.id)).active(),
45+
]);
46+
47+
let tabs = vec![tabs::Tab {
48+
name: "Model",
49+
content: ModelTab { model_id }.render_once().unwrap(),
50+
}];
51+
52+
let nav_tabs = tabs::Tabs::new(tabs, Some("Models"), Some("Models"))?;
53+
54+
Ok(ResponseOk(layout.render(templates::Dashboard { tabs: nav_tabs })))
55+
}
56+
57+
#[get("/models_turboframe")]
58+
pub async fn models_index(cluster: ConnectedCluster<'_>) -> Result<ResponseOk, Error> {
59+
let projects = models::Project::all(cluster.pool()).await?;
60+
let mut models = HashMap::new();
61+
// let mut max_scores = HashMap::new();
62+
// let mut min_scores = HashMap::new();
63+
64+
for project in &projects {
65+
let project_models = models::Model::get_by_project_id(cluster.pool(), project.id).await?;
66+
// let mut key_metrics = project_models
67+
// .iter()
68+
// .map(|m| m.key_metric(project).unwrap_or(0.))
69+
// .collect::<Vec<f64>>();
70+
// key_metrics.sort_by(|a, b| a.partial_cmp(b).unwrap());
71+
72+
// max_scores.insert(project.id, key_metrics.iter().last().unwrap_or(&0.).clone());
73+
// min_scores.insert(project.id, key_metrics.iter().next().unwrap_or(&0.).clone());
74+
75+
models.insert(project.id, project_models);
76+
}
77+
78+
Ok(ResponseOk(
79+
templates::Models {
80+
projects,
81+
models,
82+
// min_scores,
83+
// max_scores,
84+
}
85+
.render_once()
86+
.unwrap(),
87+
))
88+
}
89+
90+
#[get("/models_turboframe/<id>")]
91+
pub async fn models_get(cluster: ConnectedCluster<'_>, id: i64) -> Result<ResponseOk, Error> {
92+
let model = models::Model::get_by_id(cluster.pool(), id).await?;
93+
let snapshot = if let Some(snapshot_id) = model.snapshot_id {
94+
Some(models::Snapshot::get_by_id(cluster.pool(), snapshot_id).await?)
95+
} else {
96+
None
97+
};
98+
99+
let project = models::Project::get_by_id(cluster.pool(), model.project_id).await?;
100+
101+
Ok(ResponseOk(
102+
templates::Model {
103+
deployed: model.deployed(cluster.pool()).await?,
104+
model,
105+
snapshot,
106+
project,
107+
}
108+
.render_once()
109+
.unwrap(),
110+
))
111+
}
112+
113+
pub fn routes() -> Vec<Route> {
114+
routes![deployment_models, model, models_index, models_get,]
115+
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
use rocket::route::Route;
2+
use sailfish::TemplateOnce;
3+
4+
use crate::{
5+
guards::ConnectedCluster,
6+
responses::{Error, ResponseOk},
7+
};
8+
9+
use crate::models;
10+
use crate::templates;
11+
12+
use std::collections::HashMap;
13+
14+
pub mod deployment_models;
15+
pub mod notebooks;
16+
pub mod projects;
17+
pub mod snapshots;
18+
pub mod uploader;
19+
20+
#[get("/deployments")]
21+
pub async fn deployments_index(cluster: ConnectedCluster<'_>) -> Result<ResponseOk, Error> {
22+
let projects = models::Project::all(cluster.pool()).await?;
23+
let mut deployments = HashMap::new();
24+
25+
for project in projects.iter() {
26+
deployments.insert(
27+
project.id,
28+
models::Deployment::get_by_project_id(cluster.pool(), project.id).await?,
29+
);
30+
}
31+
32+
Ok(ResponseOk(
33+
templates::Deployments { projects, deployments }.render_once().unwrap(),
34+
))
35+
}
36+
37+
#[get("/deployments/<id>")]
38+
pub async fn deployments_get(cluster: ConnectedCluster<'_>, id: i64) -> Result<ResponseOk, Error> {
39+
let deployment = models::Deployment::get_by_id(cluster.pool(), id).await?;
40+
let project = models::Project::get_by_id(cluster.pool(), deployment.project_id).await?;
41+
let model = models::Model::get_by_id(cluster.pool(), deployment.model_id).await?;
42+
43+
Ok(ResponseOk(
44+
templates::Deployment {
45+
project,
46+
deployment,
47+
model,
48+
}
49+
.render_once()
50+
.unwrap(),
51+
))
52+
}
53+
54+
pub fn routes() -> Vec<Route> {
55+
let mut routes = routes![deployments_index, deployments_get,];
56+
57+
routes.extend(deployment_models::routes());
58+
routes.extend(notebooks::routes());
59+
routes.extend(projects::routes());
60+
routes.extend(snapshots::routes());
61+
routes.extend(uploader::routes());
62+
routes
63+
}

0 commit comments

Comments
 (0)