alt/services/worker/cmd/alt-worker/main.go
toki ec938475e0 chore: socket rail implementation and task archival
- Add backtest and market socket handlers for API and Worker
- Add proto definitions for backtest and market services
- Update client socket integration and tests
- Generate protobuf code for Go and Dart
- Archive completed agent tasks under agent-task/archive/2026/05/
2026-05-30 22:57:18 +09:00

66 lines
1.8 KiB
Go

package main
import (
"context"
"fmt"
"log/slog"
"os"
"os/signal"
"syscall"
"github.com/jackc/pgx/v5/pgxpool"
"git.toki-labs.com/toki/alt/services/worker/internal/config"
"git.toki-labs.com/toki/alt/services/worker/internal/jobs"
"git.toki-labs.com/toki/alt/services/worker/internal/socket"
"git.toki-labs.com/toki/alt/services/worker/internal/storage/postgres"
)
func main() {
ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM)
defer stop()
cfg := config.Load()
runner := jobs.NewRunner()
jobs.RegisterBuiltins(runner)
// Store-backed socket surfaces are optional at process startup. If the pool
// cannot be constructed the worker still serves hello, while market/backtest
// handlers report unavailable instead of panicking.
var deps socket.Deps
pool, err := pgxpool.New(ctx, cfg.DatabaseURL)
if err != nil {
slog.Error("failed to create database pool; store-backed socket surfaces disabled", "error", err)
} else {
defer pool.Close()
store := postgres.NewStore(pool)
deps = socket.Deps{
Analysis: store,
Results: store,
Instruments: store,
Bars: store,
}
}
server := socket.NewServer(cfg, deps)
if err := server.Start(ctx); err != nil {
slog.Error("failed to start worker socket server", "error", err)
os.Exit(1)
}
slog.Info("worker ready",
"redis_key_prefix", cfg.RedisKeyPrefix,
"worker_queue", cfg.WorkerQueue,
"handlers", runner.Len(),
"backtest_read_surface", deps.Analysis != nil,
"backtest_start_surface", deps.Starter != nil,
"market_read_surface", deps.Instruments != nil && deps.Bars != nil,
"addr", fmt.Sprintf("%s:%d%s", cfg.Host, cfg.Port, cfg.SocketPath),
)
<-ctx.Done()
if err := server.Stop(); err != nil {
slog.Error("failed to stop worker socket server", "error", err)
os.Exit(1)
}
}