Migrate Advoware Proxy steps from old-motia
- Added services/advoware.py: Advoware API client with Redis token caching - Added advoware_proxy steps (GET, POST, PUT, DELETE) - Updated pyproject.toml: added aiohttp, redis, python-dotenv - Updated iii-config.yaml: fixed ExecModule command to use full path - Created MIGRATION_STATUS.md: documentation of migration progress All 4 proxy endpoints registered successfully: - GET /advoware/proxy - POST /advoware/proxy - PUT /advoware/proxy - DELETE /advoware/proxy
This commit is contained in:
178
MIGRATION_STATUS.md
Normal file
178
MIGRATION_STATUS.md
Normal file
@@ -0,0 +1,178 @@
|
||||
# Motia Migration Status
|
||||
|
||||
## Overview
|
||||
Migrating from **old-motia v0.17** (Node.js + Python hybrid) to **Motia III v1.0-RC** (pure Python).
|
||||
|
||||
## Old System Analysis
|
||||
|
||||
### Location
|
||||
- Old system: `/opt/motia-iii/old-motia/`
|
||||
- Old project dir: `/opt/motia-iii/old-motia/bitbylaw/`
|
||||
|
||||
### Steps Found in Old System
|
||||
|
||||
#### Root Steps (`/opt/motia-iii/old-motia/steps/`)
|
||||
1. `crm-bbl-vmh-reset-nextcall_step.py`
|
||||
2. `event_step.py`
|
||||
3. `hello_step.py`
|
||||
|
||||
#### BitByLaw Steps (`/opt/motia-iii/old-motia/bitbylaw/steps/`)
|
||||
|
||||
**Advoware Calendar Sync** (`advoware_cal_sync/`):
|
||||
- `calendar_sync_all_step.py`
|
||||
- `calendar_sync_api_step.py`
|
||||
- `calendar_sync_cron_step.py`
|
||||
- `calendar_sync_event_step.py`
|
||||
- `audit_calendar_sync.py`
|
||||
- `calendar_sync_utils.py` (utility module)
|
||||
|
||||
**Advoware Proxy** (`advoware_proxy/`):
|
||||
- `advoware_api_proxy_get_step.py`
|
||||
- `advoware_api_proxy_post_step.py`
|
||||
- `advoware_api_proxy_put_step.py`
|
||||
- `advoware_api_proxy_delete_step.py`
|
||||
|
||||
**VMH Integration** (`vmh/`):
|
||||
- `beteiligte_sync_cron_step.py`
|
||||
- `beteiligte_sync_event_step.py`
|
||||
- `bankverbindungen_sync_event_step.py`
|
||||
- `webhook/bankverbindungen_create_api_step.py`
|
||||
- `webhook/bankverbindungen_update_api_step.py`
|
||||
- `webhook/bankverbindungen_delete_api_step.py`
|
||||
- `webhook/beteiligte_create_api_step.py`
|
||||
- `webhook/beteiligte_update_api_step.py`
|
||||
- `webhook/beteiligte_delete_api_step.py`
|
||||
|
||||
### Supporting Services/Modules
|
||||
|
||||
From `/opt/motia-iii/old-motia/bitbylaw/`:
|
||||
- `services/advoware.py` - Advoware API wrapper
|
||||
- `config.py` - Configuration module
|
||||
- Dependencies: PostgreSQL, Redis, Google Calendar API
|
||||
|
||||
## Migration Changes Required
|
||||
|
||||
### Key Structural Changes
|
||||
|
||||
#### 1. Config Format
|
||||
```python
|
||||
# OLD
|
||||
config = {
|
||||
"type": "api", # or "event", "cron"
|
||||
"name": "StepName",
|
||||
"path": "/endpoint",
|
||||
"method": "GET",
|
||||
"cron": "0 5 * * *",
|
||||
"subscribes": ["topic"],
|
||||
"emits": ["other-topic"]
|
||||
}
|
||||
|
||||
# NEW
|
||||
from motia import http, queue, cron
|
||||
|
||||
config = {
|
||||
"name": "StepName",
|
||||
"flows": ["flow-name"],
|
||||
"triggers": [
|
||||
http("GET", "/endpoint")
|
||||
# or queue("topic", input=schema)
|
||||
# or cron("0 0 5 * * *") # 6-field!
|
||||
],
|
||||
"enqueues": ["other-topic"]
|
||||
}
|
||||
```
|
||||
|
||||
#### 2. Handler Signature
|
||||
```python
|
||||
# OLD - API
|
||||
async def handler(req, context):
|
||||
body = req.get('body', {})
|
||||
await context.emit({"topic": "x", "data": {...}})
|
||||
return {"status": 200, "body": {...}}
|
||||
|
||||
# NEW - API
|
||||
from motia import ApiRequest, ApiResponse, FlowContext
|
||||
|
||||
async def handler(request: ApiRequest, ctx: FlowContext) -> ApiResponse:
|
||||
body = request.body
|
||||
await ctx.enqueue({"topic": "x", "data": {...}})
|
||||
return ApiResponse(status=200, body={...})
|
||||
|
||||
# OLD - Event/Queue
|
||||
async def handler(data, context):
|
||||
context.logger.info(data['field'])
|
||||
|
||||
# NEW - Queue
|
||||
async def handler(input_data: dict, ctx: FlowContext):
|
||||
ctx.logger.info(input_data['field'])
|
||||
|
||||
# OLD - Cron
|
||||
async def handler(context):
|
||||
context.logger.info("Running")
|
||||
|
||||
# NEW - Cron
|
||||
async def handler(input_data: dict, ctx: FlowContext):
|
||||
ctx.logger.info("Running")
|
||||
```
|
||||
|
||||
#### 3. Method Changes
|
||||
- `context.emit()` → `ctx.enqueue()`
|
||||
- `req.get('body')` → `request.body`
|
||||
- `req.get('queryParams')` → `request.query_params`
|
||||
- `req.get('pathParams')` → `request.path_params`
|
||||
- `req.get('headers')` → `request.headers`
|
||||
- Return dict → `ApiResponse` object
|
||||
|
||||
#### 4. Cron Format
|
||||
- OLD: 5-field `"0 5 * * *"` (minute hour day month weekday)
|
||||
- NEW: 6-field `"0 0 5 * * *"` (second minute hour day month weekday)
|
||||
|
||||
## Migration Strategy
|
||||
|
||||
### Phase 1: Simple Steps (Priority)
|
||||
Start with simple API proxy steps as they're straightforward:
|
||||
1. ✅ Example ticketing steps (already in new system)
|
||||
2. ⏳ Advoware proxy steps (GET, POST, PUT, DELETE)
|
||||
3. ⏳ Simple webhook handlers
|
||||
|
||||
### Phase 2: Complex Integration Steps
|
||||
Steps with external dependencies:
|
||||
4. ⏳ VMH sync steps (beteiligte, bankverbindungen)
|
||||
5. ⏳ Calendar sync steps (most complex - Google Calendar + Redis + PostgreSQL)
|
||||
|
||||
### Phase 3: Supporting Infrastructure
|
||||
- Migrate `services/` modules (advoware.py wrapper)
|
||||
- Migrate `config.py` to use environment variables properly
|
||||
- Update dependencies in `pyproject.toml`
|
||||
|
||||
### Dependencies to Review
|
||||
From old `requirements.txt` and code analysis:
|
||||
- `asyncpg` - PostgreSQL async driver
|
||||
- `redis` - Redis client
|
||||
- `google-api-python-client` - Google Calendar API
|
||||
- `google-auth` - Google OAuth2
|
||||
- `backoff` - Retry/backoff decorator
|
||||
- `pytz` - Timezone handling
|
||||
- `pydantic` - Already in new system
|
||||
- `requests` / `aiohttp` - HTTP clients for Advoware API
|
||||
|
||||
## Status
|
||||
|
||||
### Completed
|
||||
- ✅ Analysis of old system structure
|
||||
- ✅ MIGRATION_GUIDE.md reviewed
|
||||
- ✅ Migration patterns documented
|
||||
- ✅ New system has example ticketing steps
|
||||
|
||||
### Next Steps
|
||||
1. Start with Advoware proxy steps (simplest)
|
||||
2. Migrate supporting services/modules
|
||||
3. Progress to VMH integration
|
||||
4. Finalize with complex calendar sync
|
||||
|
||||
## Notes
|
||||
- Old system was Node.js + Python hybrid (Python steps as child processes)
|
||||
- New system is pure Python (standalone SDK)
|
||||
- No need for Node.js/npm anymore
|
||||
- iii engine handles all infrastructure (queues, state, HTTP, cron)
|
||||
- Console replaced Workbench
|
||||
Reference in New Issue
Block a user