aboutsummaryrefslogtreecommitdiffstats
path: root/atuin-server/src
diff options
context:
space:
mode:
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("_")