#!/usr/bin/env ruby # frozen_string_literal: true require_relative 'mysql_database_config' require_relative 'mysql_database_backup' require_relative 'mysql_database_restore' require_relative 'loggman' config_file = 'config.json' logger = Loggman.new begin if ARGV[0] == '--restore' unless File.exist?(config_file) logger.error('Configuration file does not exist. Please run the first time setup.') exit 1 end config = JSON.parse(File.read(config_file)) backup_dir = config['backup_dir'] || '.' b2_enabled = config['b2_enabled'] || false local_backups = Dir[File.join(backup_dir, '*_*.sql')] remote_backups = b2_enabled ? `./b2 ls #{config['b2']['bucket_name']}`.split("\n") : [] if local_backups.empty? && remote_backups.empty? logger.error('No backup found. Please ensure a backup exists in the local directory or in the B2 bucket (if B2 is enabled).') exit 1 end logger.info('Restoring backup...') restore = MysqlDatabaseRestore.new(config_file, logger) restore.restore else logger.info('Starting script.') config_generator = MysqlDatabaseConfig.new(config_file) config_generator.generate logger.info("Generated MySQL database configuration file: #{config_file}.") backup = MysqlDatabaseBackup.new(config_file, logger) backup.backup logger.info('Performed MySQL database backup.') logger.info('Script completed successfully.') end rescue StandardError => e logger.error("An error occurred: #{e.message}") logger.debug("Backtrace: #{e.backtrace}") end