Rename util module to format
This commit is contained in:
parent
a525e58211
commit
bc8e2f46ab
9 changed files with 35 additions and 41 deletions
|
|
@ -1,6 +1,6 @@
|
||||||
|
mod format;
|
||||||
mod git;
|
mod git;
|
||||||
mod recurring;
|
mod recurring;
|
||||||
mod util;
|
|
||||||
pub mod web;
|
pub mod web;
|
||||||
mod workers;
|
mod workers;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,13 +5,13 @@ use time::{macros::format_description, OffsetDateTime};
|
||||||
|
|
||||||
use crate::somehow;
|
use crate::somehow;
|
||||||
|
|
||||||
pub fn format_duration(duration: time::Duration) -> String {
|
pub fn duration(duration: time::Duration) -> String {
|
||||||
let seconds = duration.unsigned_abs().as_secs(); // To nearest second
|
let seconds = duration.unsigned_abs().as_secs(); // To nearest second
|
||||||
let formatted = humantime::format_duration(Duration::from_secs(seconds));
|
let formatted = humantime::format_duration(Duration::from_secs(seconds));
|
||||||
format!("{formatted}")
|
format!("{formatted}")
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn format_delta_from_now(time: OffsetDateTime) -> String {
|
pub fn delta_from_now(time: OffsetDateTime) -> String {
|
||||||
let now = OffsetDateTime::now_utc();
|
let now = OffsetDateTime::now_utc();
|
||||||
let delta = time - now;
|
let delta = time - now;
|
||||||
let seconds = delta.unsigned_abs().as_secs();
|
let seconds = delta.unsigned_abs().as_secs();
|
||||||
|
|
@ -27,24 +27,24 @@ pub fn format_delta_from_now(time: OffsetDateTime) -> String {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn format_time(time: OffsetDateTime) -> String {
|
pub fn time(time: OffsetDateTime) -> String {
|
||||||
let formatted_time = time
|
let formatted_time = time
|
||||||
.format(format_description!(
|
.format(format_description!(
|
||||||
"[year]-[month]-[day] [hour]:[minute]:[second] [offset_hour sign:mandatory][offset_minute]"
|
"[year]-[month]-[day] [hour]:[minute]:[second] [offset_hour sign:mandatory][offset_minute]"
|
||||||
))
|
))
|
||||||
.expect("invalid date format");
|
.expect("invalid date format");
|
||||||
|
|
||||||
let formatted_delta = format_delta_from_now(time);
|
let formatted_delta = delta_from_now(time);
|
||||||
format!("{formatted_time} ({formatted_delta})")
|
format!("{formatted_time} ({formatted_delta})")
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn format_actor(author: IdentityRef<'_>) -> somehow::Result<String> {
|
pub fn actor(author: IdentityRef<'_>) -> somehow::Result<String> {
|
||||||
let mut buffer = vec![];
|
let mut buffer = vec![];
|
||||||
author.trim().write_to(&mut buffer)?;
|
author.trim().write_to(&mut buffer)?;
|
||||||
Ok(String::from_utf8_lossy(&buffer).to_string())
|
Ok(String::from_utf8_lossy(&buffer).to_string())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn format_commit_summary(message: &str) -> String {
|
pub fn commit_summary(message: &str) -> String {
|
||||||
// Take everything up to the first double newline
|
// Take everything up to the first double newline
|
||||||
let title = message
|
let title = message
|
||||||
.split_once("\n\n")
|
.split_once("\n\n")
|
||||||
|
|
@ -55,13 +55,13 @@ pub fn format_commit_summary(message: &str) -> String {
|
||||||
title.split_whitespace().collect::<Vec<_>>().join(" ")
|
title.split_whitespace().collect::<Vec<_>>().join(" ")
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn format_commit_short(hash: &str, message: &str) -> String {
|
pub fn commit_short(hash: &str, message: &str) -> String {
|
||||||
let short_hash = hash.chars().take(8).collect::<String>();
|
let short_hash = hash.chars().take(8).collect::<String>();
|
||||||
let summary = format_commit_summary(message);
|
let summary = commit_summary(message);
|
||||||
format!("{short_hash} ({summary})")
|
format!("{short_hash} ({summary})")
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn format_value(value: f64) -> String {
|
pub fn measurement_value(value: f64) -> String {
|
||||||
if value.abs() >= 1e6 {
|
if value.abs() >= 1e6 {
|
||||||
format!("{value:.3e}")
|
format!("{value:.3e}")
|
||||||
} else if value.fract() == 0.0 {
|
} else if value.fract() == 0.0 {
|
||||||
|
|
@ -9,7 +9,7 @@ use sqlx::{Acquire, SqliteConnection, SqlitePool};
|
||||||
use time::{OffsetDateTime, UtcOffset};
|
use time::{OffsetDateTime, UtcOffset};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
server::{util, Repo},
|
server::{format, Repo},
|
||||||
somehow,
|
somehow,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -82,10 +82,10 @@ async fn insert_new_commits(
|
||||||
let commit = id.attach(repo).object()?.try_into_commit()?;
|
let commit = id.attach(repo).object()?.try_into_commit()?;
|
||||||
let hash = commit.id.to_string();
|
let hash = commit.id.to_string();
|
||||||
let author_info = commit.author()?;
|
let author_info = commit.author()?;
|
||||||
let author = util::format_actor(author_info.actor())?;
|
let author = format::actor(author_info.actor())?;
|
||||||
let author_date = time_to_offset_datetime(author_info.time)?;
|
let author_date = time_to_offset_datetime(author_info.time)?;
|
||||||
let committer_info = commit.committer()?;
|
let committer_info = commit.committer()?;
|
||||||
let committer = util::format_actor(committer_info.actor())?;
|
let committer = format::actor(committer_info.actor())?;
|
||||||
let committer_date = time_to_offset_datetime(committer_info.time)?;
|
let committer_date = time_to_offset_datetime(committer_info.time)?;
|
||||||
let message = commit.message_raw()?.to_string();
|
let message = commit.message_raw()?.to_string();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
use maud::{html, Markup};
|
use maud::{html, Markup};
|
||||||
use time::OffsetDateTime;
|
use time::OffsetDateTime;
|
||||||
|
|
||||||
use crate::{config::ServerConfig, server::util};
|
use crate::{config::ServerConfig, server::format};
|
||||||
|
|
||||||
use super::{
|
use super::{
|
||||||
paths::{PathCommitByHash, PathRunById, PathWorkerByName},
|
paths::{PathCommitByHash, PathRunById, PathWorkerByName},
|
||||||
|
|
@ -37,7 +37,7 @@ pub fn commit_class_and_title(reachable: i64) -> (&'static str, &'static str) {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn link_commit(config: &ServerConfig, hash: String, message: &str, reachable: i64) -> Markup {
|
pub fn link_commit(config: &ServerConfig, hash: String, message: &str, reachable: i64) -> Markup {
|
||||||
let short = util::truncate(&util::format_commit_short(&hash, message), 80);
|
let short = format::truncate(&format::commit_short(&hash, message), 80);
|
||||||
let path = config.path(PathCommitByHash { hash });
|
let path = config.path(PathCommitByHash { hash });
|
||||||
let (class, title) = commit_class_and_title(reachable);
|
let (class, title) = commit_class_and_title(reachable);
|
||||||
|
|
||||||
|
|
@ -48,7 +48,7 @@ pub fn link_commit(config: &ServerConfig, hash: String, message: &str, reachable
|
||||||
|
|
||||||
/// Link to a run by its commit's short message.
|
/// Link to a run by its commit's short message.
|
||||||
pub fn link_run_short(config: &ServerConfig, id: String, hash: &str, message: &str) -> Markup {
|
pub fn link_run_short(config: &ServerConfig, id: String, hash: &str, message: &str) -> Markup {
|
||||||
let short = util::truncate(&util::format_commit_short(hash, message), 80);
|
let short = format::truncate(&format::commit_short(hash, message), 80);
|
||||||
let path = config.path(PathRunById { id });
|
let path = config.path(PathRunById { id });
|
||||||
|
|
||||||
html! {
|
html! {
|
||||||
|
|
@ -58,7 +58,7 @@ pub fn link_run_short(config: &ServerConfig, id: String, hash: &str, message: &s
|
||||||
|
|
||||||
/// Link to a run by its start time.
|
/// Link to a run by its start time.
|
||||||
pub fn link_run_date(config: &ServerConfig, id: String, start: OffsetDateTime) -> Markup {
|
pub fn link_run_date(config: &ServerConfig, id: String, start: OffsetDateTime) -> Markup {
|
||||||
let start = util::format_time(start);
|
let start = format::time(start);
|
||||||
let path = config.path(PathRunById { id });
|
let path = config.path(PathRunById { id });
|
||||||
|
|
||||||
html! {
|
html! {
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ use sqlx::SqlitePool;
|
||||||
use crate::{
|
use crate::{
|
||||||
config::ServerConfig,
|
config::ServerConfig,
|
||||||
server::{
|
server::{
|
||||||
util,
|
format,
|
||||||
web::{
|
web::{
|
||||||
components,
|
components,
|
||||||
page::Page,
|
page::Page,
|
||||||
|
|
@ -92,7 +92,7 @@ pub async fn get_commit_by_hash(
|
||||||
let (class, title) = components::commit_class_and_title(commit.reachable);
|
let (class, title) = components::commit_class_and_title(commit.reachable);
|
||||||
|
|
||||||
let html = Page::new(config)
|
let html = Page::new(config)
|
||||||
.title(util::format_commit_summary(&commit.message))
|
.title(format::commit_summary(&commit.message))
|
||||||
.body(html! {
|
.body(html! {
|
||||||
h2 { "Commit" }
|
h2 { "Commit" }
|
||||||
div .commit-like .commit {
|
div .commit-like .commit {
|
||||||
|
|
@ -102,13 +102,13 @@ pub async fn get_commit_by_hash(
|
||||||
dd { (commit.author) }
|
dd { (commit.author) }
|
||||||
|
|
||||||
dt { "AuthorDate:" }
|
dt { "AuthorDate:" }
|
||||||
dd { (util::format_time(commit.author_date)) }
|
dd { (format::time(commit.author_date)) }
|
||||||
|
|
||||||
dt { "Commit:" }
|
dt { "Commit:" }
|
||||||
dd { (commit.committer) }
|
dd { (commit.committer) }
|
||||||
|
|
||||||
dt { "CommitDate:" }
|
dt { "CommitDate:" }
|
||||||
dd { (util::format_time(commit.committer_date)) }
|
dd { (format::time(commit.committer_date)) }
|
||||||
|
|
||||||
@for commit in parents {
|
@for commit in parents {
|
||||||
dt { "Parent:" }
|
dt { "Parent:" }
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ use time::OffsetDateTime;
|
||||||
use crate::{
|
use crate::{
|
||||||
config::ServerConfig,
|
config::ServerConfig,
|
||||||
server::{
|
server::{
|
||||||
util,
|
format,
|
||||||
web::{
|
web::{
|
||||||
page::{Page, Tab},
|
page::{Page, Tab},
|
||||||
paths::{PathGraph, PathGraphCommits, PathGraphMeasurements, PathGraphMetrics},
|
paths::{PathGraph, PathGraphCommits, PathGraphMeasurements, PathGraphMetrics},
|
||||||
|
|
@ -108,7 +108,7 @@ pub async fn get_graph_commits(
|
||||||
hash_by_hash.push(row.hash);
|
hash_by_hash.push(row.hash);
|
||||||
author_by_hash.push(row.author);
|
author_by_hash.push(row.author);
|
||||||
committer_date_by_hash.push(row.committer_date.unix_timestamp());
|
committer_date_by_hash.push(row.committer_date.unix_timestamp());
|
||||||
summary_by_hash.push(util::format_commit_summary(&row.message));
|
summary_by_hash.push(format::commit_summary(&row.message));
|
||||||
}
|
}
|
||||||
drop(rows);
|
drop(rows);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ use sqlx::SqlitePool;
|
||||||
use crate::{
|
use crate::{
|
||||||
config::ServerConfig,
|
config::ServerConfig,
|
||||||
server::{
|
server::{
|
||||||
util,
|
format,
|
||||||
web::{
|
web::{
|
||||||
components,
|
components,
|
||||||
page::{Page, Tab},
|
page::{Page, Tab},
|
||||||
|
|
@ -138,7 +138,7 @@ async fn get_queue_data(
|
||||||
link_decrease: config.path(PathAdminQueueDecrease {}),
|
link_decrease: config.path(PathAdminQueueDecrease {}),
|
||||||
hash: r.hash.clone(),
|
hash: r.hash.clone(),
|
||||||
commit: components::link_commit(config, r.hash, &r.message, r.reachable),
|
commit: components::link_commit(config, r.hash, &r.message, r.reachable),
|
||||||
since: util::format_delta_from_now(r.date),
|
since: format::delta_from_now(r.date),
|
||||||
priority: r.priority,
|
priority: r.priority,
|
||||||
odd: false,
|
odd: false,
|
||||||
})
|
})
|
||||||
|
|
@ -291,10 +291,7 @@ pub async fn get_queue_delete(
|
||||||
let commit = components::link_commit(config, r.hash.clone(), &r.message, r.reachable);
|
let commit = components::link_commit(config, r.hash.clone(), &r.message, r.reachable);
|
||||||
|
|
||||||
let html = Page::new(config)
|
let html = Page::new(config)
|
||||||
.title(format!(
|
.title(format!("del {}", format::commit_short(&r.hash, &r.message)))
|
||||||
"del {}",
|
|
||||||
util::format_commit_short(&r.hash, &r.message)
|
|
||||||
))
|
|
||||||
.tab(Tab::Queue)
|
.tab(Tab::Queue)
|
||||||
.body(html! {
|
.body(html! {
|
||||||
h2 { "Delete commit from queue" }
|
h2 { "Delete commit from queue" }
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ use sqlx::SqlitePool;
|
||||||
use crate::{
|
use crate::{
|
||||||
config::ServerConfig,
|
config::ServerConfig,
|
||||||
server::{
|
server::{
|
||||||
util,
|
format,
|
||||||
web::{components, page::Page, paths::PathRunById},
|
web::{components, page::Page, paths::PathRunById},
|
||||||
},
|
},
|
||||||
somehow,
|
somehow,
|
||||||
|
|
@ -70,7 +70,7 @@ async fn from_finished_run(
|
||||||
.fetch(db)
|
.fetch(db)
|
||||||
.map_ok(|r| Measurement {
|
.map_ok(|r| Measurement {
|
||||||
metric: r.metric,
|
metric: r.metric,
|
||||||
value: util::format_value(r.value),
|
value: format::measurement_value(r.value),
|
||||||
unit: r.unit.unwrap_or_default(),
|
unit: r.unit.unwrap_or_default(),
|
||||||
})
|
})
|
||||||
.try_collect::<Vec<_>>()
|
.try_collect::<Vec<_>>()
|
||||||
|
|
@ -95,10 +95,7 @@ async fn from_finished_run(
|
||||||
let commit = components::link_commit(config, run.hash, &run.message, run.reachable);
|
let commit = components::link_commit(config, run.hash, &run.message, run.reachable);
|
||||||
|
|
||||||
let html = Page::new(config)
|
let html = Page::new(config)
|
||||||
.title(format!(
|
.title(format!("Run of {}", format::commit_summary(&run.message)))
|
||||||
"Run of {}",
|
|
||||||
util::format_commit_summary(&run.message)
|
|
||||||
))
|
|
||||||
.body(html! {
|
.body(html! {
|
||||||
h2 { "Run" }
|
h2 { "Run" }
|
||||||
div .commit-like .run {
|
div .commit-like .run {
|
||||||
|
|
@ -111,13 +108,13 @@ async fn from_finished_run(
|
||||||
dd { (run.bench_method) }
|
dd { (run.bench_method) }
|
||||||
|
|
||||||
dt { "Start:" }
|
dt { "Start:" }
|
||||||
dd { (util::format_time(run.start)) }
|
dd { (format::time(run.start)) }
|
||||||
|
|
||||||
dt { "End:" }
|
dt { "End:" }
|
||||||
dd { (util::format_time(run.end)) }
|
dd { (format::time(run.end)) }
|
||||||
|
|
||||||
dt { "Duration:" }
|
dt { "Duration:" }
|
||||||
dd { (util::format_duration(run.end - run.start)) }
|
dd { (format::duration(run.end - run.start)) }
|
||||||
|
|
||||||
dt { "Exit code:" }
|
dt { "Exit code:" }
|
||||||
dd { (run.exit_code) }
|
dd { (run.exit_code) }
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ use sqlx::SqlitePool;
|
||||||
use crate::{
|
use crate::{
|
||||||
config::ServerConfig,
|
config::ServerConfig,
|
||||||
server::{
|
server::{
|
||||||
util,
|
format,
|
||||||
web::{components, page::Page, paths::PathWorkerByName},
|
web::{components, page::Page, paths::PathWorkerByName},
|
||||||
workers::Workers,
|
workers::Workers,
|
||||||
},
|
},
|
||||||
|
|
@ -40,7 +40,7 @@ async fn status(
|
||||||
.await?;
|
.await?;
|
||||||
Status::Working {
|
Status::Working {
|
||||||
link: components::link_run_short(config, run.id.clone(), &run.hash, &message),
|
link: components::link_run_short(config, run.id.clone(), &run.hash, &message),
|
||||||
since: util::format_time(run.start.0),
|
since: format::time(run.start.0),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
@ -67,7 +67,7 @@ pub async fn get_worker_by_name(
|
||||||
span .title { "worker " (path.name) }
|
span .title { "worker " (path.name) }
|
||||||
dl {
|
dl {
|
||||||
dt { "Connected:" }
|
dt { "Connected:" }
|
||||||
dd { (util::format_time(info.first_seen)) }
|
dd { (format::time(info.first_seen)) }
|
||||||
|
|
||||||
@match status {
|
@match status {
|
||||||
Status::Idle => {
|
Status::Idle => {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue