1
0
Fork 0
mirror of https://github.com/Luzifer/badge-gen.git synced 2024-11-08 21:30:02 +00:00

Add context to timeout badge generators

This commit is contained in:
Knut Ahlers 2016-06-29 00:51:51 +02:00
parent 125e723724
commit 0342b26a10
Signed by: luzifer
GPG key ID: DC2729FDD34BE99E
3 changed files with 19 additions and 6 deletions

10
app.go
View file

@ -9,6 +9,9 @@ import (
"sort" "sort"
"strings" "strings"
"text/template" "text/template"
"time"
"golang.org/x/net/context"
"github.com/Luzifer/rconfig" "github.com/Luzifer/rconfig"
"github.com/gorilla/mux" "github.com/gorilla/mux"
@ -51,7 +54,7 @@ func (s serviceHandlerDocumentationList) Swap(i, j int) { s[i], s[j] = s[j], s[i
type serviceHandler interface { type serviceHandler interface {
GetDocumentation() serviceHandlerDocumentation GetDocumentation() serviceHandlerDocumentation
Handle(params []string) (title, text, color string, err error) Handle(ctx context.Context, params []string) (title, text, color string, err error)
} }
func registerServiceHandler(service string, f serviceHandler) error { func registerServiceHandler(service string, f serviceHandler) error {
@ -81,13 +84,16 @@ func generateServiceBadge(res http.ResponseWriter, r *http.Request) {
service := vars["service"] service := vars["service"]
params := strings.Split(vars["parameters"], "/") params := strings.Split(vars["parameters"], "/")
ctx, cancel := context.WithTimeout(context.Background(), 1500*time.Millisecond)
defer cancel()
handler, ok := serviceHandlers[service] handler, ok := serviceHandlers[service]
if !ok { if !ok {
http.Error(res, "Service not found: "+service, http.StatusNotFound) http.Error(res, "Service not found: "+service, http.StatusNotFound)
return return
} }
title, text, color, err := handler.Handle(params) title, text, color, err := handler.Handle(ctx, params)
if err != nil { if err != nil {
http.Error(res, "Error while executing service: "+err.Error(), http.StatusInternalServerError) http.Error(res, "Error while executing service: "+err.Error(), http.StatusInternalServerError)
return return

View file

@ -1,6 +1,10 @@
package main package main
import "errors" import (
"errors"
"golang.org/x/net/context"
)
func init() { func init() {
registerServiceHandler("static", staticServiceHandler{}) registerServiceHandler("static", staticServiceHandler{})
@ -16,7 +20,7 @@ func (s staticServiceHandler) GetDocumentation() serviceHandlerDocumentation {
} }
} }
func (s staticServiceHandler) Handle(params []string) (title, text, color string, err error) { func (s staticServiceHandler) Handle(ctx context.Context, params []string) (title, text, color string, err error) {
if len(params) < 2 { if len(params) < 2 {
err = errors.New("You need to provide title and text") err = errors.New("You need to provide title and text")
return return

View file

@ -5,6 +5,9 @@ import (
"errors" "errors"
"net/http" "net/http"
"strings" "strings"
"golang.org/x/net/context"
"golang.org/x/net/context/ctxhttp"
) )
func init() { func init() {
@ -21,7 +24,7 @@ func (t travisServiceHandler) GetDocumentation() serviceHandlerDocumentation {
} }
} }
func (t travisServiceHandler) Handle(params []string) (title, text, color string, err error) { func (t travisServiceHandler) Handle(ctx context.Context, params []string) (title, text, color string, err error) {
if len(params) < 2 { if len(params) < 2 {
err = errors.New("You need to provide user and repo") err = errors.New("You need to provide user and repo")
return return
@ -34,7 +37,7 @@ func (t travisServiceHandler) Handle(params []string) (title, text, color string
path := strings.Join([]string{"repos", params[0], params[1], "branches", params[2]}, "/") path := strings.Join([]string{"repos", params[0], params[1], "branches", params[2]}, "/")
var resp *http.Response var resp *http.Response
resp, err = http.Get("https://api.travis-ci.org/" + path) resp, err = ctxhttp.Get(ctx, http.DefaultClient, "https://api.travis-ci.org/"+path)
if err != nil { if err != nil {
return return
} }