| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- package server
- import (
- "context"
- "fmt"
- "net/http"
- "github.com/go-chi/chi/v5"
- "github.com/porter-dev/porter/api/server/shared/config/env"
- )
- // PorterAPIServer contains the routing and configuration options for starting the PorterAPIServer
- type PorterAPIServer struct {
- // Port is the port that PorterAPIServer listens on
- Port int
- // Router is the router that handles requests
- Router *chi.Mux
- // ServerConf is the server configuration
- ServerConf *env.ServerConf
- }
- // ListenAndServe starts the Porter API server
- func (p PorterAPIServer) ListenAndServe(ctx context.Context) error {
- ctx, cancel := context.WithCancel(ctx)
- defer cancel()
- address := fmt.Sprintf(":%d", p.Port)
- srv := &http.Server{
- Addr: address,
- Handler: p.Router,
- ReadTimeout: p.ServerConf.TimeoutRead,
- WriteTimeout: p.ServerConf.TimeoutWrite,
- IdleTimeout: p.ServerConf.TimeoutIdle,
- }
- defer srv.Shutdown(ctx) // nolint:errcheck
- errChan := make(chan error)
- go func() {
- err := srv.ListenAndServe()
- if err != nil {
- errChan <- err
- }
- }()
- select {
- case err := <-errChan:
- return err
- case <-ctx.Done():
- }
- return nil
- }
|