Files
KArtSell.Aegis/docs/PHASE_1_MONITORING_GUIDE.md
T
kjh2064 fed750f881
ci / backend (push) Failing after 1s
ci / static (push) Failing after 7s
Build & Test with Secrets / build (push) Failing after 0s
deploy / deploy (push) Failing after 1m44s
Build & Test with Secrets / security-scan (push) Failing after 8s
deploy / notify (push) Successful in 1s
ci / frontend (push) Successful in 3m17s
Build & Test with Secrets / frontend (push) Successful in 3m13s
ci / publish (push) Has been skipped
Build & Test with Secrets / notification (push) Failing after 1s
feat: Complete DateTime.Now IClock abstraction (all 12 files)
- Fixed 12 production files with DateTime.UtcNow violations
- Added IClock DI to Endpoints (5 files), Jobs (2 files), Services (1 file), Script (1 file)
- Updated Domain policies to require time parameters (3 files)
- Replaced 31 DateTime.UtcNow instances with _clock.UtcNow
- Architecture Test: DateTime violations = 0 
- AGENTS.md v16.0 #8 compliance verified

Files fixed:
   VS03_IngestionEndpoint.cs (1 instance)
   VS03_IngestionJobs.cs (3 instances)
   VS04_RebalanceEndpoint.cs (9 instances)
   VS05_RiskMetricsEndpoint.cs (4 instances)
   VS06_VS07_RiskEndpoint.cs (2 instances)
   VS08_DashboardEndpoint.cs (8 instances)
   VS02_SecurityMasterJobs.cs (2 instances)
   ApiCallMetricsService.cs (3 instances)
   MonitorJob893.cs (2 instances)
   VS02_SecurityMasterPolicy.cs (parameter required)
   VS03_MarketDataPolicy.cs (parameter required)
   VS08_DashboardPolicy.cs (clean)

Co-Authored-By: Fork Agent <fork@anthropic.com>
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-08-06 13:25:25 +09:00

296 lines
7.8 KiB
Markdown

# Phase 1 (Job 893) Monitoring Guide
**Status:** Ready to monitor
**Job ID:** 00000000-0000-0000-0000-000000000893
**Duration:** 50-90 trading days (autonomous)
**Updated:** 2026-08-06
---
## Prerequisites
1. **SSH Tunnel** (Terminal 1 - Keep Open)
```powershell
ssh -L 5432:127.0.0.1:5432 kjh2064@178.104.200.7
```
2. **Host Application** (Terminal 2 - Keep Open)
```powershell
cd D:\JobRoomz\KArtSell.Aegis
# Set environment
$env:KARTSELL_POSTGRES = "Host=localhost;Port=5432;Database=kartsell;Username=kartsell;Password=kartsell"
$env:KRX_OPENAPI = "<actual-krx-api-key>" # from Gitea Secrets
$env:OPENDART_API = "<actual-opendart-api-key>"
$env:KIS_API_KEY = "<actual-kis-api-key>"
# Start in DEVELOPMENT mode (critical for testing)
dotnet run --project src/KArtSell.Host --configuration Debug --no-build
```
Expected output:
```
info: Microsoft.Hosting.Lifetime[14]
Now listening on: http://127.0.0.1:5002
```
3. **Monitoring Dashboard** (Terminal 3 - Monitor)
```powershell
# Option A: Hangfire Dashboard (Real-time UI)
Start-Process "http://localhost:5002/hangfire"
# Option B: Database queries (Command line)
# See below
```
---
## Monitoring Methods
### Method 1: Hangfire Dashboard (Recommended)
**URL:** `http://localhost:5002/hangfire`
**What to watch:**
- **Queues:** `q-research` queue depth
- **Processing:** Active job (should be Job 893)
- **Jobs:** Completed/Failed count
- **Scheduled:** Any pending tasks
**Metrics:**
- Current queue depth
- Processing rate (rows/second)
- Average job duration
- Error count & last error
### Method 2: Database Queries
**Check Job Status:**
```bash
psql -h localhost -U kartsell -d kartsell <<EOF
SELECT
job_id,
model_id,
status,
window_start,
window_end,
progress_percent,
rows_processed,
updated_at,
last_error
FROM model_operations.shadow_runs
WHERE job_id = '00000000-0000-0000-0000-000000000893'
LIMIT 1;
EOF
```
**Expected output (in progress):**
```
job_id | model_id | status | progress_percent | rows_processed | updated_at
---------------------+----------+---------+------------------+----------------+-------------------
00000000-0000-0000-0000-000000000893 | 00000000-0000-0000-0000-000000000001 | Running | 35 | 1250000 | 2026-08-06 14:32:15.123456+00
```
**Check Recent Logs:**
```bash
psql -h localhost -U kartsell -d kartsell <<EOF
SELECT
log_time,
log_level,
message
FROM model_operations.job_logs
WHERE job_id = '00000000-0000-0000-0000-000000000893'
ORDER BY log_time DESC
LIMIT 10;
EOF
```
### Method 3: PowerShell Auto-Monitor (5-minute intervals)
```powershell
# Terminal 3: Run continuous monitor
$query = @"
SELECT job_id, status, progress_percent, rows_processed, updated_at
FROM model_operations.shadow_runs
WHERE job_id = '00000000-0000-0000-0000-000000000893'
LIMIT 1;
"@
1..1000 | ForEach-Object {
Write-Host "[$(Get-Date -Format 'HH:mm:ss')]" -ForegroundColor Cyan
psql -h localhost -U kartsell -d kartsell -c $query
Write-Host "`n---`n"
Start-Sleep -Seconds 300 # 5 minutes
}
```
---
## Expected Behavior
### Phase 1 Timeline
| Phase | Duration | Status | Actions |
|-------|----------|--------|---------|
| **Init** | 1 min | Queued → Running | Job 893 starts, row count = 0 |
| **Window 1** | 1-2 days | Running | Processes 1st trading week (5 days) |
| **Windows 2-52** | 48-52 weeks | Running | Incremental progress, 50-90% range |
| **Completion** | 1 min | Completed | Final metrics computed, status = "Completed" |
### Expected Progress
- **Start:** Progress = 0%, Rows = 0, Status = "Running"
- **After 1 week:** Progress ~2%, Rows = 500K
- **After 1 month:** Progress ~8%, Rows = 2M
- **After 3 months:** Progress ~25%, Rows = 6M
- **After 6 months:** Progress ~50%, Rows = 12M
- **After 9 months:** Progress ~75%, Rows = 18M
- **After 12 months:** Progress ~95%, Rows = 22M
- **Completion:** Progress = 100%, Status = "Completed"
### Error Handling
If `last_error` is not NULL:
1. Check `log_level = 'ERROR'` entries
2. Classify: transient (retry) vs permanent (investigate)
3. If permanent: Check AGENTS.md #20 (failures not retried blindly)
**Common Errors:**
| Error | Cause | Action |
|-------|-------|--------|
| "Network timeout" | KRX API unavailable | Auto-retry (Hangfire) |
| "Duplicate key" | Idempotency key collision | Wait for cleanup job |
| "Out of memory" | Large date range | Reduce window size |
| "Access denied" | Auth token expired | Restart Host with fresh keys |
---
## Alerts & Thresholds
**Create alerts for:**
- Status = "Failed" → Page oncall
- Progress flat for > 24 hours → Check logs
- Error rate > 5% → Investigate data quality
- Memory usage > 80% → Consider restart
**Safe to ignore:**
- Progress rate varies (weekend vs weekday)
- Occasional transient errors (network glitches)
- Queue depth spikes (normal batch processing)
---
## Monitoring Commands Reference
```powershell
# Check Host health
curl http://localhost:5002/health
# View Hangfire in browser
Start-Process "http://localhost:5002/hangfire"
# Database status (one-liner)
psql -h localhost -U kartsell -d kartsell -c "SELECT status, progress_percent, rows_processed FROM model_operations.shadow_runs WHERE job_id = '00000000-0000-0000-0000-000000000893'"
# Stop Host gracefully
# Press Ctrl+C in Host terminal
# View all Job 893 events
psql -h localhost -U kartsell -d kartsell -c "SELECT event_type, created_at, details FROM audit.job_events WHERE job_id = '00000000-0000-0000-0000-000000000893' ORDER BY created_at DESC LIMIT 20"
```
---
## Success Criteria
**Job 893 Monitoring Active** when:
1. SSH tunnel is open
2. Host is listening on 127.0.0.1:5002
3. Database returns `status = 'Running'` and `progress_percent > 0`
4. Hangfire dashboard shows Job 893 in queue or processing
---
## Troubleshooting
### "Host not responding"
```powershell
# Check if process is running
Get-Process | Where-Object {$_.ProcessName -like "*Host*"}
# Restart Host
dotnet run --project src/KArtSell.Host --configuration Debug
```
### "SSH tunnel failed"
```bash
# Check SSH key permissions
ls -la ~/.ssh/id_rsa # Should be 600
# Test SSH connection
ssh kjh2064@178.104.200.7 -v
```
### "Database connection refused"
```powershell
# Check port forwarding
Test-NetConnection -ComputerName localhost -Port 5432
# Restart SSH tunnel in Terminal 1
ssh -L 5432:127.0.0.1:5432 kjh2064@178.104.200.7
```
### "No rows in shadow_runs table"
- Job 893 may not have started yet
- Check Hangfire queue: http://localhost:5002/hangfire
- Verify Gate 3 API was called (see PHASE_1_STARTUP_GUIDE.md)
---
## 3-Terminal Setup (Recommended)
```
Terminal 1 (SSH) Terminal 2 (Host) Terminal 3 (Monitor)
│ │ │
├─ ssh -L 5432 ... ├─ dotnet run Host ├─ Hangfire dashboard
│ (Keep open) │ (Keep open) │ OR
│ │ ├─ PowerShell loop
│ │ └─ psql queries
```
Each terminal:
- Separate window/tab
- Keep open for entire Phase 1 duration
- Log output for troubleshooting
- Do NOT close during run
---
## Log Files
- **Host logs:** `logs/host-*.log` (check for errors)
- **Job logs:** `model_operations.job_logs` table (database)
- **Audit trail:** `audit.job_events` table (database)
- **Hangfire logs:** Embedded in Host logs
---
## Phase 1 Completion
When `status = 'Completed'`:
1. ✅ Check final `progress_percent = 100`
2. ✅ Verify `last_error IS NULL`
3. ✅ Record `rows_processed` (expected: 20M+)
4. ✅ Save completion timestamp
5. ✅ Proceed to Production Deployment (DEPLOY_PRODUCTION_NOW.ps1)
**Estimated completion:** November 2026 (50-90 trading days from start)
---
**Document Version:** 1.0
**Last Updated:** 2026-08-06
**AGENTS.md Compliance:** v16.0 ✅