aboutsummaryrefslogtreecommitdiffstats
path: root/atuin-server/src
diff options
context:
space:
mode:
authorEllie Huxtable <ellie@elliehuxtable.com>2022-06-10 10:00:59 +0100
committerGitHub <noreply@github.com>2022-06-10 10:00:59 +0100
commit23b9d34e162a9cf27b519c1fe075785be25c46e5 (patch)
tree48eab6e38d829b5f4147eb36d7e45d436d85f1b6 /atuin-server/src
parentEnhancements to bash init script (#445) (diff)
downloadatuin-23b9d34e162a9cf27b519c1fe075785be25c46e5.zip
Add configurable history length (#447)
* Add configurable history length This allows servers to decide the max length of each history item they want to store! Some users might have much larger history lines than others. This setting can be set to 0 to allow for unlimited history length. This is not recommended for a public server install, but for a private one it can work nicely. * Format lol
Diffstat (limited to 'atuin-server/src')
-rw-r--r--atuin-server/src/database.rs25
-rw-r--r--atuin-server/src/lib.rs2
-rw-r--r--atuin-server/src/settings.rs2
3 files changed, 24 insertions, 5 deletions
diff --git a/atuin-server/src/database.rs b/atuin-server/src/database.rs
index d2246918..ef6c6d85 100644
--- a/atuin-server/src/database.rs
+++ b/atuin-server/src/database.rs
@@ -4,12 +4,13 @@ use async_trait::async_trait;
use chrono::{Datelike, TimeZone};
use chronoutil::RelativeDuration;
use sqlx::{postgres::PgPoolOptions, Result};
-use tracing::{debug, instrument};
+use tracing::{debug, instrument, warn};
use super::{
calendar::{TimePeriod, TimePeriodInfo},
models::{History, NewHistory, NewSession, NewUser, Session, User},
};
+use crate::settings::Settings;
use crate::settings::HISTORY_PAGE_SIZE;
use atuin_common::utils::get_days_from_month;
@@ -61,18 +62,19 @@ pub trait Database {
#[derive(Clone)]
pub struct Postgres {
pool: sqlx::Pool<sqlx::postgres::Postgres>,
+ settings: Settings,
}
impl Postgres {
- pub async fn new(uri: &str) -> Result<Self> {
+ pub async fn new(settings: Settings) -> Result<Self> {
let pool = PgPoolOptions::new()
.max_connections(100)
- .connect(uri)
+ .connect(settings.db_uri.as_str())
.await?;
sqlx::migrate!("./migrations").run(&pool).await?;
- Ok(Self { pool })
+ Ok(Self { pool, settings })
}
}
@@ -252,6 +254,21 @@ impl Database for Postgres {
let hostname: &str = &i.hostname;
let data: &str = &i.data;
+ if data.len() > self.settings.max_history_length
+ && self.settings.max_history_length != 0
+ {
+ // Don't return an error here. We want to insert as much of the
+ // history list as we can, so log the error and continue going.
+
+ warn!(
+ "history too long, got length {}, max {}",
+ data.len(),
+ self.settings.max_history_length
+ );
+
+ continue;
+ }
+
sqlx::query(
"insert into history
(client_id, user_id, hostname, timestamp, data)
diff --git a/atuin-server/src/lib.rs b/atuin-server/src/lib.rs
index 7be54e58..571c09bb 100644
--- a/atuin-server/src/lib.rs
+++ b/atuin-server/src/lib.rs
@@ -19,7 +19,7 @@ pub mod settings;
pub async fn launch(settings: Settings, host: String, port: u16) -> Result<()> {
let host = host.parse::<IpAddr>()?;
- let postgres = Postgres::new(settings.db_uri.as_str())
+ let postgres = Postgres::new(settings.clone())
.await
.wrap_err_with(|| format!("failed to connect to db: {}", settings.db_uri))?;
diff --git a/atuin-server/src/settings.rs b/atuin-server/src/settings.rs
index e6745173..b0e07b71 100644
--- a/atuin-server/src/settings.rs
+++ b/atuin-server/src/settings.rs
@@ -13,6 +13,7 @@ pub struct Settings {
pub port: u16,
pub db_uri: String,
pub open_registration: bool,
+ pub max_history_length: usize,
}
impl Settings {
@@ -33,6 +34,7 @@ impl Settings {
.set_default("host", "127.0.0.1")?
.set_default("port", 8888)?
.set_default("open_registration", false)?
+ .set_default("max_history_length", 8192)?
.add_source(
Environment::with_prefix("atuin")
.prefix_separator("_")