feat: expose result subscription HTTP and WebSocket APIs

This commit is contained in:
2026-09-17 19:57:55 +08:00
parent 1c3300cc5b
commit 8485a662b2
38 changed files with 3462 additions and 26 deletions

View File

@@ -15,6 +15,7 @@ import (
"git.yuntuo.hk/k2safe/orbit/internal/storage/mysql"
"git.yuntuo.hk/k2safe/orbit/internal/transport/httpserver"
core "git.yuntuo.hk/k2safe/orbit/model"
"git.yuntuo.hk/k2safe/orbit/platform/events"
"git.yuntuo.hk/k2safe/orbit/platform/resources"
"git.yuntuo.hk/k2safe/orbit/pulse/schedule"
"git.yuntuo.hk/k2safe/orbit/pulse/service"
@@ -64,6 +65,15 @@ func run() error {
}
hub := httpserver.NewWorkerHub(root, worker.New(executions))
httpserver.RegisterWorkers(server, hub)
eventService := events.New(mysql.NewEventStore(db))
eventHub := httpserver.NewEventHub(root, eventService)
httpserver.RegisterEventSubscriptions(server, eventService)
httpserver.RegisterEventConsumers(server, eventHub)
defer func() {
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
_ = eventHub.Shutdown(ctx)
}()
schedules, err := mysql.NewScheduleStore(db, node)
if err != nil {
return err
@@ -122,7 +132,7 @@ func run() error {
}
done := make(chan error, 1)
go func() { done <- server.Serve(listener) }()
slog.Info("Orbit HTTP server starting", "address", listener.Addr().String(), "scope", "health, task, queue, schedule and Worker APIs", "node_id", node)
slog.Info("Orbit HTTP server starting", "address", listener.Addr().String(), "scope", "health, task, queue, schedule, subscription and Worker APIs", "node_id", node)
select {
case err := <-done:
if errors.Is(err, http.ErrServerClosed) {