init commit

This commit is contained in:
2025-08-30 10:33:46 +09:00
commit 49b3cea942
304 changed files with 116485 additions and 0 deletions

91
diagnose_api.py Normal file
View File

@@ -0,0 +1,91 @@
#!/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()