]> git.proxmox.com Git - proxmox-backup.git/commitdiff
api3/admin/datastore/catar.rs: start impl. download
authorDietmar Maurer <dietmar@proxmox.com>
Sat, 19 Jan 2019 16:27:02 +0000 (17:27 +0100)
committerDietmar Maurer <dietmar@proxmox.com>
Sat, 19 Jan 2019 16:27:02 +0000 (17:27 +0100)
src/api3/admin/datastore/catar.rs
src/backup/datastore.rs

index 52529dc36ad061e3e0d13e7897c0408ff06ee98d..d5e0da677c2966ac2ed3d32b1f200d8844da2cd7 100644 (file)
@@ -74,7 +74,7 @@ fn upload_catar(parts: Parts, req_body: Body, param: Value, _info: &ApiAsyncMeth
 
     path.push(full_archive_name);
 
-    let index = datastore.create_archive_writer(path, chunk_size).unwrap();
+    let index = datastore.create_archive_writer(path, chunk_size)?;
 
     let upload = UploadCaTar { stream: req_body, index, count: 0};
 
@@ -108,6 +108,27 @@ pub fn api_method_upload_catar() -> ApiAsyncMethod {
 
 fn download_catar(parts: Parts, req_body: Body, param: Value, _info: &ApiAsyncMethod) -> Result<BoxFut, Error> {
 
+    let store = tools::required_string_param(&param, "store")?;
+    let archive_name = tools::required_string_param(&param, "archive_name")?;
+
+    let backup_type = tools::required_string_param(&param, "type")?;
+    let backup_id = tools::required_string_param(&param, "id")?;
+    let backup_time = tools::required_integer_param(&param, "time")?;
+
+    println!("Download {}.catar from {} ({}/{}/{}/{}.aidx)", archive_name, store,
+             backup_type, backup_id, backup_time, archive_name);
+
+    let datastore = DataStore::lookup_datastore(store)?;
+
+    let mut path = datastore.get_backup_dir(backup_type, backup_id, backup_time);
+
+    let mut full_archive_name = PathBuf::from(archive_name);
+    full_archive_name.set_extension("aidx");
+
+    path.push(full_archive_name);
+
+    let index = datastore.open_archive_reader(path)?;
+
     bail!("not implemeneted");
 }
 
index 7ba912ba88d23f97642bc9179c9e4ad2c8df7664..43fb2750fd391a97c96718b5052405fac9574ad0 100644 (file)
@@ -101,6 +101,27 @@ impl DataStore {
         self.chunk_store.base_path()
     }
 
+    pub fn get_backup_dir(
+        &self,
+        backup_type: &str,
+        backup_id: &str,
+        backup_time: i64,
+    ) ->  PathBuf  {
+
+        let mut relative_path = PathBuf::new();
+
+        relative_path.push(backup_type);
+
+        relative_path.push(backup_id);
+
+        let dt = Utc.timestamp(backup_time, 0);
+        let date_str = dt.format("%Y-%m-%dT%H:%M:%S").to_string();
+
+        relative_path.push(&date_str);
+
+        relative_path
+    }
+
     pub fn create_backup_dir(
         &self,
         backup_type: &str,