diff --git a/fetch_tickets.py b/fetch_tickets.py index 21a2ad0..9cf63b5 100644 --- a/fetch_tickets.py +++ b/fetch_tickets.py @@ -13,47 +13,46 @@ import os # Отключаем ворнинги для чистой работы консоли urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) -# --- ИМПОРТ КОНФИГУРАЦИИ --- +# --- ПОЛУЧЕНИЕ API_KEY ИЗ PASSWORK --- SERVER_URL = "https://servicedesk.sibcem.ru:8080" API_KEY = "" -# Пытаемся получить API_KEY из passwork +# 1. Пробуем passwork напрямую try: - # Пытаемся импортировать passwork напрямую sys.path.insert(0, "/opt/passwork") from passwork import get_passwork_secrets passwork_pool = get_passwork_secrets(required_cards=["sdesktoken"]) card = passwork_pool.get("sdesktoken") if card: API_KEY = card.get("password", "").strip() - print(f"LOG: 🔑 API_KEY получен из passwork (sdesktoken)") + print("LOG: API_KEY получен из passwork (sdesktoken)") else: - print("LOG: ⚠️ Карточка sdesktoken не найдена в passwork", file=sys.stderr) + print("LOG: Карточка sdesktoken не найдена в passwork", file=sys.stderr) 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: try: sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) import config as cfg API_KEY = getattr(cfg, 'API_KEY', "") if API_KEY: - print("LOG: 🔑 API_KEY получен из config.py") - except Exception as e: - print(f"LOG: ⚠️ Config ошибка: {e}", file=sys.stderr) + print("LOG: API_KEY получен из config.py") + except Exception: + pass -# Fallback: env var +# 3. Пробуем env var if not API_KEY: API_KEY = os.environ.get("SD_API_KEY", "") if API_KEY: - print("LOG: 🔑 API_KEY получен из SD_API_KEY") + print("LOG: API_KEY получен из SD_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) -print(f"LOG: 🔑 Подключение к {SERVER_URL}") +print(f"LOG: Подключение к {SERVER_URL}") def get_ts(req): ct = req.get("created_time", {}) @@ -70,7 +69,6 @@ def clean_html(text): return text.strip() def get_name(obj): - """Извлечь имя из объекта группы/техника/категории.""" if not obj: return "" if isinstance(obj, dict): @@ -78,7 +76,6 @@ def get_name(obj): return str(obj) def get_ticket_detail(ticket_id): - """Получить детальную информацию по заявке.""" try: url = f"{SERVER_URL}/api/v3/requests/{ticket_id}" 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" headers = {"authtoken": API_KEY, "Accept": "application/vnd.manageengine.sdp.v3+json"} - # Вычисляем timestamp с указанной даты date_obj = datetime.strptime(from_date, "%Y-%m-%d") 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.raise_for_status() data = resp.json() all_reqs = data.get("requests", []) 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 = [] for i, req in enumerate(from_date_reqs): 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", "?")) detail = get_ticket_detail(req_id) - # Группа — из списка group = req.get("group", {}) group_name = get_name(group) - # Описание — из детального запроса desc = detail.get("description", "") desc_clean = clean_html(desc) - # Назначено (специалист) — из детального запроса tech = detail.get("technician", {}) assignee = get_name(tech) - # Категория — из детального запроса cat = detail.get("category", {}) category = get_name(cat) @@ -138,11 +129,10 @@ def list_tickets(from_date="2026-07-20"): "category": category }) - # Выводим JSONL for row in rows: 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__": from_date = sys.argv[1] if len(sys.argv) > 1 else "2026-07-20"