🌐 AI搜索 & 代理 主页
Skip to content

Commit 0ecac2a

Browse files
committed
Fix dashboard urls
1 parent c9f0354 commit 0ecac2a

32 files changed

+862
-600
lines changed
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: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
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+
pub mod deployment_models;
19+
pub mod notebooks;
20+
pub mod projects;
21+
pub mod snapshots;
22+
pub mod uploader;
23+
24+
#[get("/deployments")]
25+
pub async fn deployments_index(cluster: ConnectedCluster<'_>) -> Result<ResponseOk, Error> {
26+
let projects = models::Project::all(cluster.pool()).await?;
27+
let mut deployments = HashMap::new();
28+
29+
for project in projects.iter() {
30+
deployments.insert(
31+
project.id,
32+
models::Deployment::get_by_project_id(cluster.pool(), project.id).await?,
33+
);
34+
}
35+
36+
Ok(ResponseOk(
37+
templates::Deployments { projects, deployments }.render_once().unwrap(),
38+
))
39+
}
40+
41+
#[get("/deployments/<id>")]
42+
pub async fn deployments_get(cluster: ConnectedCluster<'_>, id: i64) -> Result<ResponseOk, Error> {
43+
let deployment = models::Deployment::get_by_id(cluster.pool(), id).await?;
44+
let project = models::Project::get_by_id(cluster.pool(), deployment.project_id).await?;
45+
let model = models::Model::get_by_id(cluster.pool(), deployment.model_id).await?;
46+
47+
Ok(ResponseOk(
48+
templates::Deployment {
49+
project,
50+
deployment,
51+
model,
52+
}
53+
.render_once()
54+
.unwrap(),
55+
))
56+
}
57+
58+
pub fn routes() -> Vec<Route> {
59+
let mut routes = routes![deployments_index, deployments_get,];
60+
61+
routes.extend(deployment_models::routes());
62+
routes.extend(notebooks::routes());
63+
routes.extend(projects::routes());
64+
routes.extend(snapshots::routes());
65+
routes.extend(uploader::routes());
66+
routes
67+
}

0 commit comments

Comments
 (0)