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