1 use anyhow
::{format_err, Error}
;
3 use pbs_api_types
::{Authid, Operation, VerificationJobConfig}
;
4 use pbs_datastore
::DataStore
;
5 use proxmox_rest_server
::WorkerTask
;
6 use proxmox_sys
::task_log
;
9 backup
::{verify_all_backups, verify_filter}
,
10 server
::jobstate
::Job
,
13 /// Runs a verification job.
14 pub fn do_verification_job(
16 verification_job
: VerificationJobConfig
,
18 schedule
: Option
<String
>,
20 ) -> Result
<String
, Error
> {
21 let datastore
= DataStore
::lookup_datastore(&verification_job
.store
, Some(Operation
::Read
))?
;
23 let outdated_after
= verification_job
.outdated_after
;
24 let ignore_verified_snapshots
= verification_job
.ignore_verified
.unwrap_or(true);
26 let (email
, notify
) = crate::server
::lookup_datastore_notify_settings(&verification_job
.store
);
28 let job_id
= format
!("{}:{}", &verification_job
.store
, job
.jobname());
29 let worker_type
= job
.jobtype().to_string();
30 let upid_str
= WorkerTask
::new_thread(
36 job
.start(&worker
.upid().to_string())?
;
38 task_log
!(worker
, "Starting datastore verify job '{}'", job_id
);
39 if let Some(event_str
) = schedule
{
40 task_log
!(worker
, "task triggered by schedule '{}'", event_str
);
43 let verify_worker
= crate::backup
::VerifyWorker
::new(worker
.clone(), datastore
);
44 let result
= verify_all_backups(
48 Some(&move |manifest
| {
49 verify_filter(ignore_verified_snapshots
, outdated_after
, manifest
)
52 let job_result
= match result
{
53 Ok(ref failed_dirs
) if failed_dirs
.is_empty() => Ok(()),
54 Ok(ref failed_dirs
) => {
55 task_log
!(worker
, "Failed to verify the following snapshots/groups:");
56 for dir
in failed_dirs
{
57 task_log
!(worker
, "\t{}", dir
);
61 "verification failed - please check the log for details"
64 Err(_
) => Err(format_err
!("verification failed - job aborted")),
67 let status
= worker
.create_state(&job_result
);
69 if let Err(err
) = job
.finish(status
) {
71 "could not finish job state for {}: {}",
72 job
.jobtype().to_string(),
77 if let Some(email
) = email
{
79 crate::server
::send_verify_status(&email
, notify
, verification_job
, &result
)
81 eprintln
!("send verify notification failed: {}", err
);