Skip to content

Commit 5ce41e7

Browse files
Dan product left nav update (#1445)
1 parent aab5bd5 commit 5ce41e7

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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy