Some checks failed
Update Documentation / update-repos-info (push) Has been cancelled
- Capability Registry (Postgres heartbeat) - NATS Client (підписка на streams) - Job Executor (виконання jobs) - Metrics Exporter (Prometheus) - Dockerfile для deployment - Виправлено server_name в NATS (emptyDir) TODO: Реальна реалізація embed/retrieve/summarize, Matrix Gateway, Auth
94 lines
3.3 KiB
Python
Executable File
94 lines
3.3 KiB
Python
Executable File
#!/usr/bin/env python3
|
||
"""
|
||
Ініціалізація NATS JetStream streams для Memory Module
|
||
Використання: python3 init-streams.py <nats-url>
|
||
"""
|
||
|
||
import sys
|
||
import json
|
||
import requests
|
||
from typing import Dict, Any
|
||
|
||
NATS_URL = sys.argv[1] if len(sys.argv) > 1 else "nats://nats-client.nats:4222"
|
||
NATS_HTTP = NATS_URL.replace("nats://", "http://").replace(":4222", ":8222")
|
||
|
||
def create_stream(stream_config: Dict[str, Any]) -> bool:
|
||
"""Створює stream через NATS HTTP API"""
|
||
url = f"{NATS_HTTP}/jsz?streams=1"
|
||
|
||
# NATS HTTP API використовує інший формат
|
||
# Спробуємо через JetStream API
|
||
try:
|
||
# Для створення stream потрібен NATS CLI або Go/Python клієнт
|
||
# Тимчасово використовуємо curl через kubectl exec
|
||
print(f"⚠️ Stream '{stream_config['name']}' потрібно створити через NATS CLI")
|
||
print(f" Використайте: kubectl exec -n nats nats-0 -- nats stream add {stream_config['name']} ...")
|
||
return False
|
||
except Exception as e:
|
||
print(f"❌ Помилка створення stream: {e}")
|
||
return False
|
||
|
||
def main():
|
||
print(f"🚀 Ініціалізація NATS JetStream streams...")
|
||
print(f"NATS URL: {NATS_URL}")
|
||
print(f"NATS HTTP: {NATS_HTTP}")
|
||
|
||
streams = [
|
||
{
|
||
"name": "MM_ONLINE",
|
||
"subjects": ["mm.embed.online", "mm.retrieve.online", "mm.summarize.online"],
|
||
"retention": "limits",
|
||
"max_age": 1800000000000, # 30 хв
|
||
"max_deliver": 3,
|
||
"ack_policy": "explicit",
|
||
"storage": "file",
|
||
"replicas": 2,
|
||
"discard": "old",
|
||
"duplicate_window": 300000000000
|
||
},
|
||
{
|
||
"name": "MM_OFFLINE",
|
||
"subjects": ["mm.embed.offline", "mm.index.offline", "mm.backfill.offline"],
|
||
"retention": "limits",
|
||
"max_age": 604800000000000, # 7 днів
|
||
"max_deliver": 10,
|
||
"ack_policy": "explicit",
|
||
"storage": "file",
|
||
"replicas": 2,
|
||
"discard": "old"
|
||
},
|
||
{
|
||
"name": "MM_WRITE",
|
||
"subjects": ["mm.qdrant.upsert", "mm.pg.write", "mm.neo4j.write"],
|
||
"retention": "limits",
|
||
"max_age": 604800000000000, # 7 днів
|
||
"max_deliver": 10,
|
||
"ack_policy": "explicit",
|
||
"storage": "file",
|
||
"replicas": 2,
|
||
"discard": "old"
|
||
},
|
||
{
|
||
"name": "MM_EVENTS",
|
||
"subjects": ["mm.event.audit", "mm.event.status"],
|
||
"retention": "limits",
|
||
"max_age": 2592000000000000, # 30 днів
|
||
"ack_policy": "explicit",
|
||
"storage": "file",
|
||
"replicas": 2,
|
||
"discard": "old"
|
||
}
|
||
]
|
||
|
||
print("\n📋 Streams для створення:")
|
||
for stream in streams:
|
||
print(f" - {stream['name']}: {', '.join(stream['subjects'])}")
|
||
|
||
print("\n⚠️ Для створення streams потрібен NATS CLI.")
|
||
print(" Використайте init-streams.sh або встановіть NATS CLI в контейнер.")
|
||
|
||
return 0
|
||
|
||
if __name__ == "__main__":
|
||
sys.exit(main())
|