/
kotkov
/
eco
Обзор
Документация
Войти
/
kotkov
/
eco
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
dev
eco.py
101 строка
3 KB
Arseny Kotkov
fix: agent start up hotfix
27 май 2025, 06:47
27 май 2025, 06:47
de888a7
Код
Авторство
О чём код?
import argparse import os import sys import time from threading import Thread from AAA.config import IP, PORT from log import ecolog from utils import Socket def agentClass(mod_name:str): try: mod = __import__(mod_name) return mod.agentClass except: ecolog("Agent class not found:", mod_name) exit(0) def load_basic_configurations(args): agent_cls=agentClass(args.type) # Инициализируем агента выбранного типа agent = agent_cls() # Если хост и порт явно указаны - используем их if args.name: agent.name=args.name if args.ip: agent.ip=args.ip if args.port: agent.port=args.port return agent def handle_startagent(args): ecolog("Starting agent") agent_cls=agentClass(args.type) # Инициализируем агента выбранного типа agent = agent_cls() name, ip, port = agent.getConfig() # Запускаем агента на указанном порту, поскольку IP и порт агенту # присваиваются только в момент запуска метода serve(). ecolog("Serving") if os.fork() == 0: # detach a process from Terminal, entirely? ecolog("Detaching server from terminal") os.close(0) # Disable stdin os.close(1) # Disable stdout os.close(2) # Disable stderr log = open('log.txt', 'a') agent.serve((ip, port), blocking=True) log.close() else: ecolog("waiting") time.sleep(3333) def handle_registeragent(args): agent = load_basic_configurations(args) # Запускаем агента на указанном порту, поскольку IP и порт агенту # присваиваются только в момент запуска метода serve(). t0 = Thread(target=agent.startAgent) # Запускаем в режиме демона, чтобы когда утилита регистрации отработала # агент бы выключился t0.daemon = True t0.start() agent.aaa = Socket(IP, PORT) # Выполняем RPC-запрос к AAA ecolog(agent.register()) def handle_command(args): if args.command == "startagent": handle_startagent(args) elif args.command == "registeragent": handle_registeragent(args) if __name__ == '__main__': ecolog("Starting from command line") parser = argparse.ArgumentParser() subparsers = parser.add_subparsers(dest="command", help="Доступные команды") # Регистрация агента registeragent_parser = subparsers.add_parser("registeragent", help="Зарегистрировать агента") registeragent_parser.add_argument("type", help="Тип агента") registeragent_parser.add_argument("-n", "--name", help="Имя агента") registeragent_parser.add_argument("-p", "--port", help="Порт агента") registeragent_parser.add_argument("-i", "--ip", help="IP-адрес агента") # Запуск агента startagent_parser = subparsers.add_parser("startagent", help="Запустить агента") startagent_parser.add_argument("type", help="Тип агента") parsed_args = parser.parse_args() handle_command(parsed_args)