Skip to content
← Back to Functions
Code

Backup Schedule Advisor

Suggests backup frequency based on update volume and data importance.

Function signature

ogAdviseBackupSchedule(metrics = array())

Categories

  • Database Integrity

Parameters

metricsBackup-relevant metrics such as change volume, criticality, and recovery objective.

Return value

Public-safe status string returned by the function for explicit controller branching or logging.

  • success
  • message
  • data

Compatibility

Existing function name, slug, path, and call order preserved; advertised metadata corrected to the actual source behavior.

Minimum PHP version: 7.4

Security notes

Use caller-owned allowlists and context-specific escaping; validate admin actions, export fields, privacy plans, cache keys, templates, settings, routes, and ecommerce policies before production use.

Code

<?php

/*
 * Copyright (c) 2026 Jeffery L. Paris <jparis@phpog.com>.
 * Free for personal and internal use. Paid project use requires visible credit
 * to Jeffery L. Paris. Corporate use requires a paid license fee unless a
 * separate written license states otherwise.
 */

/**
 * Suggests backup frequency based on update volume and data importance.
 *
 * Primary use case: Maintenance dashboards.
 * Typical inputs: site activity metrics, data classes.
 * Typical output: backup advice.
 *
 * Implementation note: Advisory only; actual backup process separate.
 *
 * @param array $metrics Site update and data-importance metrics.
 * @return array Backup schedule advice.
 */
function ogAdviseBackupSchedule($metrics = array()) {
	$result = array(
		'success' => false,
		'message' => '',
		'data' => array()
	);

	if (!is_array($metrics)) {
		$result['message'] = 'Metrics must be an array.';
		return $result;
	}

	$daily_writes = 0;
	if (!empty($metrics['daily_writes'])) {
		$daily_writes = (int)$metrics['daily_writes'];
	}

	$importance = 'normal';
	if (!empty($metrics['importance'])) {
		$importance = strtolower(trim((string)$metrics['importance']));
	}

	$database_frequency = 'daily';
	$file_frequency = 'weekly';
	$retention = '30 days';

	if ($daily_writes > 500 || $importance == 'critical') {
		$database_frequency = 'hourly snapshots plus daily full backups';
		$file_frequency = 'daily';
		$retention = '90 days';
	} elseif ($daily_writes > 50 || $importance == 'high') {
		$database_frequency = 'daily plus pre-deployment backups';
		$file_frequency = 'daily';
		$retention = '60 days';
	}

	$result['success'] = true;
	$result['message'] = 'Backup schedule advice prepared.';
	$result['data'] = array('database' => $database_frequency, 'files' => $file_frequency, 'retention' => $retention);
	return $result;
}