160 lines
5.2 KiB
Python
160 lines
5.2 KiB
Python
# cli_tools.py
|
|
"""
|
|
CLI инструменты для управления парсером
|
|
"""
|
|
|
|
import argparse
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
# Добавляем путь к модулям
|
|
sys.path.append(str(Path(__file__).parent))
|
|
|
|
from utils.db_manager import DatabaseManager
|
|
from utils.monitor import SystemMonitor
|
|
from utils.image_optimizer import ImageOptimizer
|
|
from utils.feed_validator import FeedValidator
|
|
from config import Config
|
|
|
|
|
|
def backup_database(args):
|
|
"""Создаёт резервную копию БД"""
|
|
config = Config()
|
|
db_path = config.get('database.sqlite_path', 'data/morele_parser.db')
|
|
|
|
manager = DatabaseManager(db_path)
|
|
backup_file = manager.backup_database(args.backup_dir)
|
|
print(f"Backup created: {backup_file}")
|
|
|
|
|
|
def cleanup_data(args):
|
|
"""Очищает старые данные"""
|
|
config = Config()
|
|
db_path = config.get('database.sqlite_path', 'data/morele_parser.db')
|
|
|
|
manager = DatabaseManager(db_path)
|
|
manager.cleanup_old_data(args.days)
|
|
|
|
if args.optimize:
|
|
manager.optimize_database()
|
|
|
|
|
|
def show_stats(args):
|
|
"""Показывает статистику"""
|
|
config = Config()
|
|
db_path = config.get('database.sqlite_path', 'data/morele_parser.db')
|
|
|
|
# Статистика БД
|
|
manager = DatabaseManager(db_path)
|
|
db_stats = manager.get_database_stats()
|
|
|
|
print("=== DATABASE STATISTICS ===")
|
|
for key, value in db_stats.items():
|
|
print(f"{key}: {value}")
|
|
|
|
# Системная статистика
|
|
if args.system:
|
|
monitor = SystemMonitor()
|
|
sys_stats = monitor.get_system_stats()
|
|
|
|
print("\n=== SYSTEM STATISTICS ===")
|
|
print(f"CPU Usage: {sys_stats['cpu_percent']}%")
|
|
print(f"Memory Usage: {sys_stats['memory_percent']}%")
|
|
print(f"Disk Usage: {sys_stats['disk_usage']}%")
|
|
|
|
|
|
def optimize_images(args):
|
|
"""Оптимизирует изображения"""
|
|
optimizer = ImageOptimizer(quality=args.quality, max_size=(args.max_width, args.max_height))
|
|
|
|
optimized, errors = optimizer.optimize_directory(
|
|
args.directory,
|
|
args.extensions.split(',') if args.extensions else None
|
|
)
|
|
|
|
print(f"Optimized: {optimized}, Errors: {errors}")
|
|
|
|
|
|
def validate_feed(args):
|
|
"""Валидирует YML фид"""
|
|
validator = FeedValidator()
|
|
|
|
if validator.validate_feed(args.feed_path):
|
|
print("✅ Feed is valid!")
|
|
else:
|
|
print("❌ Feed has errors:")
|
|
print(validator.get_report())
|
|
|
|
|
|
def monitor_system(args):
|
|
"""Мониторинг системы"""
|
|
monitor = SystemMonitor()
|
|
|
|
# Проверяем ресурсы
|
|
disk_status, disk_msg = monitor.check_disk_space()
|
|
memory_status, memory_msg = monitor.check_memory_usage()
|
|
|
|
print(f"Disk: {disk_msg}")
|
|
print(f"Memory: {memory_msg}")
|
|
|
|
if disk_status == 'critical' or memory_status == 'critical':
|
|
sys.exit(1)
|
|
elif disk_status == 'warning' or memory_status == 'warning':
|
|
sys.exit(2)
|
|
|
|
|
|
def main():
|
|
"""Главная функция CLI"""
|
|
parser = argparse.ArgumentParser(description='Morele Parser CLI Tools')
|
|
subparsers = parser.add_subparsers(dest='command', help='Available commands')
|
|
|
|
# Backup command
|
|
backup_parser = subparsers.add_parser('backup', help='Create database backup')
|
|
backup_parser.add_argument('--backup-dir', default='backups', help='Backup directory')
|
|
backup_parser.set_defaults(func=backup_database)
|
|
|
|
# Cleanup command
|
|
cleanup_parser = subparsers.add_parser('cleanup', help='Cleanup old data')
|
|
cleanup_parser.add_argument('--days', type=int, default=30, help='Days to keep')
|
|
cleanup_parser.add_argument('--optimize', action='store_true', help='Optimize database')
|
|
cleanup_parser.set_defaults(func=cleanup_data)
|
|
|
|
# Stats command
|
|
stats_parser = subparsers.add_parser('stats', help='Show statistics')
|
|
stats_parser.add_argument('--system', action='store_true', help='Include system stats')
|
|
stats_parser.set_defaults(func=show_stats)
|
|
|
|
# Optimize images command
|
|
images_parser = subparsers.add_parser('optimize-images', help='Optimize images')
|
|
images_parser.add_argument('directory', help='Directory with images')
|
|
images_parser.add_argument('--quality', type=int, default=85, help='JPEG quality')
|
|
images_parser.add_argument('--max-width', type=int, default=1200, help='Max width')
|
|
images_parser.add_argument('--max-height', type=int, default=1200, help='Max height')
|
|
images_parser.add_argument('--extensions', help='File extensions (comma-separated)')
|
|
images_parser.set_defaults(func=optimize_images)
|
|
|
|
# Validate feed command
|
|
validate_parser = subparsers.add_parser('validate-feed', help='Validate YML feed')
|
|
validate_parser.add_argument('feed_path', help='Path to YML feed file')
|
|
validate_parser.set_defaults(func=validate_feed)
|
|
|
|
# Monitor command
|
|
monitor_parser = subparsers.add_parser('monitor', help='Monitor system resources')
|
|
monitor_parser.set_defaults(func=monitor_system)
|
|
|
|
args = parser.parse_args()
|
|
|
|
if not args.command:
|
|
parser.print_help()
|
|
return
|
|
|
|
try:
|
|
args.func(args)
|
|
except Exception as e:
|
|
print(f"Error: {e}")
|
|
sys.exit(1)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|