Add configurable timout for HTTP requests

So that requests taking more than one minute does not timeout.
This commit is contained in:
Petter Hassberg 2017-10-20 15:26:54 +02:00
parent 2039eea38b
commit 2802ba9eb9
3 changed files with 23 additions and 4 deletions

View file

@ -27,7 +27,7 @@ func Log(format string, args ...interface{}) {
} }
// New creates a new Clair struct with the given URL and credentials. // New creates a new Clair struct with the given URL and credentials.
func New(url string, debug bool) (*Clair, error) { func New(url string, debug bool, timeout time.Duration) (*Clair, error) {
transport := http.DefaultTransport transport := http.DefaultTransport
errorTransport := &ErrorTransport{ errorTransport := &ErrorTransport{
@ -43,7 +43,7 @@ func New(url string, debug bool) (*Clair, error) {
registry := &Clair{ registry := &Clair{
URL: url, URL: url,
Client: &http.Client{ Client: &http.Client{
Timeout: time.Minute, Timeout: timeout,
Transport: errorTransport, Transport: errorTransport,
}, },
Logf: logf, Logf: logf,

14
main.go
View file

@ -18,6 +18,7 @@ import (
"github.com/jessfraz/reg/version" "github.com/jessfraz/reg/version"
digest "github.com/opencontainers/go-digest" digest "github.com/opencontainers/go-digest"
"github.com/urfave/cli" "github.com/urfave/cli"
"time"
) )
const ( const (
@ -99,6 +100,11 @@ func main() {
Name: "registry, r", Name: "registry, r",
Usage: "URL to the private registry (ex. r.j3ss.co)", Usage: "URL to the private registry (ex. r.j3ss.co)",
}, },
cli.StringFlag{
Name: "timeout",
Value: "1m",
Usage: "timeout for HTTP requests",
},
} }
app.Commands = []cli.Command{ app.Commands = []cli.Command{
{ {
@ -285,8 +291,14 @@ func main() {
return nil return nil
} }
// parse the timeout
timeout, err := time.ParseDuration(c.GlobalString("timeout"))
if err != nil {
logrus.Fatalf("parsing %s as duration failed: %v", c.GlobalString("timeout"), err)
}
// initialize clair // initialize clair
cr, err := clair.New(c.String("clair"), c.GlobalBool("debug")) cr, err := clair.New(c.String("clair"), c.GlobalBool("debug"), timeout)
if err != nil { if err != nil {
return err return err
} }

View file

@ -96,6 +96,7 @@ func main() {
Name: "clair", Name: "clair",
Usage: "url to clair instance", Usage: "url to clair instance",
}, },
} }
app.Action = func(c *cli.Context) error { app.Action = func(c *cli.Context) error {
auth, err := utils.GetAuthConfig(c) auth, err := utils.GetAuthConfig(c)
@ -116,9 +117,15 @@ func main() {
} }
} }
// parse the timeout
timeout, err := time.ParseDuration(c.GlobalString("timeout"))
if err != nil {
logrus.Fatalf("parsing %s as duration failed: %v", c.GlobalString("timeout"), err)
}
// create a clair instance if needed // create a clair instance if needed
if c.GlobalString("clair") != "" { if c.GlobalString("clair") != "" {
cl, err = clair.New(c.GlobalString("clair"), c.GlobalBool("debug")) cl, err = clair.New(c.GlobalString("clair"), c.GlobalBool("debug"), timeout)
if err != nil { if err != nil {
logrus.Warnf("creation of clair failed: %v", err) logrus.Warnf("creation of clair failed: %v", err)
} }