Implement HTTP timeout configurations and enhance API documentation
- Added optional HTTP server timeout configurations (`HNHMAP_READ_TIMEOUT`, `HNHMAP_WRITE_TIMEOUT`, `HNHMAP_IDLE_TIMEOUT`) to `.env.example` and updated the server initialization in `main.go` to utilize these settings. - Enhanced API documentation for the `rebuildZooms` endpoint to clarify its background processing and polling mechanism for status updates. - Updated `configuration.md` to include new timeout environment variables for better configuration guidance. - Improved error handling in the client for large request bodies, ensuring appropriate responses for oversized payloads.
This commit is contained in:
@@ -6,6 +6,7 @@ import (
|
||||
"fmt"
|
||||
"log/slog"
|
||||
"strconv"
|
||||
"sync"
|
||||
|
||||
"github.com/andyleap/hnh-map/internal/app"
|
||||
"github.com/andyleap/hnh-map/internal/app/store"
|
||||
@@ -17,6 +18,9 @@ import (
|
||||
type AdminService struct {
|
||||
st *store.Store
|
||||
mapSvc *MapService
|
||||
|
||||
rebuildMu sync.Mutex
|
||||
rebuildRunning bool
|
||||
}
|
||||
|
||||
// NewAdminService creates an AdminService with the given store and map service.
|
||||
@@ -372,3 +376,32 @@ func (s *AdminService) HideMarker(ctx context.Context, markerID string) error {
|
||||
func (s *AdminService) RebuildZooms(ctx context.Context) error {
|
||||
return s.mapSvc.RebuildZooms(ctx)
|
||||
}
|
||||
|
||||
// StartRebuildZooms starts RebuildZooms in a goroutine and returns immediately.
|
||||
// RebuildZoomsRunning returns true while the rebuild is in progress.
|
||||
func (s *AdminService) StartRebuildZooms() {
|
||||
s.rebuildMu.Lock()
|
||||
if s.rebuildRunning {
|
||||
s.rebuildMu.Unlock()
|
||||
return
|
||||
}
|
||||
s.rebuildRunning = true
|
||||
s.rebuildMu.Unlock()
|
||||
go func() {
|
||||
defer func() {
|
||||
s.rebuildMu.Lock()
|
||||
s.rebuildRunning = false
|
||||
s.rebuildMu.Unlock()
|
||||
}()
|
||||
if err := s.mapSvc.RebuildZooms(context.Background()); err != nil {
|
||||
slog.Error("RebuildZooms background failed", "error", err)
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
// RebuildZoomsRunning returns true if a rebuild is currently in progress.
|
||||
func (s *AdminService) RebuildZoomsRunning() bool {
|
||||
s.rebuildMu.Lock()
|
||||
defer s.rebuildMu.Unlock()
|
||||
return s.rebuildRunning
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user