mirror of
https://github.com/getnora-io/nora.git
synced 2026-04-12 12:40:31 +00:00
Fix formatting
This commit is contained in:
@@ -71,12 +71,7 @@ impl ActivityLog {
|
||||
/// Get the most recent N entries (newest first)
|
||||
pub fn recent(&self, count: usize) -> Vec<ActivityEntry> {
|
||||
let entries = self.entries.read();
|
||||
entries
|
||||
.iter()
|
||||
.rev()
|
||||
.take(count)
|
||||
.cloned()
|
||||
.collect()
|
||||
entries.iter().rev().take(count).cloned().collect()
|
||||
}
|
||||
|
||||
/// Get all entries (newest first)
|
||||
|
||||
@@ -21,7 +21,15 @@ async fn download(State(state): State<Arc<AppState>>, Path(path): Path<String>)
|
||||
let key = format!("maven/{}", path);
|
||||
|
||||
// Extract artifact name for logging (last 2-3 path components)
|
||||
let artifact_name = path.split('/').rev().take(3).collect::<Vec<_>>().into_iter().rev().collect::<Vec<_>>().join("/");
|
||||
let artifact_name = path
|
||||
.split('/')
|
||||
.rev()
|
||||
.take(3)
|
||||
.collect::<Vec<_>>()
|
||||
.into_iter()
|
||||
.rev()
|
||||
.collect::<Vec<_>>()
|
||||
.join("/");
|
||||
|
||||
// Try local storage first
|
||||
if let Ok(data) = state.storage.get(&key).await {
|
||||
@@ -76,7 +84,15 @@ async fn upload(
|
||||
let key = format!("maven/{}", path);
|
||||
|
||||
// Extract artifact name for logging
|
||||
let artifact_name = path.split('/').rev().take(3).collect::<Vec<_>>().into_iter().rev().collect::<Vec<_>>().join("/");
|
||||
let artifact_name = path
|
||||
.split('/')
|
||||
.rev()
|
||||
.take(3)
|
||||
.collect::<Vec<_>>()
|
||||
.into_iter()
|
||||
.rev()
|
||||
.collect::<Vec<_>>()
|
||||
.join("/");
|
||||
|
||||
match state.storage.put(&key, &body).await {
|
||||
Ok(()) => {
|
||||
|
||||
@@ -139,8 +139,11 @@ pub async fn api_dashboard(State(state): State<Arc<AppState>>) -> Json<Dashboard
|
||||
}
|
||||
}
|
||||
|
||||
let total_artifacts = registry_stats.docker + registry_stats.maven +
|
||||
registry_stats.npm + registry_stats.cargo + registry_stats.pypi;
|
||||
let total_artifacts = registry_stats.docker
|
||||
+ registry_stats.maven
|
||||
+ registry_stats.npm
|
||||
+ registry_stats.cargo
|
||||
+ registry_stats.pypi;
|
||||
|
||||
let global_stats = GlobalStats {
|
||||
downloads: state.metrics.downloads.load(Ordering::Relaxed),
|
||||
|
||||
@@ -61,7 +61,12 @@ pub fn layout(title: &str, content: &str, active_page: Option<&str>) -> String {
|
||||
}
|
||||
|
||||
/// Dark theme layout wrapper for dashboard
|
||||
pub fn layout_dark(title: &str, content: &str, active_page: Option<&str>, extra_scripts: &str) -> String {
|
||||
pub fn layout_dark(
|
||||
title: &str,
|
||||
content: &str,
|
||||
active_page: Option<&str>,
|
||||
extra_scripts: &str,
|
||||
) -> String {
|
||||
format!(
|
||||
r##"<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
@@ -238,7 +243,13 @@ fn header_dark() -> String {
|
||||
}
|
||||
|
||||
/// Render global stats row (5-column grid)
|
||||
pub fn render_global_stats(downloads: u64, uploads: u64, artifacts: u64, cache_hit_percent: f64, storage_bytes: u64) -> String {
|
||||
pub fn render_global_stats(
|
||||
downloads: u64,
|
||||
uploads: u64,
|
||||
artifacts: u64,
|
||||
cache_hit_percent: f64,
|
||||
storage_bytes: u64,
|
||||
) -> String {
|
||||
format!(
|
||||
r##"
|
||||
<div class="grid grid-cols-2 md:grid-cols-3 lg:grid-cols-5 gap-4 mb-6">
|
||||
@@ -273,7 +284,15 @@ pub fn render_global_stats(downloads: u64, uploads: u64, artifacts: u64, cache_h
|
||||
}
|
||||
|
||||
/// Render registry card with extended metrics
|
||||
pub fn render_registry_card(name: &str, icon_path: &str, artifact_count: usize, downloads: u64, uploads: u64, size_bytes: u64, href: &str) -> String {
|
||||
pub fn render_registry_card(
|
||||
name: &str,
|
||||
icon_path: &str,
|
||||
artifact_count: usize,
|
||||
downloads: u64,
|
||||
uploads: u64,
|
||||
size_bytes: u64,
|
||||
href: &str,
|
||||
) -> String {
|
||||
format!(
|
||||
r##"
|
||||
<a href="{}" id="registry-{}" class="block bg-[#1e293b] rounded-lg border border-slate-700 p-4 md:p-6 hover:border-blue-400 transition-all">
|
||||
@@ -359,7 +378,13 @@ pub fn render_mount_points_table(mount_points: &[(String, String, Option<String>
|
||||
}
|
||||
|
||||
/// Render a single activity log row
|
||||
pub fn render_activity_row(timestamp: &str, action: &str, artifact: &str, registry: &str, source: &str) -> String {
|
||||
pub fn render_activity_row(
|
||||
timestamp: &str,
|
||||
action: &str,
|
||||
artifact: &str,
|
||||
registry: &str,
|
||||
source: &str,
|
||||
) -> String {
|
||||
let action_color = match action {
|
||||
"PULL" => "text-blue-400",
|
||||
"PUSH" => "text-green-400",
|
||||
@@ -378,7 +403,12 @@ pub fn render_activity_row(timestamp: &str, action: &str, artifact: &str, regist
|
||||
<td class="py-2 text-slate-500">{}</td>
|
||||
</tr>
|
||||
"##,
|
||||
timestamp, action_color, action, html_escape(artifact), registry, source
|
||||
timestamp,
|
||||
action_color,
|
||||
action,
|
||||
html_escape(artifact),
|
||||
registry,
|
||||
source
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -13,37 +13,49 @@ pub fn render_dashboard(data: &DashboardResponse) -> String {
|
||||
);
|
||||
|
||||
// Render registry cards
|
||||
let registry_cards: String = data.registry_stats.iter().map(|r| {
|
||||
let icon = match r.name.as_str() {
|
||||
"docker" => icons::DOCKER,
|
||||
"maven" => icons::MAVEN,
|
||||
"npm" => icons::NPM,
|
||||
"cargo" => icons::CARGO,
|
||||
"pypi" => icons::PYPI,
|
||||
_ => icons::DOCKER,
|
||||
};
|
||||
let display_name = match r.name.as_str() {
|
||||
"docker" => "Docker",
|
||||
"maven" => "Maven",
|
||||
"npm" => "npm",
|
||||
"cargo" => "Cargo",
|
||||
"pypi" => "PyPI",
|
||||
_ => &r.name,
|
||||
};
|
||||
render_registry_card(
|
||||
display_name,
|
||||
icon,
|
||||
r.artifact_count,
|
||||
r.downloads,
|
||||
r.uploads,
|
||||
r.size_bytes,
|
||||
&format!("/ui/{}", r.name),
|
||||
)
|
||||
}).collect();
|
||||
let registry_cards: String = data
|
||||
.registry_stats
|
||||
.iter()
|
||||
.map(|r| {
|
||||
let icon = match r.name.as_str() {
|
||||
"docker" => icons::DOCKER,
|
||||
"maven" => icons::MAVEN,
|
||||
"npm" => icons::NPM,
|
||||
"cargo" => icons::CARGO,
|
||||
"pypi" => icons::PYPI,
|
||||
_ => icons::DOCKER,
|
||||
};
|
||||
let display_name = match r.name.as_str() {
|
||||
"docker" => "Docker",
|
||||
"maven" => "Maven",
|
||||
"npm" => "npm",
|
||||
"cargo" => "Cargo",
|
||||
"pypi" => "PyPI",
|
||||
_ => &r.name,
|
||||
};
|
||||
render_registry_card(
|
||||
display_name,
|
||||
icon,
|
||||
r.artifact_count,
|
||||
r.downloads,
|
||||
r.uploads,
|
||||
r.size_bytes,
|
||||
&format!("/ui/{}", r.name),
|
||||
)
|
||||
})
|
||||
.collect();
|
||||
|
||||
// Render mount points
|
||||
let mount_data: Vec<(String, String, Option<String>)> = data.mount_points.iter()
|
||||
.map(|m| (m.registry.clone(), m.mount_path.clone(), m.proxy_upstream.clone()))
|
||||
let mount_data: Vec<(String, String, Option<String>)> = data
|
||||
.mount_points
|
||||
.iter()
|
||||
.map(|m| {
|
||||
(
|
||||
m.registry.clone(),
|
||||
m.mount_path.clone(),
|
||||
m.proxy_upstream.clone(),
|
||||
)
|
||||
})
|
||||
.collect();
|
||||
let mount_points = render_mount_points_table(&mount_data);
|
||||
|
||||
@@ -51,16 +63,19 @@ pub fn render_dashboard(data: &DashboardResponse) -> String {
|
||||
let activity_rows: String = if data.activity.is_empty() {
|
||||
r##"<tr><td colspan="5" class="py-8 text-center text-slate-500">No recent activity</td></tr>"##.to_string()
|
||||
} else {
|
||||
data.activity.iter().map(|entry| {
|
||||
let time_ago = format_relative_time(&entry.timestamp);
|
||||
render_activity_row(
|
||||
&time_ago,
|
||||
&entry.action.to_string(),
|
||||
&entry.artifact,
|
||||
&entry.registry,
|
||||
&entry.source,
|
||||
)
|
||||
}).collect()
|
||||
data.activity
|
||||
.iter()
|
||||
.map(|entry| {
|
||||
let time_ago = format_relative_time(&entry.timestamp);
|
||||
render_activity_row(
|
||||
&time_ago,
|
||||
&entry.action.to_string(),
|
||||
&entry.artifact,
|
||||
&entry.registry,
|
||||
&entry.source,
|
||||
)
|
||||
})
|
||||
.collect()
|
||||
};
|
||||
let activity_log = render_activity_log(&activity_rows);
|
||||
|
||||
@@ -95,11 +110,7 @@ pub fn render_dashboard(data: &DashboardResponse) -> String {
|
||||
{}
|
||||
</div>
|
||||
"##,
|
||||
uptime_str,
|
||||
global_stats,
|
||||
registry_cards,
|
||||
mount_points,
|
||||
activity_log,
|
||||
uptime_str, global_stats, registry_cards, mount_points, activity_log,
|
||||
);
|
||||
|
||||
let polling_script = render_polling_script();
|
||||
|
||||
Reference in New Issue
Block a user