1 use anyhow
::{format_err, Error}
;
3 use pbs_tools
::task_log
;
4 use pbs_api_types
::{Authid, VerificationJobConfig}
;
5 use proxmox_rest_server
::WorkerTask
;
16 /// Runs a verification job.
17 pub fn do_verification_job(
19 verification_job
: VerificationJobConfig
,
21 schedule
: Option
<String
>,
23 ) -> Result
<String
, Error
> {
25 let datastore
= DataStore
::lookup_datastore(&verification_job
.store
)?
;
27 let outdated_after
= verification_job
.outdated_after
;
28 let ignore_verified_snapshots
= verification_job
.ignore_verified
.unwrap_or(true);
30 let (email
, notify
) = crate::server
::lookup_datastore_notify_settings(&verification_job
.store
);
32 let job_id
= format
!("{}:{}",
33 &verification_job
.store
,
35 let worker_type
= job
.jobtype().to_string();
36 let upid_str
= WorkerTask
::new_thread(
42 job
.start(&worker
.upid().to_string())?
;
44 task_log
!(worker
,"Starting datastore verify job '{}'", job_id
);
45 if let Some(event_str
) = schedule
{
46 task_log
!(worker
,"task triggered by schedule '{}'", event_str
);
49 let verify_worker
= crate::backup
::VerifyWorker
::new(worker
.clone(), datastore
);
50 let result
= verify_all_backups(
54 Some(&move |manifest
| {
55 verify_filter(ignore_verified_snapshots
, outdated_after
, manifest
)
58 let job_result
= match result
{
59 Ok(ref failed_dirs
) if failed_dirs
.is_empty() => Ok(()),
60 Ok(ref failed_dirs
) => {
61 task_log
!(worker
, "Failed to verify the following snapshots/groups:");
62 for dir
in failed_dirs
{
63 task_log
!(worker
, "\t{}", dir
);
66 Err(format_err
!("verification failed - please check the log for details"))
68 Err(_
) => Err(format_err
!("verification failed - job aborted")),
71 let status
= worker
.create_state(&job_result
);
73 if let Err(err
) = job
.finish(status
) {
75 "could not finish job state for {}: {}",
76 job
.jobtype().to_string(),
81 if let Some(email
) = email
{
82 if let Err(err
) = crate::server
::send_verify_status(&email
, notify
, verification_job
, &result
) {
83 eprintln
!("send verify notification failed: {}", err
);