Files
nas_control_bot/.history/diagnose_api_20250830081925.py
2025-08-30 10:33:46 +09:00

92 lines
3.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Диагностический скрипт для определения совместимых API
"""
import os
import sys
import logging
import argparse
from pathlib import Path
# Добавляем родительскую директорию в sys.path
parent_dir = str(Path(__file__).resolve().parent.parent)
if parent_dir not in sys.path:
sys.path.insert(0, parent_dir)
from src.api.api_discovery import discover_available_apis
from src.config.config import SYNOLOGY_HOST, SYNOLOGY_PORT, SYNOLOGY_SECURE
# Настройка логгера
logging.basicConfig(
level=logging.DEBUG,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)
def main():
"""Точка входа для диагностического скрипта"""
parser = argparse.ArgumentParser(description='Synology API Diagnostic Tool')
parser.add_argument('--host', help='Synology host address', default=SYNOLOGY_HOST)
parser.add_argument('--port', type=int, help='Synology host port', default=SYNOLOGY_PORT)
parser.add_argument('--secure', action='store_true', help='Use HTTPS', default=SYNOLOGY_SECURE)
args = parser.parse_args()
protocol = "https" if args.secure else "http"
base_url = f"{protocol}://{args.host}:{args.port}/webapi"
print(f"Scanning APIs at {base_url}...")
apis = discover_available_apis(base_url)
if not apis:
print("No APIs were discovered. Check connection parameters.")
return
print(f"Discovered {len(apis)} APIs")
# Анализ результатов
# 1. Ищем API для управления питанием
print("\nPower Management APIs:")
power_apis = [name for name in apis.keys() if "power" in name.lower()]
for api in power_apis:
info = apis[api]
print(f" - {api} (v{info.get('minVersion', 1)}-{info.get('maxVersion', 1)}), path: {info.get('path', 'entry.cgi')}")
# 2. Ищем API для информации о системе
print("\nSystem Information APIs:")
system_info_apis = [name for name in apis.keys() if ("system" in name.lower() or "dsm" in name.lower()) and "info" in name.lower()]
for api in system_info_apis:
info = apis[api]
print(f" - {api} (v{info.get('minVersion', 1)}-{info.get('maxVersion', 1)}), path: {info.get('path', 'entry.cgi')}")
# 3. Ищем API для перезагрузки
print("\nReboot/Restart APIs:")
reboot_apis = [name for name in apis.keys() if any(word in name.lower() for word in ["restart", "reboot", "power"])]
for api in reboot_apis:
info = apis[api]
print(f" - {api} (v{info.get('minVersion', 1)}-{info.get('maxVersion', 1)}), path: {info.get('path', 'entry.cgi')}")
print("\nRecommended API Settings:")
if power_apis:
recommended_power_api = max(power_apis, key=lambda x: apis[x].get('maxVersion', 1))
print(f"Power API: {recommended_power_api}, version: {apis[recommended_power_api].get('maxVersion', 1)}")
else:
print("Power API: Not found, falling back to SYNO.Core.System")
if system_info_apis:
recommended_info_api = max(system_info_apis, key=lambda x: apis[x].get('maxVersion', 1))
print(f"System Info API: {recommended_info_api}, version: {apis[recommended_info_api].get('maxVersion', 1)}")
else:
print("System Info API: Not found, falling back to SYNO.DSM.Info")
print("\nThese settings should be added to your .env file.")
if __name__ == "__main__":
main()