|
|
@ -9,6 +9,11 @@ use rocket::http::Status; |
|
|
|
use rocket::request::{self, FromRequest}; |
|
|
|
use rocket::{Outcome, Request, State}; |
|
|
|
|
|
|
|
use std::process::Command; |
|
|
|
use chrono::prelude::*; |
|
|
|
use crate::error::Error; |
|
|
|
|
|
|
|
|
|
|
|
use crate::CONFIG; |
|
|
|
|
|
|
|
/// An alias to the database connection used
|
|
|
@ -34,6 +39,21 @@ pub fn get_connection() -> Result<Connection, ConnectionError> { |
|
|
|
Connection::establish(&CONFIG.database_url()) |
|
|
|
} |
|
|
|
|
|
|
|
/// Creates a back-up of the database using sqlite3
|
|
|
|
pub fn backup_database() -> Result<(), Error> { |
|
|
|
let now: DateTime<Utc> = Utc::now(); |
|
|
|
let file_date = String::from(now.format("%Y%m%d").to_string()); |
|
|
|
let backup_command: String = format!("{}{}{}", ".backup 'db_", file_date, ".sqlite3'"); |
|
|
|
|
|
|
|
Command::new("sqlite3") |
|
|
|
.current_dir("./data") |
|
|
|
.args(&["db.sqlite3", &backup_command]) |
|
|
|
.output() |
|
|
|
.expect("Can't open database, sqlite3 is not available, make sure it's installed and available on the PATH"); |
|
|
|
|
|
|
|
Ok(()) |
|
|
|
} |
|
|
|
|
|
|
|
/// Attempts to retrieve a single connection from the managed database pool. If
|
|
|
|
/// no pool is currently managed, fails with an `InternalServerError` status. If
|
|
|
|
/// no connections are available, fails with a `ServiceUnavailable` status.
|
|
|
|