1package custom 2 3import ( 4 "crypto/tls" 5 "encoding/json" 6 "fmt" 7 "github.com/fabiolb/fabio/config" 8 "github.com/fabiolb/fabio/route" 9 "log" 10 "net/http" 11 "time" 12) 13 14func customRoutes(cfg *config.Custom, ch chan string) { 15 16 var Routes *[]route.RouteDef 17 var trans *http.Transport 18 var URL string 19 20 if !cfg.CheckTLSSkipVerify { 21 trans = &http.Transport{} 22 23 } else { 24 trans = &http.Transport{ 25 TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, 26 } 27 } 28 29 client := &http.Client{ 30 Transport: trans, 31 Timeout: cfg.Timeout, 32 } 33 34 if cfg.QueryParams != "" { 35 URL = fmt.Sprintf("%s://%s/%s?%s", cfg.Scheme, cfg.Host, cfg.Path, cfg.QueryParams) 36 } else { 37 URL = fmt.Sprintf("%s://%s/%s", cfg.Scheme, cfg.Host, cfg.Path) 38 } 39 40 req, err := http.NewRequest("GET", URL, nil) 41 if err != nil { 42 log.Printf("[ERROR] Can not generate new HTTP request") 43 } 44 req.Close = true 45 46 for { 47 log.Printf("[DEBUG] Custom Registry starting request %s \n", time.Now()) 48 resp, err := client.Do(req) 49 if err != nil { 50 ch <- fmt.Sprintf("Error Sending HTTPs Request To Custom be - %s -%s", URL, err.Error()) 51 time.Sleep(cfg.PollInterval) 52 continue 53 } 54 55 if resp.StatusCode != 200 { 56 ch <- fmt.Sprintf("Error Non-200 return (%v) from -%s", resp.StatusCode, URL) 57 time.Sleep(cfg.PollInterval) 58 continue 59 } 60 log.Printf("[DEBUG] Custom Registry begin decoding json %s \n", time.Now()) 61 decoder := json.NewDecoder(resp.Body) 62 err = decoder.Decode(&Routes) 63 if err != nil { 64 ch <- fmt.Sprintf("Error decoding request - %s -%s", URL, err.Error()) 65 time.Sleep(cfg.PollInterval) 66 continue 67 } 68 69 log.Printf("[DEBUG] Custom Registry building table %s \n", time.Now()) 70 t, err := route.NewTableCustom(Routes) 71 if err != nil { 72 ch <- fmt.Sprintf("Error generating new table - %s", err.Error()) 73 } 74 log.Printf("[DEBUG] Custom Registry building table complete %s \n", time.Now()) 75 route.SetTable(t) 76 log.Printf("[DEBUG] Custom Registry table set complete %s \n", time.Now()) 77 ch <- "OK" 78 time.Sleep(cfg.PollInterval) 79 80 } 81 82} 83