SIDEL_ScriptsManager/app/backend/script_groups/system_utilities/backup_system.py

87 lines
2.6 KiB
Python

"""
ScriptsManager Metadata:
@description: Creates a complete system backup with compression options
@description_long: docs/backup_system.md
@description_es: Crea una copia de seguridad completa del sistema con opciones de compresión
@description_it: Crea un backup completo del sistema con opzioni di compressione
@description_fr: Crée une sauvegarde complète du système avec options de compression
@required_level: admin
@category: backup
@tags: system,maintenance,storage
@parameters: [
{
"name": "backup_path",
"type": "text",
"description": "Path where backup will be stored",
"required": true,
"default": "/backup"
},
{
"name": "compression",
"type": "select",
"description": "Compression level",
"required": true,
"options": ["none", "low", "medium", "high"],
"default": "medium"
}
]
@execution_timeout: 3600
@flask_port: 5002
"""
from flask import Flask, render_template, request, jsonify
import sys
import os
import json
import time
app = Flask(__name__)
# Get parameters from ScriptsManager
data_dir = sys.argv[1] if len(sys.argv) > 1 else "./data"
user_level = sys.argv[2] if len(sys.argv) > 2 else "admin"
port = int(sys.argv[3]) if len(sys.argv) > 3 else 5002
@app.route("/")
def index():
return render_template(
"backup_system.html", data_dir=data_dir, user_level=user_level
)
@app.route("/backup", methods=["POST"])
def create_backup():
try:
backup_path = request.form.get("backup_path")
compression = request.form.get("compression")
# Simulate backup process
result = {
"status": "success",
"message": f"System backup created at {backup_path}",
"data": {
"backup_path": backup_path,
"compression": compression,
"size": "2.5 GB",
"duration": "15 minutes",
"timestamp": time.strftime("%Y-%m-%d %H:%M:%S"),
},
}
# Save result to data directory
result_path = os.path.join(data_dir, "backup_result.json")
with open(result_path, "w") as f:
json.dump(result, f, indent=2)
return jsonify(result)
except Exception as e:
return jsonify({"status": "error", "message": str(e)}), 500
if __name__ == "__main__":
print(f"Starting System Backup on port {port}")
print(f"Data directory: {data_dir}")
print(f"User level: {user_level}")
app.run(host="0.0.0.0", port=port, debug=True)