prom client support add header (#1203)
* prom client support add header
This commit is contained in:
parent
4130a5df02
commit
b893483d26
|
@ -7,6 +7,7 @@ import (
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"net"
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
@ -120,6 +121,7 @@ type DSReply struct {
|
||||||
PrometheusUser string `json:"prometheus.user"`
|
PrometheusUser string `json:"prometheus.user"`
|
||||||
PrometheusPass string `json:"prometheus.password"`
|
PrometheusPass string `json:"prometheus.password"`
|
||||||
} `json:"prometheus.basic"`
|
} `json:"prometheus.basic"`
|
||||||
|
Headers map[string]string `json:"prometheus.headers"`
|
||||||
PrometheusTimeout int64 `json:"prometheus.timeout"`
|
PrometheusTimeout int64 `json:"prometheus.timeout"`
|
||||||
} `json:"settings,omitempty"`
|
} `json:"settings,omitempty"`
|
||||||
} `json:"items"`
|
} `json:"items"`
|
||||||
|
@ -192,7 +194,8 @@ func loadClustersFromAPI() {
|
||||||
old.Opts.BasicAuthUser != item.Settings.PrometheusBasic.PrometheusUser ||
|
old.Opts.BasicAuthUser != item.Settings.PrometheusBasic.PrometheusUser ||
|
||||||
old.Opts.BasicAuthPass != item.Settings.PrometheusBasic.PrometheusPass ||
|
old.Opts.BasicAuthPass != item.Settings.PrometheusBasic.PrometheusPass ||
|
||||||
old.Opts.Timeout != item.Settings.PrometheusTimeout ||
|
old.Opts.Timeout != item.Settings.PrometheusTimeout ||
|
||||||
old.Opts.Prom != item.Settings.PrometheusAddr {
|
old.Opts.Prom != item.Settings.PrometheusAddr ||
|
||||||
|
!equalHeader(old.Opts.Headers, transformHeader(item.Settings.Headers)) {
|
||||||
opt := config.ClusterOptions{
|
opt := config.ClusterOptions{
|
||||||
Name: item.Name,
|
Name: item.Name,
|
||||||
Prom: item.Settings.PrometheusAddr,
|
Prom: item.Settings.PrometheusAddr,
|
||||||
|
@ -201,6 +204,7 @@ func loadClustersFromAPI() {
|
||||||
Timeout: item.Settings.PrometheusTimeout,
|
Timeout: item.Settings.PrometheusTimeout,
|
||||||
DialTimeout: 5000,
|
DialTimeout: 5000,
|
||||||
MaxIdleConnsPerHost: 32,
|
MaxIdleConnsPerHost: 32,
|
||||||
|
Headers: transformHeader(item.Settings.Headers),
|
||||||
}
|
}
|
||||||
|
|
||||||
if strings.HasPrefix(opt.Prom, "https") {
|
if strings.HasPrefix(opt.Prom, "https") {
|
||||||
|
@ -260,3 +264,29 @@ func newClusterByOption(opt config.ClusterOptions) *ClusterType {
|
||||||
|
|
||||||
return cluster
|
return cluster
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func equalHeader(a, b []string) bool {
|
||||||
|
sort.Strings(a)
|
||||||
|
sort.Strings(b)
|
||||||
|
|
||||||
|
if len(a) != len(b) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
for i := range a {
|
||||||
|
if a[i] != b[i] {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
func transformHeader(header map[string]string) []string {
|
||||||
|
var headers []string
|
||||||
|
for k, v := range header {
|
||||||
|
headers = append(headers, k)
|
||||||
|
headers = append(headers, v)
|
||||||
|
}
|
||||||
|
return headers
|
||||||
|
}
|
||||||
|
|
|
@ -112,7 +112,7 @@ func prometheusProxy(c *gin.Context) {
|
||||||
headerCount := len(cluster.Opts.Headers)
|
headerCount := len(cluster.Opts.Headers)
|
||||||
if headerCount > 0 && headerCount%2 == 0 {
|
if headerCount > 0 && headerCount%2 == 0 {
|
||||||
for i := 0; i < len(cluster.Opts.Headers); i += 2 {
|
for i := 0; i < len(cluster.Opts.Headers); i += 2 {
|
||||||
req.Header.Add(cluster.Opts.Headers[i], cluster.Opts.Headers[i+1])
|
req.Header.Set(cluster.Opts.Headers[i], cluster.Opts.Headers[i+1])
|
||||||
if cluster.Opts.Headers[i] == "Host" {
|
if cluster.Opts.Headers[i] == "Host" {
|
||||||
req.Host = cluster.Opts.Headers[i+1]
|
req.Host = cluster.Opts.Headers[i+1]
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue