fsenart on master
Deprecate the project (compare)
lsuss on master
Add official Go runtime benchma… (compare)
package main
import (
"bitbucket.org/afg/go-lambda-io/apigatewayproxyevent"
"github.com/eawsy/aws-lambda-go-core/service/lambda/runtime"
)
const (
ROUTE_BILLING_LIST = "list"
)
var HandleApiGateway = apigatewayproxyevent.Middleware(ApiGatewayHandle)
func ApiGatewayHandle(event *apigatewayproxyevent.Event, ctx *runtime.Context) (interface{}, error) {
switch event.Route {
case ROUTE_BILLING_LIST:
return BillingController(event)
default:
return event.Error(apigatewayproxyevent.NewErrRouteNotSupported(event.Route))
}
}
"bitbucket.org/afg/go-lambda-io/apigatewayproxyevent"
is a private library of mine that I use to map and marshal events (like you do here https://github.com/eawsy/aws-lambda-go-event
but I needed some custom manipulation so I created my own marshallers for different events), and the Middleware
is just a passthrough function where I use defer
in order to catch any un-handled situation and handle telemetry before exit, in this way the may function ApiGatewayHandle
remains clean. Everything worked till today, when I added the middleware, could be the culprit?
// Middleware ...
func Middleware(handler func(event *Event, ctx *runtime.Context) (interface{}, error)) func(event *Event, ctx *runtime.Context) (interface{}, error) {
// deferred
return func(event *Event, ctx *runtime.Context) (interface{}, error) {
setTelemetryClient(event, ctx)
defer func() {
r := recover()
if r != nil { // in case of crash
switch t := r.(type) {
case string:
err := errors.New(t)
log.Println("is string")
log.Println(err)
case error:
// debug.PrintStack()
err := t
log.Println("is error")
log.Println(err)
log.Println(string(debug.Stack()))
default:
err := errors.New("unknown error")
log.Println(err)
}
} else { // run everytime before to terminate the process
logger.LogJSON(event, "deferred event")
event.Telemetry.TrackRequest(event.Env["AWS_LAMBDA_FUNCTION_NAME"], event.HTTPMethod, event.Path, event.RequestContext.RequestID, event.RequestStart, event.Duration(), event.Response.Code, event.IsSuccess())
event.Telemetry.Channel().Flush()
}
}()
return handler(event, ctx)
}
}
https://github.com/Microsoft/ApplicationInsights-Go
2017-10-05T07:09:02Z
package.zip
ENOENT: no such file or directory, open 'package.zip'
handler.zip