lambda/rapidcore/standalone/reserveHandler.go (33 lines of code) (raw):
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
package standalone
import (
"net/http"
log "github.com/sirupsen/logrus"
"go.amzn.com/lambda/core/directinvoke"
"go.amzn.com/lambda/interop"
"go.amzn.com/lambda/rapidcore"
)
const (
ReservationTokenHeader = "Reservation-Token"
InvokeIDHeader = "Invoke-ID"
VersionIDHeader = "Version-ID"
)
func tokenToHeaders(w http.ResponseWriter, token interop.Token) {
w.Header().Set(ReservationTokenHeader, token.ReservationToken)
w.Header().Set(directinvoke.InvokeIDHeader, token.InvokeID)
w.Header().Set(directinvoke.VersionIDHeader, token.VersionID)
}
func ReserveHandler(w http.ResponseWriter, r *http.Request, s InteropServer) {
reserveResp, err := s.Reserve("", r.Header.Get("X-Amzn-Trace-Id"), r.Header.Get("X-Amzn-Segment-Id"))
if err != nil {
switch err {
case rapidcore.ErrReserveReservationDone:
// TODO use http.StatusBadGateway
w.WriteHeader(http.StatusGatewayTimeout)
default:
log.Errorf("Failed to reserve: %s", err)
w.WriteHeader(400)
}
return
}
tokenToHeaders(w, reserveResp.Token)
w.Write(reserveResp.InternalState.AsJSON())
}