diff --git a/api/runner/runner.go b/api/runner/runner.go index 0b8b73873..2dfcb9d21 100644 --- a/api/runner/runner.go +++ b/api/runner/runner.go @@ -17,6 +17,7 @@ import ( ) type Config struct { + ID string Ctx context.Context Route *models.Route Payload string diff --git a/api/runner/runner_test.go b/api/runner/runner_test.go index 273f96766..38d7a14f8 100644 --- a/api/runner/runner_test.go +++ b/api/runner/runner_test.go @@ -2,6 +2,7 @@ package runner import ( "bytes" + "fmt" "testing" "time" @@ -21,6 +22,7 @@ func TestRunnerHello(t *testing.T) { {&models.Route{Image: "iron/hello"}, `{"name": "test"}`, "success", "Hello test!", ""}, } { runner := New(&Config{ + ID: fmt.Sprintf("task-hello-%d-%d", i, time.Now().Unix()), Ctx: context.Background(), Route: test.route, Timeout: 5 * time.Second, @@ -57,6 +59,7 @@ func TestRunnerError(t *testing.T) { {&models.Route{Image: "iron/error"}, `{"name": "test"}`, "error", "", "RuntimeError"}, } { runner := New(&Config{ + ID: fmt.Sprintf("task-error-%d-%d", i, time.Now().Unix()), Ctx: context.Background(), Route: test.route, Timeout: 5 * time.Second, diff --git a/api/runner/task.go b/api/runner/task.go index 9cd4bc2bb..e65b8134b 100644 --- a/api/runner/task.go +++ b/api/runner/task.go @@ -23,7 +23,7 @@ func (t *containerTask) EnvVars() map[string]string { return env } -func (t *containerTask) Id() string { return "" } +func (t *containerTask) Id() string { return t.cfg.ID } func (t *containerTask) Group() string { return "" } func (t *containerTask) Image() string { return t.cfg.Route.Image } func (t *containerTask) Timeout() uint { return uint(t.cfg.Timeout.Seconds()) } diff --git a/api/server/runner.go b/api/server/runner.go index 178615a87..e7093e633 100644 --- a/api/server/runner.go +++ b/api/server/runner.go @@ -1,6 +1,7 @@ package server import ( + "fmt" "io/ioutil" "net/http" "strings" @@ -12,6 +13,7 @@ import ( "github.com/gin-gonic/gin" "github.com/iron-io/functions/api/models" "github.com/iron-io/functions/api/runner" + "github.com/satori/go.uuid" ) func handleRunner(c *gin.Context) { @@ -22,6 +24,11 @@ func handleRunner(c *gin.Context) { log := c.MustGet("log").(logrus.FieldLogger) + reqID := uuid.NewV5(uuid.Nil, fmt.Sprintf("%s%s%d", c.Request.RemoteAddr, c.Request.URL.Path, time.Now().Unix())).String() + c.Set("reqID", reqID) + + log = log.WithFields(logrus.Fields{"request_id": reqID}) + var err error var payload []byte @@ -75,7 +82,6 @@ func handleRunner(c *gin.Context) { } log.WithField("routes", routes).Debug("Got routes from datastore") - for _, el := range routes { if el.Path == route { run := runner.New(&runner.Config{ @@ -83,6 +89,7 @@ func handleRunner(c *gin.Context) { Route: el, Payload: string(payload), Timeout: 30 * time.Second, + ID: reqID, }) if err := run.Run(); err != nil {