add task feedback to web

add task-status endpoint
This commit is contained in:
Robin Olsen
2026-02-17 13:07:04 +01:00
parent 6964e14b69
commit 6ffcb5eb54
3 changed files with 68 additions and 5 deletions

View File

@@ -4,14 +4,21 @@ import (
"context"
"embed"
"fmt"
"net/http"
"time"
"github.com/LazyBachelor/LazyPM/internal/service"
"github.com/LazyBachelor/LazyPM/pkg/task"
"github.com/LazyBachelor/LazyPM/pkg/web/handler"
"github.com/LazyBachelor/LazyPM/pkg/web/server"
)
type WebConfig = service.Config
type Web struct{}
type Web struct {
feedbackChan chan task.ValidationFeedback
quitChan chan bool
}
func NewWeb() *Web {
return &Web{}
@@ -28,7 +35,7 @@ func (w *Web) Run(ctx context.Context, config WebConfig) error {
defer cleanup()
server := server.NewServer(server.Server{
httpServer := server.NewServer(server.Server{
Address: config.WebAddress,
Assets: assets,
Services: svc,
@@ -36,9 +43,35 @@ func (w *Web) Run(ctx context.Context, config WebConfig) error {
fmt.Printf("Starting web server on %s...\n", config.WebAddress)
if err := server.ListenAndServe(); err != nil {
return err
serverErr := make(chan error, 1)
go func() {
if err := httpServer.ListenAndServe(); err != nil && err != http.ErrServerClosed {
serverErr <- err
}
}()
if w.feedbackChan != nil {
go func() {
for feedback := range w.feedbackChan {
handler.SetTaskFeedback(feedback)
}
}()
}
return nil
select {
case <-w.quitChan:
fmt.Println("Task completed! Shutting down server...")
shutdownCtx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
return httpServer.Shutdown(shutdownCtx)
case err := <-serverErr:
return err
case <-ctx.Done():
return httpServer.Shutdown(context.Background())
}
}
func (w *Web) SetChannels(feedbackChan chan task.ValidationFeedback, quitChan chan bool) {
w.feedbackChan = feedbackChan
w.quitChan = quitChan
}