fix: get API_KEY directly from passwork, remove unused config import

This commit is contained in:
dddennnisss
2026-07-27 11:57:13 +07:00
parent f03cd70b48
commit 748b262936
+16 -26
View File
@@ -13,47 +13,46 @@ import os
# Отключаем ворнинги для чистой работы консоли # Отключаем ворнинги для чистой работы консоли
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
# --- ИМПОРТ КОНФИГУРАЦИИ --- # --- ПОЛУЧЕНИЕ API_KEY ИЗ PASSWORK ---
SERVER_URL = "https://servicedesk.sibcem.ru:8080" SERVER_URL = "https://servicedesk.sibcem.ru:8080"
API_KEY = "" API_KEY = ""
# Пытаемся получить API_KEY из passwork # 1. Пробуем passwork напрямую
try: try:
# Пытаемся импортировать passwork напрямую
sys.path.insert(0, "/opt/passwork") sys.path.insert(0, "/opt/passwork")
from passwork import get_passwork_secrets from passwork import get_passwork_secrets
passwork_pool = get_passwork_secrets(required_cards=["sdesktoken"]) passwork_pool = get_passwork_secrets(required_cards=["sdesktoken"])
card = passwork_pool.get("sdesktoken") card = passwork_pool.get("sdesktoken")
if card: if card:
API_KEY = card.get("password", "").strip() API_KEY = card.get("password", "").strip()
print(f"LOG: 🔑 API_KEY получен из passwork (sdesktoken)") print("LOG: API_KEY получен из passwork (sdesktoken)")
else: else:
print("LOG: ⚠️ Карточка sdesktoken не найдена в passwork", file=sys.stderr) print("LOG: Карточка sdesktoken не найдена в passwork", file=sys.stderr)
except Exception as e: except Exception as e:
print(f"LOG: ⚠️ Passwork ошибка: {e}", file=sys.stderr) print(f"LOG: Passwork ошибка: {e}", file=sys.stderr)
# Fallback: пробуем config.py # 2. Пробуем config.py
if not API_KEY: if not API_KEY:
try: try:
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
import config as cfg import config as cfg
API_KEY = getattr(cfg, 'API_KEY', "") API_KEY = getattr(cfg, 'API_KEY', "")
if API_KEY: if API_KEY:
print("LOG: 🔑 API_KEY получен из config.py") print("LOG: API_KEY получен из config.py")
except Exception as e: except Exception:
print(f"LOG: ⚠️ Config ошибка: {e}", file=sys.stderr) pass
# Fallback: env var # 3. Пробуем env var
if not API_KEY: if not API_KEY:
API_KEY = os.environ.get("SD_API_KEY", "") API_KEY = os.environ.get("SD_API_KEY", "")
if API_KEY: if API_KEY:
print("LOG: 🔑 API_KEY получен из SD_API_KEY") print("LOG: API_KEY получен из SD_API_KEY")
if not API_KEY: if not API_KEY:
print("LOG: ОШИБКА: API_KEY не найден нигде! Нужен passwork или SD_API_KEY", file=sys.stderr) print("LOG: ОШИБКА: API_KEY не найден нигде! Нужен passwork или SD_API_KEY", file=sys.stderr)
sys.exit(1) sys.exit(1)
print(f"LOG: 🔑 Подключение к {SERVER_URL}") print(f"LOG: Подключение к {SERVER_URL}")
def get_ts(req): def get_ts(req):
ct = req.get("created_time", {}) ct = req.get("created_time", {})
@@ -70,7 +69,6 @@ def clean_html(text):
return text.strip() return text.strip()
def get_name(obj): def get_name(obj):
"""Извлечь имя из объекта группы/техника/категории."""
if not obj: if not obj:
return "" return ""
if isinstance(obj, dict): if isinstance(obj, dict):
@@ -78,7 +76,6 @@ def get_name(obj):
return str(obj) return str(obj)
def get_ticket_detail(ticket_id): def get_ticket_detail(ticket_id):
"""Получить детальную информацию по заявке."""
try: try:
url = f"{SERVER_URL}/api/v3/requests/{ticket_id}" url = f"{SERVER_URL}/api/v3/requests/{ticket_id}"
headers = {"authtoken": API_KEY, "Accept": "application/vnd.manageengine.sdp.v3+json"} headers = {"authtoken": API_KEY, "Accept": "application/vnd.manageengine.sdp.v3+json"}
@@ -93,20 +90,18 @@ def list_tickets(from_date="2026-07-20"):
url = f"{SERVER_URL}/api/v3/requests" url = f"{SERVER_URL}/api/v3/requests"
headers = {"authtoken": API_KEY, "Accept": "application/vnd.manageengine.sdp.v3+json"} headers = {"authtoken": API_KEY, "Accept": "application/vnd.manageengine.sdp.v3+json"}
# Вычисляем timestamp с указанной даты
date_obj = datetime.strptime(from_date, "%Y-%m-%d") date_obj = datetime.strptime(from_date, "%Y-%m-%d")
from_date_ms = int(date_obj.replace(tzinfo=__import__('datetime').timezone.utc).timestamp() * 1000) from_date_ms = int(date_obj.replace(tzinfo=__import__('datetime').timezone.utc).timestamp() * 1000)
print(f"LOG: 📥 Загрузка заявок с {from_date}...") print(f"LOG: Загрузка заявок с {from_date}...")
resp = requests.get(url, headers=headers, verify=False, timeout=30.0) resp = requests.get(url, headers=headers, verify=False, timeout=30.0)
resp.raise_for_status() resp.raise_for_status()
data = resp.json() data = resp.json()
all_reqs = data.get("requests", []) all_reqs = data.get("requests", [])
from_date_reqs = [r for r in all_reqs if get_ts(r) >= from_date_ms] from_date_reqs = [r for r in all_reqs if get_ts(r) >= from_date_ms]
print(f"LOG: 📋 Найдено заявок с {from_date}: {len(from_date_reqs)}") print(f"LOG: Найдено заявок с {from_date}: {len(from_date_reqs)}")
# Получаем детали для каждой заявки
rows = [] rows = []
for i, req in enumerate(from_date_reqs): for i, req in enumerate(from_date_reqs):
if (i + 1) % 10 == 0: if (i + 1) % 10 == 0:
@@ -115,19 +110,15 @@ def list_tickets(from_date="2026-07-20"):
req_id = req.get("request_id", req.get("id", "?")) req_id = req.get("request_id", req.get("id", "?"))
detail = get_ticket_detail(req_id) detail = get_ticket_detail(req_id)
# Группа — из списка
group = req.get("group", {}) group = req.get("group", {})
group_name = get_name(group) group_name = get_name(group)
# Описание — из детального запроса
desc = detail.get("description", "") desc = detail.get("description", "")
desc_clean = clean_html(desc) desc_clean = clean_html(desc)
# Назначено (специалист) — из детального запроса
tech = detail.get("technician", {}) tech = detail.get("technician", {})
assignee = get_name(tech) assignee = get_name(tech)
# Категория — из детального запроса
cat = detail.get("category", {}) cat = detail.get("category", {})
category = get_name(cat) category = get_name(cat)
@@ -138,11 +129,10 @@ def list_tickets(from_date="2026-07-20"):
"category": category "category": category
}) })
# Выводим JSONL
for row in rows: for row in rows:
print(json.dumps(row, ensure_ascii=False)) print(json.dumps(row, ensure_ascii=False))
print(f"LOG: Выведено {len(rows)} заявок", file=sys.stderr) print(f"LOG: Выведено {len(rows)} заявок", file=sys.stderr)
if __name__ == "__main__": if __name__ == "__main__":
from_date = sys.argv[1] if len(sys.argv) > 1 else "2026-07-20" from_date = sys.argv[1] if len(sys.argv) > 1 else "2026-07-20"