litellm_rs/storage/database/
mod.rs1pub mod entities;
8pub mod migration;
10pub mod seaorm_db;
12
13pub use seaorm_db::SeaOrmDatabase as Database;
15pub use seaorm_db::{
16 DatabaseBackendType, DatabaseStats, RequestLedgerListFilter, RequestLedgerSink,
17 SeaOrmTeamRepository,
18};
19
20pub fn default_sqlite_path() -> std::path::PathBuf {
28 if let Ok(p) = std::env::var("LITELLM_SQLITE_PATH")
29 && !p.is_empty()
30 {
31 return std::path::PathBuf::from(p);
32 }
33 super::default_data_dir().join("gateway.db")
34}
35
36#[cfg(test)]
37mod tests {
38 use super::default_sqlite_path;
39 use std::path::PathBuf;
40
41 struct EnvRestore {
42 sqlite_path: Option<String>,
43 data_dir: Option<String>,
44 }
45
46 impl EnvRestore {
47 fn capture() -> Self {
48 Self {
49 sqlite_path: std::env::var("LITELLM_SQLITE_PATH").ok(),
50 data_dir: std::env::var("LITELLM_DATA_DIR").ok(),
51 }
52 }
53 }
54
55 impl Drop for EnvRestore {
56 fn drop(&mut self) {
57 unsafe {
58 match &self.sqlite_path {
59 Some(value) => std::env::set_var("LITELLM_SQLITE_PATH", value),
60 None => std::env::remove_var("LITELLM_SQLITE_PATH"),
61 }
62 match &self.data_dir {
63 Some(value) => std::env::set_var("LITELLM_DATA_DIR", value),
64 None => std::env::remove_var("LITELLM_DATA_DIR"),
65 }
66 }
67 }
68 }
69
70 #[test]
71 fn default_sqlite_path_uses_shared_data_dir() {
72 let _guard = crate::storage::ENV_LOCK.lock().unwrap();
73 let _restore = EnvRestore::capture();
74 unsafe {
75 std::env::remove_var("LITELLM_SQLITE_PATH");
76 std::env::set_var("LITELLM_DATA_DIR", "/custom/litellm-state");
77 }
78
79 assert_eq!(
80 default_sqlite_path(),
81 PathBuf::from("/custom/litellm-state/gateway.db")
82 );
83 }
84
85 #[test]
86 fn default_sqlite_path_explicit_override_wins() {
87 let _guard = crate::storage::ENV_LOCK.lock().unwrap();
88 let _restore = EnvRestore::capture();
89 unsafe {
90 std::env::set_var("LITELLM_SQLITE_PATH", "/explicit/gateway.db");
91 std::env::set_var("LITELLM_DATA_DIR", "/custom/litellm-state");
92 }
93
94 assert_eq!(default_sqlite_path(), PathBuf::from("/explicit/gateway.db"));
95 }
96}