Files
microdao-daarion/infrastructure/nats/init-streams.py
Apple a688666fa1
Some checks failed
Update Documentation / update-repos-info (push) Has been cancelled
🔧 Worker Daemon: базова реалізація v1
- 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
2026-01-10 10:24:13 -08:00

94 lines
3.3 KiB
Python
Executable File
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 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())