Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion management/backup.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,11 @@
import operator

def backup_status(env):
"""
TODO: Document what the return value actually is.

Will raise an exception if the call to the duplicity binary fails.
"""
# If backups are disabled, return no status.
config = get_backup_config(env)
if config["target"] == "off":
Expand Down Expand Up @@ -65,7 +70,7 @@ def parse_line(line):
get_duplicity_target_url(config)
],
get_duplicity_env_vars(env),
trap=True)
trap=True, capture_stderr=True)
if code != 0:
# Command failed. This is likely due to an improperly configured remote
# destination for the backups or the last backup job terminated unexpectedly.
Expand Down
22 changes: 13 additions & 9 deletions management/status_checks.py
Original file line number Diff line number Diff line change
Expand Up @@ -266,26 +266,30 @@ def check_free_memory(rounded_values, env, output):
def check_backup(rounded_values, env, output):
# Check backups
backup_config = get_backup_config(env, for_ui=True)

# Is the backup enabled?
if backup_config.get("target", "off") == "off":
output.print_warning("Backups are disabled. It is recommended to enable a backup for your box.")
return
else:
output.print_ok("Backups are enabled")

# Get the age of the most recent backup
backup_stat = backup_status(env)

try:
backup_stat = backup_status(env)
except Exception as e:
output.print_error(f"Failed to obtain backup status: {e}")
return

backups = backup_stat.get("backups", {})
if backups and len(backups) > 0:
most_recent = backups[0]["date"]

# Calculate time between most recent backup and current time
now = datetime.datetime.now(dateutil.tz.tzlocal())
bk_date = dateutil.parser.parse(most_recent).astimezone(dateutil.tz.tzlocal())
bk_age = dateutil.relativedelta.relativedelta(now, bk_date)

if bk_age.days > 7:
output.print_error("Backup is more than a week old")
else:
Expand Down Expand Up @@ -584,11 +588,11 @@ def check_dns_zone(domain, env, output, dns_zonefiles):
continue
# Choose the first IP if nameserver returns multiple
ns_ip = ns_ips.split('; ')[0]

# No need to check if we could not obtain the SOA record
if SOARecord == '[timeout]':
checkSOA = False
else:
else:
checkSOA = True

# Now query it to see what it says about this domain.
Expand Down Expand Up @@ -801,7 +805,7 @@ def check_mail_domain(domain, env, output):
# Stop if the domain is listed in the Spamhaus Domain Block List.
# The user might have chosen a domain that was previously in use by a spammer
# and will not be able to reliably send mail.

# See https://www.spamhaus.org/news/article/807/using-our-public-mirrors-check-your-return-codes-now. for
# information on spamhaus return codes
dbl = query_dns(domain+'.dbl.spamhaus.org', "A", nxdomain=None)
Expand Down