mirror of
https://github.com/openfaas/faas.git
synced 2025-06-16 12:16:47 +00:00
Add GatewayConfig
Add env configurable readTimeout / writeTimeout Add env-timeout test Modify appropriate Dockerfiles Signed-off-by: leigh schrandt <leigh@null.net>
This commit is contained in:
parent
a9774a9c2a
commit
457d0be78b
@ -10,13 +10,16 @@ FROM golang:1.7.5
|
||||
|
||||
WORKDIR /go/src/github.com/alexellis/faas/gateway
|
||||
|
||||
COPY vendor vendor
|
||||
COPY vendor vendor
|
||||
|
||||
COPY handlers handlers
|
||||
COPY metrics metrics
|
||||
COPY requests requests
|
||||
COPY tests tests
|
||||
COPY server.go .
|
||||
COPY handlers handlers
|
||||
COPY metrics metrics
|
||||
COPY requests requests
|
||||
COPY tests tests
|
||||
COPY server.go .
|
||||
COPY readconfig.go .
|
||||
COPY config_test.go .
|
||||
|
||||
RUN go test -v ./tests && \
|
||||
RUN go test && \
|
||||
go test -v ./tests && \
|
||||
CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .
|
||||
|
@ -10,12 +10,15 @@ RUN go get -d github.com/Sirupsen/logrus
|
||||
|
||||
WORKDIR /go/src/github.com/alexellis/faas/gateway
|
||||
|
||||
COPY metrics metrics
|
||||
COPY requests requests
|
||||
COPY tests tests
|
||||
COPY handlers handlers
|
||||
COPY metrics metrics
|
||||
COPY requests requests
|
||||
COPY tests tests
|
||||
COPY handlers handlers
|
||||
|
||||
COPY server.go .
|
||||
COPY server.go .
|
||||
COPY readconfig.go .
|
||||
COPY config_test.go .
|
||||
|
||||
RUN go test -v ./tests && \
|
||||
RUN go test && \
|
||||
go test -v ./tests && \
|
||||
CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .
|
||||
|
@ -1,13 +1,15 @@
|
||||
FROM golang:1.7.5
|
||||
WORKDIR /go/src/github.com/alexellis/faas/gateway
|
||||
|
||||
COPY vendor vendor
|
||||
COPY vendor vendor
|
||||
|
||||
COPY handlers handlers
|
||||
COPY metrics metrics
|
||||
COPY requests requests
|
||||
COPY tests tests
|
||||
COPY server.go .
|
||||
COPY handlers handlers
|
||||
COPY metrics metrics
|
||||
COPY requests requests
|
||||
COPY tests tests
|
||||
COPY server.go .
|
||||
COPY readconfig.go .
|
||||
COPY config_test.go .
|
||||
|
||||
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o gateway .
|
||||
|
||||
|
@ -2,13 +2,15 @@ FROM golang:1.7.5
|
||||
# RUN mkdir -p /go/src/github.com/alexellis/faas/gateway
|
||||
WORKDIR /go/src/github.com/alexellis/faas/gateway
|
||||
|
||||
COPY vendor vendor
|
||||
COPY vendor vendor
|
||||
|
||||
COPY handlers handlers
|
||||
COPY metrics metrics
|
||||
COPY requests requests
|
||||
COPY tests tests
|
||||
COPY server.go .
|
||||
COPY handlers handlers
|
||||
COPY metrics metrics
|
||||
COPY requests requests
|
||||
COPY tests tests
|
||||
COPY server.go .
|
||||
COPY readconfig.go .
|
||||
COPY config_test.go .
|
||||
|
||||
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o gateway .
|
||||
|
||||
|
61
gateway/config_test.go
Normal file
61
gateway/config_test.go
Normal file
@ -0,0 +1,61 @@
|
||||
// Copyright (c) Alex Ellis 2017. All rights reserved.
|
||||
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
type EnvBucket struct {
|
||||
Items map[string]string
|
||||
}
|
||||
|
||||
func NewEnvBucket() EnvBucket {
|
||||
return EnvBucket{
|
||||
Items: make(map[string]string),
|
||||
}
|
||||
}
|
||||
|
||||
func (e EnvBucket) Getenv(key string) string {
|
||||
return e.Items[key]
|
||||
}
|
||||
|
||||
func (e EnvBucket) Setenv(key string, value string) {
|
||||
e.Items[key] = value
|
||||
}
|
||||
|
||||
func TestRead_EmptyTimeoutConfig(t *testing.T) {
|
||||
defaults := NewEnvBucket()
|
||||
readConfig := ReadConfig{}
|
||||
|
||||
config := readConfig.Read(defaults)
|
||||
|
||||
if (config.readTimeout) != time.Duration(8)*time.Second {
|
||||
t.Log("readTimeout incorrect")
|
||||
t.Fail()
|
||||
}
|
||||
if (config.writeTimeout) != time.Duration(8)*time.Second {
|
||||
t.Log("writeTimeout incorrect")
|
||||
t.Fail()
|
||||
}
|
||||
}
|
||||
|
||||
func TestRead_ReadAndWriteTimeoutConfig(t *testing.T) {
|
||||
defaults := NewEnvBucket()
|
||||
defaults.Setenv("read_timeout", "10")
|
||||
defaults.Setenv("write_timeout", "60")
|
||||
|
||||
readConfig := ReadConfig{}
|
||||
config := readConfig.Read(defaults)
|
||||
|
||||
if (config.readTimeout) != time.Duration(10)*time.Second {
|
||||
t.Logf("readTimeout incorrect, got: %d\n", config.readTimeout)
|
||||
t.Fail()
|
||||
}
|
||||
if (config.writeTimeout) != time.Duration(60)*time.Second {
|
||||
t.Logf("writeTimeout incorrect, got: %d\n", config.writeTimeout)
|
||||
t.Fail()
|
||||
}
|
||||
}
|
61
gateway/readconfig.go
Normal file
61
gateway/readconfig.go
Normal file
@ -0,0 +1,61 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"os"
|
||||
"strconv"
|
||||
"time"
|
||||
)
|
||||
|
||||
// OsEnv implements interface to wrap os.Getenv
|
||||
type OsEnv struct {
|
||||
}
|
||||
|
||||
// Getenv wraps os.Getenv
|
||||
func (OsEnv) Getenv(key string) string {
|
||||
return os.Getenv(key)
|
||||
}
|
||||
|
||||
// HasEnv provides interface for os.Getenv
|
||||
type HasEnv interface {
|
||||
Getenv(key string) string
|
||||
}
|
||||
|
||||
// ReadConfig constitutes config from env variables
|
||||
type ReadConfig struct {
|
||||
}
|
||||
|
||||
func parseBoolValue(val string) bool {
|
||||
if val == "true" {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func parseIntValue(val string, fallback int) int {
|
||||
if len(val) > 0 {
|
||||
parsedVal, parseErr := strconv.Atoi(val)
|
||||
if parseErr == nil && parsedVal >= 0 {
|
||||
return parsedVal
|
||||
}
|
||||
}
|
||||
return fallback
|
||||
}
|
||||
|
||||
// Read fetches config from environmental variables.
|
||||
func (ReadConfig) Read(hasEnv HasEnv) GatewayConfig {
|
||||
cfg := GatewayConfig{}
|
||||
|
||||
readTimeout := parseIntValue(hasEnv.Getenv("read_timeout"), 8)
|
||||
writeTimeout := parseIntValue(hasEnv.Getenv("write_timeout"), 8)
|
||||
|
||||
cfg.readTimeout = time.Duration(readTimeout) * time.Second
|
||||
cfg.writeTimeout = time.Duration(writeTimeout) * time.Second
|
||||
|
||||
return cfg
|
||||
}
|
||||
|
||||
// GatewayConfig for the process.
|
||||
type GatewayConfig struct {
|
||||
readTimeout time.Duration
|
||||
writeTimeout time.Duration
|
||||
}
|
@ -4,7 +4,6 @@ import (
|
||||
"context"
|
||||
"log"
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
"github.com/Sirupsen/logrus"
|
||||
faasHandlers "github.com/alexellis/faas/gateway/handlers"
|
||||
@ -20,6 +19,13 @@ func main() {
|
||||
logger := logrus.Logger{}
|
||||
logrus.SetFormatter(&logrus.TextFormatter{})
|
||||
|
||||
osEnv := OsEnv{}
|
||||
readConfig := ReadConfig{}
|
||||
config := readConfig.Read(osEnv)
|
||||
|
||||
log.Printf("HTTP Read Timeout: %s", config.readTimeout)
|
||||
log.Printf("HTTP Write Timeout: %s", config.writeTimeout)
|
||||
|
||||
var dockerClient *client.Client
|
||||
var err error
|
||||
dockerClient, err = client.NewEnvClient()
|
||||
@ -30,7 +36,7 @@ func main() {
|
||||
if err != nil {
|
||||
log.Fatal("Error with Docker server.\n", err)
|
||||
}
|
||||
log.Printf("API version: %s, %s\n", dockerVersion.APIVersion, dockerVersion.Version)
|
||||
log.Printf("Docker API version: %s, %s\n", dockerVersion.APIVersion, dockerVersion.Version)
|
||||
|
||||
metricsOptions := metrics.BuildMetricsOptions()
|
||||
metrics.RegisterMetrics(metricsOptions)
|
||||
@ -61,14 +67,12 @@ func main() {
|
||||
|
||||
r.Handle("/", http.RedirectHandler("/ui/", http.StatusMovedPermanently)).Methods("GET")
|
||||
|
||||
readTimeout := 8 * time.Second
|
||||
writeTimeout := 8 * time.Second
|
||||
tcpPort := 8080
|
||||
|
||||
s := &http.Server{
|
||||
Addr: fmt.Sprintf(":%d", tcpPort),
|
||||
ReadTimeout: readTimeout,
|
||||
WriteTimeout: writeTimeout,
|
||||
ReadTimeout: config.readTimeout,
|
||||
WriteTimeout: config.writeTimeout,
|
||||
MaxHeaderBytes: http.DefaultMaxHeaderBytes, // 1MB - can be overridden by setting Server.MaxHeaderBytes.
|
||||
Handler: r,
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user