diff --git a/main.go b/main.go index bbe518d..4c11c98 100644 --- a/main.go +++ b/main.go @@ -20,6 +20,7 @@ import ( const ( serversEnvVar = "SERVERS" serverCmdEnvVar = "SERVER_CMD" + portEnvVar = "PORT" ) type funkyHandler struct { @@ -91,8 +92,13 @@ func main() { w.Write([]byte("{}")) }) + port := os.Getenv(portEnvVar) + if port == "" { + port = "8080" + } + server := &http.Server{ - Addr: ":8080", + Addr: ":" + port, Handler: servMux, } diff --git a/pkg/funky/response.go b/pkg/funky/response.go index 6af7250..a771be2 100644 --- a/pkg/funky/response.go +++ b/pkg/funky/response.go @@ -17,9 +17,9 @@ type Message struct { // Context a struct to hold the context of a Dispatch function invocation type Context struct { - Error *Error `json:"error"` - Logs *Logs `json:"logs"` - Deadline time.Time `json:"deadline,omitempty"` + Error *Error `json:"error,omitempty"` + Logs *Logs `json:"logs"` + Deadline *time.Time `json:"deadline,omitempty"` } // Error a struct to hold the error status of a Dispatch function invocation diff --git a/pkg/funky/router.go b/pkg/funky/router.go index f1c2e8a..d90ce65 100644 --- a/pkg/funky/router.go +++ b/pkg/funky/router.go @@ -65,7 +65,7 @@ func (r *DefaultRouter) Delegate(input *Message) (*Message, error) { } }() - var e Error + var e *Error resp, err := server.Invoke(input) logs := Logs{ @@ -77,11 +77,13 @@ func (r *DefaultRouter) Delegate(input *Message) (*Message, error) { switch v := err.(type) { case TimeoutError: defer func() { - recover() + if r := recover(); r != nil { + fmt.Println("recovered", r) + } }() terminateErr := server.Terminate() - server = nil newServer, serverErr := r.serverFactory.CreateServer(server.GetPort()) + server = nil if serverErr != nil || terminateErr != nil { close(Healthy) } else { @@ -90,14 +92,14 @@ func (r *DefaultRouter) Delegate(input *Message) (*Message, error) { } server = newServer } - e = Error{ + e = &Error{ ErrorType: FunctionError, Message: err.Error(), } case FunctionServerError: - e = v.APIError + e = &v.APIError default: - e = Error{ + e = &Error{ ErrorType: SystemError, Message: err.Error(), } @@ -105,8 +107,8 @@ func (r *DefaultRouter) Delegate(input *Message) (*Message, error) { } ctx := Context{ + Error: e, Logs: &logs, - Error: &e, } response := &Message{ diff --git a/pkg/funky/server.go b/pkg/funky/server.go index bea7f9f..5f4ffa3 100644 --- a/pkg/funky/server.go +++ b/pkg/funky/server.go @@ -95,11 +95,9 @@ func (s *DefaultServer) GetPort() uint16 { func (s *DefaultServer) Invoke(input *Message) (interface{}, error) { p, err := json.Marshal(input) - var timeout time.Duration - if (input.Context.Deadline == time.Time{}) { - timeout = 0 - } else { - timeout = time.Until(input.Context.Deadline) + timeout := time.Duration(0) + if input.Context.Deadline != nil { + timeout = time.Until(*input.Context.Deadline) } if timeout < 0 {