from argenta.app import App from argenta.app.autocompleter import AutoCompleter from argenta.router import Router from argenta.command import Command from argenta.orchestrator import Orchestrator from argenta.app.dividing_line import DynamicDividingLine from argenta.response import Response import platform import psutil import os import subprocess import socket # Маршрутизатор для работы с файлами file_router = Router("Файловые операции") @file_router.command(Command("list", "Список файлов")) def list_files(response: Response): files = os.listdir() for file in files: print(file) @file_router.command(Command("size", "Размер файла")) def file_size(response: Response): file_name = input("Введите имя файла: ") if os.path.exists(file_name): size = os.path.getsize(file_name) print(f"Размер файла {file_name}: {size} байт") else: print(f"Файл {file_name} не найден") # Маршрутизатор для системных операций system_router = Router("Системные операции") @system_router.command(Command("info", "Информация о системе")) def system_info(response: Response): print(f"Система: {platform.system()}") print(f"Версия: {platform.version()}") print(f"Архитектура: {platform.architecture()}") print(f"Процессор: {platform.processor()}") @system_router.command(Command("memory", "Информация о памяти")) def memory_info(response: Response): memory = psutil.virtual_memory() print(f"Всего памяти: {memory.total / (1024**3):.2f} ГБ") print(f"Доступно: {memory.available / (1024**3):.2f} ГБ") print(f"Использовано: {memory.used / (1024**3):.2f} ГБ ({memory.percent}%)") # Маршрутизатор для сетевых операций network_router = Router("Сетевые операции") @network_router.command(Command("ping", "Проверка доступности хоста")) def ping_host(response: Response): host = input("Введите имя хоста: ") print(f"Пингую {host}...") subprocess.run(["ping", "-c", "4", host]) @network_router.command(Command("ip", "Показать IP-адреса")) def show_ip(response: Response): hostname = socket.gethostname() print(f"Имя хоста: {hostname}") print(f"IP-адрес: {socket.gethostbyname(hostname)}") # Создание приложения и регистрация маршрутизаторов app = App( prompt="System> ", initial_message="Pingator", dividing_line=DynamicDividingLine("*"), autocompleter=AutoCompleter('.hist', 'e'), ) # Добавляем все маршрутизаторы app.include_routers(file_router, system_router, network_router) # Добавляем сообщение при запуске app.add_message_on_startup("Для просмотра доступных команд нажмите Enter") # Запускаем приложение orchestrator = Orchestrator() orchestrator.start_polling(app)