- Add migration 013_city_map_coordinates.sql with map coordinates, zones, and agents table - Add /city/map API endpoint in city-service - Add /city/agents and /city/agents/online endpoints - Extend presence aggregator to include agents[] in snapshot - Add AgentsSource for fetching agent data from DB - Create CityMap component with interactive room tiles - Add useCityMap hook for fetching map data - Update useGlobalPresence to include agents - Add map/list view toggle on /city page - Add agent badges to room cards and map tiles
349 lines
9.0 KiB
Markdown
349 lines
9.0 KiB
Markdown
# 🏙️ DAARION City Service
|
||
|
||
**Версія:** 1.0.0
|
||
**Статус:** Development (Mock Data)
|
||
**Порт:** 7001
|
||
|
||
---
|
||
|
||
## 📋 Опис
|
||
|
||
City Service — це агрегатор даних для City Dashboard в екосистемі DAARION. Збирає та об'єднує інформацію з різних джерел для створення повного знімку стану міста.
|
||
|
||
### Функціонал
|
||
|
||
- 📊 **City Snapshot** — повний знімок стану міста
|
||
- 👤 **User Context** — профіль користувача та archetype
|
||
- 🏛️ **MicroDAO State** — стан microDAO користувача
|
||
- 📈 **Metrics Aggregation** — глобальні метрики міста
|
||
- 🖥️ **Node Status** — стан усіх нод
|
||
- 🤖 **Agent Presence** — активні агенти
|
||
- 🎯 **Quests** — активні квести
|
||
- 📡 **Events Feed** — останні події міста
|
||
|
||
---
|
||
|
||
## 🚀 Швидкий старт
|
||
|
||
### Через Docker Compose
|
||
|
||
```bash
|
||
# З кореня проєкту
|
||
./scripts/start-city-space-services.sh
|
||
```
|
||
|
||
### Локально (Development)
|
||
|
||
```bash
|
||
cd services/city-service
|
||
|
||
# Створити віртуальне середовище
|
||
python -m venv venv
|
||
source venv/bin/activate # Linux/Mac
|
||
# або venv\Scripts\activate # Windows
|
||
|
||
# Встановити залежності
|
||
pip install -r requirements.txt
|
||
|
||
# Запустити сервіс
|
||
python main.py
|
||
|
||
# Або через uvicorn
|
||
uvicorn main:app --reload --port 7001
|
||
```
|
||
|
||
---
|
||
|
||
## 📡 API Endpoints
|
||
|
||
### **GET** `/health`
|
||
|
||
Health check endpoint
|
||
|
||
**Response:**
|
||
```json
|
||
{
|
||
"status": "healthy",
|
||
"service": "city-service"
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### **GET** `/api/city/snapshot`
|
||
|
||
Повертає повний знімок стану міста DAARION
|
||
|
||
**Response:** `CitySnapshot`
|
||
|
||
```json
|
||
{
|
||
"user": {
|
||
"id": "user:93",
|
||
"handle": "@alice:daarion.city",
|
||
"archetype": "Explorer",
|
||
"microdaoId": "microdao:7"
|
||
},
|
||
"microdao": {
|
||
"id": "microdao:7",
|
||
"name": "Quantum Garden",
|
||
"members": 7,
|
||
"humans": 4,
|
||
"agents": 3,
|
||
"balanceDcr": 12820,
|
||
"activity24h": 0.84
|
||
},
|
||
"metrics": {
|
||
"activityIndex": 0.71,
|
||
"avgAgentLatencyMs": 13,
|
||
"natsTps": 48200,
|
||
"nodeAvgLoad": 0.66,
|
||
"errorRate": 0.009,
|
||
"questEngagement": 0.62
|
||
},
|
||
"nodes": [...],
|
||
"agents": [...],
|
||
"quests": [...],
|
||
"events": [...]
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 🗺️ Схема агрегації даних
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────┐
|
||
│ City Service │
|
||
│ (Port: 7001) │
|
||
└─────────────────────────────────────────────────────────┘
|
||
│
|
||
┌───────────────┼───────────────┐
|
||
│ │ │
|
||
▼ ▼ ▼
|
||
┌─────────────┐ ┌─────────────┐ ┌──────────────┐
|
||
│ Auth / │ │ microDAO │ │ Metrics │
|
||
│ Profile │ │ Service │ │ Collector │
|
||
│ Service │ │ │ │ │
|
||
└─────────────┘ └─────────────┘ └──────────────┘
|
||
│
|
||
┌────────────────────────┤
|
||
│ │
|
||
▼ ▼
|
||
┌──────────────┐ ┌──────────────┐
|
||
│ NATS │ │ Redis / │
|
||
│ JetStream │ │ Timescale │
|
||
└──────────────┘ └──────────────┘
|
||
│
|
||
┌───────┴────────┐
|
||
│ │
|
||
▼ ▼
|
||
┌──────────────┐ ┌──────────────┐
|
||
│ NodeMetrics │ │ Agent │
|
||
│ Agent │ │ Registry │
|
||
└──────────────┘ └──────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
## 📊 Джерела даних
|
||
|
||
| Поле | Джерело | NATS Subject |
|
||
| ---------- | ----------------------------------------- | ------------------------- |
|
||
| `user` | Auth / Profile service | `user.profile.*` |
|
||
| `microdao` | microDAO service | `microdao.state.*` |
|
||
| `metrics` | Metrics collector (NATS → Redis/TSDB) | `metrics.city.*` |
|
||
| `nodes` | NodeMetrics Agent (NATS `node.metrics.*`) | `node.metrics.*` |
|
||
| `agents` | Agent Registry | `agent.status.*` |
|
||
| `quests` | Quest Engine | `quest.active.*` |
|
||
| `events` | JetStream Stream `events.city.*` | `events.city.*` |
|
||
|
||
---
|
||
|
||
## 🔧 Конфігурація
|
||
|
||
### Environment Variables
|
||
|
||
```bash
|
||
# Service
|
||
LOG_LEVEL=INFO
|
||
ENVIRONMENT=development
|
||
|
||
# Redis (для кешу метрик)
|
||
REDIS_URL=redis://redis:6379
|
||
|
||
# NATS (для підписки на події)
|
||
NATS_URL=nats://nats:4222
|
||
|
||
# PostgreSQL (для user/microDAO даних)
|
||
DATABASE_URL=postgresql://postgres:postgres@postgres:5432/daarion
|
||
|
||
# CORS
|
||
CORS_ORIGINS=http://localhost:8899,https://daarion.city
|
||
```
|
||
|
||
---
|
||
|
||
## 🏗️ Структура проєкту
|
||
|
||
```
|
||
services/city-service/
|
||
├── main.py # FastAPI application
|
||
├── requirements.txt # Python dependencies
|
||
├── Dockerfile # Docker image
|
||
├── README.md # Ця документація
|
||
├── models/ # Pydantic models (TODO)
|
||
│ ├── __init__.py
|
||
│ ├── city.py
|
||
│ └── response.py
|
||
├── services/ # Business logic (TODO)
|
||
│ ├── __init__.py
|
||
│ ├── aggregator.py # Data aggregation
|
||
│ ├── nats_client.py # NATS integration
|
||
│ └── redis_client.py # Redis integration
|
||
└── tests/ # Unit tests (TODO)
|
||
├── __init__.py
|
||
└── test_api.py
|
||
```
|
||
|
||
---
|
||
|
||
## 🧪 Тестування
|
||
|
||
```bash
|
||
# Health check
|
||
curl http://localhost:7001/health
|
||
|
||
# Get city snapshot
|
||
curl http://localhost:7001/api/city/snapshot
|
||
|
||
# Через API Gateway
|
||
curl http://localhost:8080/api/city/snapshot
|
||
```
|
||
|
||
### Expected Response Time
|
||
|
||
- `/health`: < 10ms
|
||
- `/api/city/snapshot`: < 100ms (з кешем)
|
||
|
||
---
|
||
|
||
## 📈 Моніторинг
|
||
|
||
### Health Checks
|
||
|
||
```bash
|
||
# Docker health check
|
||
docker inspect daarion-city-service | grep Health
|
||
|
||
# Manual health check
|
||
curl -f http://localhost:7001/health || exit 1
|
||
```
|
||
|
||
### Logs
|
||
|
||
```bash
|
||
# Follow logs
|
||
docker logs -f daarion-city-service
|
||
|
||
# Last 100 lines
|
||
docker logs --tail 100 daarion-city-service
|
||
```
|
||
|
||
### Metrics (TODO)
|
||
|
||
- Prometheus endpoint: `/metrics`
|
||
- Grafana dashboard: City Service Overview
|
||
|
||
---
|
||
|
||
## 🚨 Troubleshooting
|
||
|
||
### Service not starting
|
||
|
||
```bash
|
||
# Check logs
|
||
docker logs daarion-city-service
|
||
|
||
# Rebuild
|
||
docker-compose -f docker-compose.city-space.yml up -d --build city-service
|
||
```
|
||
|
||
### CORS errors
|
||
|
||
```bash
|
||
# Check CORS_ORIGINS environment variable
|
||
docker exec daarion-city-service env | grep CORS
|
||
```
|
||
|
||
### Slow response times
|
||
|
||
- Перевір з'єднання з Redis
|
||
- Перевір з'єднання з NATS
|
||
- Переглянь логи для помилок агрегації
|
||
|
||
---
|
||
|
||
## 🗺️ Roadmap
|
||
|
||
### Phase 1: Mock Data ✅
|
||
- [x] FastAPI application
|
||
- [x] Mock city snapshot
|
||
- [x] OpenAPI documentation
|
||
- [x] Docker setup
|
||
|
||
### Phase 2: Real Data Integration (Current)
|
||
- [ ] NATS client integration
|
||
- [ ] Redis client integration
|
||
- [ ] PostgreSQL integration
|
||
- [ ] Real-time metrics aggregation
|
||
- [ ] User profile integration
|
||
- [ ] MicroDAO state integration
|
||
|
||
### Phase 3: WebSocket Support
|
||
- [ ] `/ws/city` — real-time city updates
|
||
- [ ] `/ws/events` — event stream
|
||
- [ ] `/ws/metrics` — live metrics
|
||
|
||
### Phase 4: Optimization
|
||
- [ ] Response caching
|
||
- [ ] Query optimization
|
||
- [ ] Load testing
|
||
- [ ] Horizontal scaling
|
||
|
||
---
|
||
|
||
## 📚 Документація
|
||
|
||
- **OpenAPI Docs:** http://localhost:7001/docs
|
||
- **ReDoc:** http://localhost:7001/redoc
|
||
- **OpenAPI JSON:** http://localhost:7001/openapi.json
|
||
|
||
---
|
||
|
||
## 🤝 Contributing
|
||
|
||
1. Створи feature branch
|
||
2. Додай тести
|
||
3. Оновити документацію
|
||
4. Створи PR
|
||
|
||
---
|
||
|
||
## 📄 License
|
||
|
||
Proprietary — DAARION Ecosystem
|
||
|
||
---
|
||
|
||
## 📞 Контакти
|
||
|
||
- **Maintainer:** DAARION Core Team
|
||
- **Issues:** GitHub Issues
|
||
- **Slack:** #city-service
|
||
|
||
|
||
|
||
|
||
|