feat: TimescaleDB hypertable migration and README
Add hypertable migration that only runs on PostgreSQL (no-op for SQLite dev/tests). Update README with architecture, quick start, and client sync instructions. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
44
README.md
44
README.md
@@ -1,2 +1,46 @@
|
||||
# agent-base
|
||||
|
||||
OpenClaw Session Archive - 多 Agent 会话解析与归档系统。
|
||||
|
||||
## Architecture
|
||||
|
||||
Three nodes (Mac Mini, Ubuntu1, Ubuntu2) run a sync script that parses local JSONL session files and pushes structured data to a central Django API. The Django service runs in Docker Compose and stores data in a remote PostgreSQL + TimescaleDB instance on NAS.
|
||||
|
||||
## Quick Start
|
||||
|
||||
```bash
|
||||
# 1. Configure environment
|
||||
cp .env.example .env
|
||||
# Edit .env with your database credentials and Django settings
|
||||
|
||||
# 2. Build and start
|
||||
docker compose build
|
||||
docker compose run --rm web python manage.py migrate
|
||||
docker compose run --rm web python manage.py createsuperuser
|
||||
docker compose up -d
|
||||
|
||||
# 3. Access
|
||||
# Django Admin: http://<host>:8000/admin/
|
||||
# API: http://<host>:8000/api/sessions/bulk_upsert/
|
||||
```
|
||||
|
||||
## Running Tests
|
||||
|
||||
```bash
|
||||
pip install -r requirements-dev.txt
|
||||
pytest -v
|
||||
```
|
||||
|
||||
## Client Sync Script
|
||||
|
||||
Deploy `scripts/sync_sessions.py` on each node:
|
||||
|
||||
```bash
|
||||
python sync_sessions.py --remote-url http://<django-host>:8000/api/sessions/bulk_upsert/
|
||||
```
|
||||
|
||||
Set `SOURCE_NODE` environment variable on each node (`macmini`, `ubuntu1`, `ubuntu2`).
|
||||
|
||||
## Daily Export
|
||||
|
||||
In Django Admin, select sessions and choose "Export selected sessions to Markdown" action.
|
||||
|
||||
33
src/openclaw/migrations/0002_add_hypertables.py
Normal file
33
src/openclaw/migrations/0002_add_hypertables.py
Normal file
@@ -0,0 +1,33 @@
|
||||
from django.db import migrations, connection
|
||||
|
||||
CREATE_HYPERTABLES = """
|
||||
SELECT create_hypertable(
|
||||
'sessions',
|
||||
'start_time',
|
||||
if_not_exists => TRUE
|
||||
);
|
||||
|
||||
SELECT create_hypertable(
|
||||
'messages',
|
||||
'timestamp',
|
||||
if_not_exists => TRUE
|
||||
);
|
||||
"""
|
||||
|
||||
|
||||
def create_hypertables(apps, schema_editor):
|
||||
if connection.vendor != "postgresql":
|
||||
return
|
||||
with schema_editor.connection.cursor() as cursor:
|
||||
cursor.execute(CREATE_HYPERTABLES)
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
("openclaw", "0001_initial"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RunPython(create_hypertables, migrations.RunPython.noop),
|
||||
]
|
||||
Reference in New Issue
Block a user