mirror of
				https://github.com/coredns/coredns.git
				synced 2025-10-31 02:03:20 -04:00 
			
		
		
		
	plugin/metrics: Switch to using promhttp instead of deprecated Handler (#1312)
prometheus.Handler is deprecated according to the godoc for the package so instead we're using promhttp. Additionally, we are exposing the Registry that metrics is using so other plugins that are not inside of coredns can read the registry. Otherwise, if we kept using the Default one, there's no way to access that from outside of the coredns repo since it is vendored.
This commit is contained in:
		
				
					committed by
					
						 Miek Gieben
						Miek Gieben
					
				
			
			
				
	
			
			
			
						parent
						
							1919913c98
						
					
				
				
					commit
					671d170619
				
			
							
								
								
									
										47
									
								
								vendor/github.com/prometheus/common/config/config.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								vendor/github.com/prometheus/common/config/config.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,47 @@ | ||||
| // Copyright 2016 The Prometheus Authors | ||||
| // Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| // you may not use this file except in compliance with the License. | ||||
| // You may obtain a copy of the License at | ||||
| // | ||||
| // http://www.apache.org/licenses/LICENSE-2.0 | ||||
| // | ||||
| // Unless required by applicable law or agreed to in writing, software | ||||
| // distributed under the License is distributed on an "AS IS" BASIS, | ||||
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
| // See the License for the specific language governing permissions and | ||||
| // limitations under the License. | ||||
|  | ||||
| package config | ||||
|  | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"strings" | ||||
| ) | ||||
|  | ||||
| func checkOverflow(m map[string]interface{}, ctx string) error { | ||||
| 	if len(m) > 0 { | ||||
| 		var keys []string | ||||
| 		for k := range m { | ||||
| 			keys = append(keys, k) | ||||
| 		} | ||||
| 		return fmt.Errorf("unknown fields in %s: %s", ctx, strings.Join(keys, ", ")) | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // Secret special type for storing secrets. | ||||
| type Secret string | ||||
|  | ||||
| // MarshalYAML implements the yaml.Marshaler interface for Secrets. | ||||
| func (s Secret) MarshalYAML() (interface{}, error) { | ||||
| 	if s != "" { | ||||
| 		return "<secret>", nil | ||||
| 	} | ||||
| 	return nil, nil | ||||
| } | ||||
|  | ||||
| //UnmarshalYAML implements the yaml.Unmarshaler interface for Secrets. | ||||
| func (s *Secret) UnmarshalYAML(unmarshal func(interface{}) error) error { | ||||
| 	type plain Secret | ||||
| 	return unmarshal((*plain)(s)) | ||||
| } | ||||
							
								
								
									
										279
									
								
								vendor/github.com/prometheus/common/config/http_config.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										279
									
								
								vendor/github.com/prometheus/common/config/http_config.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,279 @@ | ||||
| // Copyright 2016 The Prometheus Authors | ||||
| // Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| // you may not use this file except in compliance with the License. | ||||
| // You may obtain a copy of the License at | ||||
| // | ||||
| // http://www.apache.org/licenses/LICENSE-2.0 | ||||
| // | ||||
| // Unless required by applicable law or agreed to in writing, software | ||||
| // distributed under the License is distributed on an "AS IS" BASIS, | ||||
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
| // See the License for the specific language governing permissions and | ||||
| // limitations under the License. | ||||
|  | ||||
| package config | ||||
|  | ||||
| import ( | ||||
| 	"crypto/tls" | ||||
| 	"crypto/x509" | ||||
| 	"fmt" | ||||
| 	"io/ioutil" | ||||
| 	"net/http" | ||||
| 	"net/url" | ||||
| 	"strings" | ||||
|  | ||||
| 	yaml "gopkg.in/yaml.v2" | ||||
| ) | ||||
|  | ||||
| // BasicAuth contains basic HTTP authentication credentials. | ||||
| type BasicAuth struct { | ||||
| 	Username string `yaml:"username"` | ||||
| 	Password Secret `yaml:"password"` | ||||
|  | ||||
| 	// Catches all undefined fields and must be empty after parsing. | ||||
| 	XXX map[string]interface{} `yaml:",inline"` | ||||
| } | ||||
|  | ||||
| // URL is a custom URL type that allows validation at configuration load time. | ||||
| type URL struct { | ||||
| 	*url.URL | ||||
| } | ||||
|  | ||||
| // UnmarshalYAML implements the yaml.Unmarshaler interface for URLs. | ||||
| func (u *URL) UnmarshalYAML(unmarshal func(interface{}) error) error { | ||||
| 	var s string | ||||
| 	if err := unmarshal(&s); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	urlp, err := url.Parse(s) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	u.URL = urlp | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // MarshalYAML implements the yaml.Marshaler interface for URLs. | ||||
| func (u URL) MarshalYAML() (interface{}, error) { | ||||
| 	if u.URL != nil { | ||||
| 		return u.String(), nil | ||||
| 	} | ||||
| 	return nil, nil | ||||
| } | ||||
|  | ||||
| // HTTPClientConfig configures an HTTP client. | ||||
| type HTTPClientConfig struct { | ||||
| 	// The HTTP basic authentication credentials for the targets. | ||||
| 	BasicAuth *BasicAuth `yaml:"basic_auth,omitempty"` | ||||
| 	// The bearer token for the targets. | ||||
| 	BearerToken Secret `yaml:"bearer_token,omitempty"` | ||||
| 	// The bearer token file for the targets. | ||||
| 	BearerTokenFile string `yaml:"bearer_token_file,omitempty"` | ||||
| 	// HTTP proxy server to use to connect to the targets. | ||||
| 	ProxyURL URL `yaml:"proxy_url,omitempty"` | ||||
| 	// TLSConfig to use to connect to the targets. | ||||
| 	TLSConfig TLSConfig `yaml:"tls_config,omitempty"` | ||||
|  | ||||
| 	// Catches all undefined fields and must be empty after parsing. | ||||
| 	XXX map[string]interface{} `yaml:",inline"` | ||||
| } | ||||
|  | ||||
| func (c *HTTPClientConfig) validate() error { | ||||
| 	if len(c.BearerToken) > 0 && len(c.BearerTokenFile) > 0 { | ||||
| 		return fmt.Errorf("at most one of bearer_token & bearer_token_file must be configured") | ||||
| 	} | ||||
| 	if c.BasicAuth != nil && (len(c.BearerToken) > 0 || len(c.BearerTokenFile) > 0) { | ||||
| 		return fmt.Errorf("at most one of basic_auth, bearer_token & bearer_token_file must be configured") | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // UnmarshalYAML implements the yaml.Unmarshaler interface | ||||
| func (c *HTTPClientConfig) UnmarshalYAML(unmarshal func(interface{}) error) error { | ||||
| 	type plain HTTPClientConfig | ||||
| 	err := unmarshal((*plain)(c)) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	err = c.validate() | ||||
| 	if err != nil { | ||||
| 		return c.validate() | ||||
| 	} | ||||
| 	return checkOverflow(c.XXX, "http_client_config") | ||||
| } | ||||
|  | ||||
| // UnmarshalYAML implements the yaml.Unmarshaler interface. | ||||
| func (a *BasicAuth) UnmarshalYAML(unmarshal func(interface{}) error) error { | ||||
| 	type plain BasicAuth | ||||
| 	err := unmarshal((*plain)(a)) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	return checkOverflow(a.XXX, "basic_auth") | ||||
| } | ||||
|  | ||||
| // NewHTTPClientFromConfig returns a new HTTP client configured for the | ||||
| // given config.HTTPClientConfig. | ||||
| func NewHTTPClientFromConfig(cfg *HTTPClientConfig) (*http.Client, error) { | ||||
| 	tlsConfig, err := NewTLSConfig(&cfg.TLSConfig) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
|  | ||||
| 	// It's the caller's job to handle timeouts | ||||
| 	var rt http.RoundTripper = &http.Transport{ | ||||
| 		Proxy:             http.ProxyURL(cfg.ProxyURL.URL), | ||||
| 		DisableKeepAlives: true, | ||||
| 		TLSClientConfig:   tlsConfig, | ||||
| 	} | ||||
|  | ||||
| 	// If a bearer token is provided, create a round tripper that will set the | ||||
| 	// Authorization header correctly on each request. | ||||
| 	bearerToken := cfg.BearerToken | ||||
| 	if len(bearerToken) == 0 && len(cfg.BearerTokenFile) > 0 { | ||||
| 		b, err := ioutil.ReadFile(cfg.BearerTokenFile) | ||||
| 		if err != nil { | ||||
| 			return nil, fmt.Errorf("unable to read bearer token file %s: %s", cfg.BearerTokenFile, err) | ||||
| 		} | ||||
| 		bearerToken = Secret(strings.TrimSpace(string(b))) | ||||
| 	} | ||||
|  | ||||
| 	if len(bearerToken) > 0 { | ||||
| 		rt = NewBearerAuthRoundTripper(bearerToken, rt) | ||||
| 	} | ||||
|  | ||||
| 	if cfg.BasicAuth != nil { | ||||
| 		rt = NewBasicAuthRoundTripper(cfg.BasicAuth.Username, Secret(cfg.BasicAuth.Password), rt) | ||||
| 	} | ||||
|  | ||||
| 	// Return a new client with the configured round tripper. | ||||
| 	return &http.Client{Transport: rt}, nil | ||||
| } | ||||
|  | ||||
| type bearerAuthRoundTripper struct { | ||||
| 	bearerToken Secret | ||||
| 	rt          http.RoundTripper | ||||
| } | ||||
|  | ||||
| type basicAuthRoundTripper struct { | ||||
| 	username string | ||||
| 	password Secret | ||||
| 	rt       http.RoundTripper | ||||
| } | ||||
|  | ||||
| // NewBasicAuthRoundTripper will apply a BASIC auth authorization header to a request unless it has | ||||
| // already been set. | ||||
| func NewBasicAuthRoundTripper(username string, password Secret, rt http.RoundTripper) http.RoundTripper { | ||||
| 	return &basicAuthRoundTripper{username, password, rt} | ||||
| } | ||||
|  | ||||
| func (rt *bearerAuthRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) { | ||||
| 	if len(req.Header.Get("Authorization")) == 0 { | ||||
| 		req = cloneRequest(req) | ||||
| 		req.Header.Set("Authorization", "Bearer "+string(rt.bearerToken)) | ||||
| 	} | ||||
|  | ||||
| 	return rt.rt.RoundTrip(req) | ||||
| } | ||||
|  | ||||
| // NewBearerAuthRoundTripper adds the provided bearer token to a request unless the authorization | ||||
| // header has already been set. | ||||
| func NewBearerAuthRoundTripper(bearer Secret, rt http.RoundTripper) http.RoundTripper { | ||||
| 	return &bearerAuthRoundTripper{bearer, rt} | ||||
| } | ||||
|  | ||||
| func (rt *basicAuthRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) { | ||||
| 	if len(req.Header.Get("Authorization")) != 0 { | ||||
| 		return rt.RoundTrip(req) | ||||
| 	} | ||||
| 	req = cloneRequest(req) | ||||
| 	req.SetBasicAuth(rt.username, string(rt.password)) | ||||
| 	return rt.rt.RoundTrip(req) | ||||
| } | ||||
|  | ||||
| // cloneRequest returns a clone of the provided *http.Request. | ||||
| // The clone is a shallow copy of the struct and its Header map. | ||||
| func cloneRequest(r *http.Request) *http.Request { | ||||
| 	// Shallow copy of the struct. | ||||
| 	r2 := new(http.Request) | ||||
| 	*r2 = *r | ||||
| 	// Deep copy of the Header. | ||||
| 	r2.Header = make(http.Header) | ||||
| 	for k, s := range r.Header { | ||||
| 		r2.Header[k] = s | ||||
| 	} | ||||
| 	return r2 | ||||
| } | ||||
|  | ||||
| // NewTLSConfig creates a new tls.Config from the given config.TLSConfig. | ||||
| func NewTLSConfig(cfg *TLSConfig) (*tls.Config, error) { | ||||
| 	tlsConfig := &tls.Config{InsecureSkipVerify: cfg.InsecureSkipVerify} | ||||
|  | ||||
| 	// If a CA cert is provided then let's read it in so we can validate the | ||||
| 	// scrape target's certificate properly. | ||||
| 	if len(cfg.CAFile) > 0 { | ||||
| 		caCertPool := x509.NewCertPool() | ||||
| 		// Load CA cert. | ||||
| 		caCert, err := ioutil.ReadFile(cfg.CAFile) | ||||
| 		if err != nil { | ||||
| 			return nil, fmt.Errorf("unable to use specified CA cert %s: %s", cfg.CAFile, err) | ||||
| 		} | ||||
| 		caCertPool.AppendCertsFromPEM(caCert) | ||||
| 		tlsConfig.RootCAs = caCertPool | ||||
| 	} | ||||
|  | ||||
| 	if len(cfg.ServerName) > 0 { | ||||
| 		tlsConfig.ServerName = cfg.ServerName | ||||
| 	} | ||||
|  | ||||
| 	// If a client cert & key is provided then configure TLS config accordingly. | ||||
| 	if len(cfg.CertFile) > 0 && len(cfg.KeyFile) == 0 { | ||||
| 		return nil, fmt.Errorf("client cert file %q specified without client key file", cfg.CertFile) | ||||
| 	} else if len(cfg.KeyFile) > 0 && len(cfg.CertFile) == 0 { | ||||
| 		return nil, fmt.Errorf("client key file %q specified without client cert file", cfg.KeyFile) | ||||
| 	} else if len(cfg.CertFile) > 0 && len(cfg.KeyFile) > 0 { | ||||
| 		cert, err := tls.LoadX509KeyPair(cfg.CertFile, cfg.KeyFile) | ||||
| 		if err != nil { | ||||
| 			return nil, fmt.Errorf("unable to use specified client cert (%s) & key (%s): %s", cfg.CertFile, cfg.KeyFile, err) | ||||
| 		} | ||||
| 		tlsConfig.Certificates = []tls.Certificate{cert} | ||||
| 	} | ||||
| 	tlsConfig.BuildNameToCertificate() | ||||
|  | ||||
| 	return tlsConfig, nil | ||||
| } | ||||
|  | ||||
| // TLSConfig configures the options for TLS connections. | ||||
| type TLSConfig struct { | ||||
| 	// The CA cert to use for the targets. | ||||
| 	CAFile string `yaml:"ca_file,omitempty"` | ||||
| 	// The client cert file for the targets. | ||||
| 	CertFile string `yaml:"cert_file,omitempty"` | ||||
| 	// The client key file for the targets. | ||||
| 	KeyFile string `yaml:"key_file,omitempty"` | ||||
| 	// Used to verify the hostname for the targets. | ||||
| 	ServerName string `yaml:"server_name,omitempty"` | ||||
| 	// Disable target certificate validation. | ||||
| 	InsecureSkipVerify bool `yaml:"insecure_skip_verify"` | ||||
|  | ||||
| 	// Catches all undefined fields and must be empty after parsing. | ||||
| 	XXX map[string]interface{} `yaml:",inline"` | ||||
| } | ||||
|  | ||||
| // UnmarshalYAML implements the yaml.Unmarshaler interface. | ||||
| func (c *TLSConfig) UnmarshalYAML(unmarshal func(interface{}) error) error { | ||||
| 	type plain TLSConfig | ||||
| 	if err := unmarshal((*plain)(c)); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	return checkOverflow(c.XXX, "TLS config") | ||||
| } | ||||
|  | ||||
| func (c HTTPClientConfig) String() string { | ||||
| 	b, err := yaml.Marshal(c) | ||||
| 	if err != nil { | ||||
| 		return fmt.Sprintf("<error creating http client config string: %s>", err) | ||||
| 	} | ||||
| 	return string(b) | ||||
| } | ||||
							
								
								
									
										157
									
								
								vendor/github.com/prometheus/common/config/http_config_test.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										157
									
								
								vendor/github.com/prometheus/common/config/http_config_test.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,157 @@ | ||||
| // Copyright 2015 The Prometheus Authors | ||||
| // Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| // you may not use this file except in compliance with the License. | ||||
| // You may obtain a copy of the License at | ||||
| // | ||||
| // http://www.apache.org/licenses/LICENSE-2.0 | ||||
| // | ||||
| // Unless required by applicable law or agreed to in writing, software | ||||
| // distributed under the License is distributed on an "AS IS" BASIS, | ||||
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
| // See the License for the specific language governing permissions and | ||||
| // limitations under the License. | ||||
|  | ||||
| package config | ||||
|  | ||||
| import ( | ||||
| 	"io/ioutil" | ||||
| 	"net/http" | ||||
| 	"net/url" | ||||
| 	"strings" | ||||
| 	"testing" | ||||
|  | ||||
| 	yaml "gopkg.in/yaml.v2" | ||||
| ) | ||||
|  | ||||
| var invalidHTTPClientConfigs = []struct { | ||||
| 	httpClientConfigFile string | ||||
| 	errMsg               string | ||||
| }{ | ||||
| 	{ | ||||
| 		httpClientConfigFile: "testdata/http.conf.bearer-token-and-file-set.bad.yml", | ||||
| 		errMsg:               "at most one of bearer_token & bearer_token_file must be configured", | ||||
| 	}, | ||||
| 	{ | ||||
| 		httpClientConfigFile: "testdata/http.conf.empty.bad.yml", | ||||
| 		errMsg:               "at most one of basic_auth, bearer_token & bearer_token_file must be configured", | ||||
| 	}, | ||||
| } | ||||
|  | ||||
| func TestAuthRoundTrippers(t *testing.T) { | ||||
|  | ||||
| 	cfg, _, err := LoadHTTPConfigFile("testdata/http.conf.good.yml") | ||||
| 	if err != nil { | ||||
| 		t.Errorf("Error loading HTTP client config: %v", err) | ||||
| 	} | ||||
|  | ||||
| 	tlsConfig, err := NewTLSConfig(&cfg.TLSConfig) | ||||
| 	if err != nil { | ||||
| 		t.Errorf("Error creating new TLS config: %v", err) | ||||
| 	} | ||||
|  | ||||
| 	rt := &http.Transport{ | ||||
| 		Proxy:             http.ProxyURL(cfg.ProxyURL.URL), | ||||
| 		DisableKeepAlives: true, | ||||
| 		TLSClientConfig:   tlsConfig, | ||||
| 	} | ||||
| 	req := new(http.Request) | ||||
|  | ||||
| 	bearerAuthRoundTripper := NewBearerAuthRoundTripper("mysecret", rt) | ||||
| 	bearerAuthRoundTripper.RoundTrip(req) | ||||
|  | ||||
| 	basicAuthRoundTripper := NewBasicAuthRoundTripper("username", "password", rt) | ||||
| 	basicAuthRoundTripper.RoundTrip(req) | ||||
| } | ||||
|  | ||||
| func TestHideHTTPClientConfigSecrets(t *testing.T) { | ||||
| 	c, _, err := LoadHTTPConfigFile("testdata/http.conf.good.yml") | ||||
| 	if err != nil { | ||||
| 		t.Errorf("Error parsing %s: %s", "testdata/http.conf.good.yml", err) | ||||
| 	} | ||||
|  | ||||
| 	// String method must not reveal authentication credentials. | ||||
| 	s := c.String() | ||||
| 	if strings.Contains(s, "mysecret") { | ||||
| 		t.Fatal("http client config's String method reveals authentication credentials.") | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func mustParseURL(u string) *URL { | ||||
| 	parsed, err := url.Parse(u) | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
| 	return &URL{URL: parsed} | ||||
| } | ||||
|  | ||||
| func TestNewClientFromConfig(t *testing.T) { | ||||
| 	cfg, _, err := LoadHTTPConfigFile("testdata/http.conf.good.yml") | ||||
| 	if err != nil { | ||||
| 		t.Errorf("Error loading HTTP client config: %v", err) | ||||
| 	} | ||||
| 	_, err = NewHTTPClientFromConfig(cfg) | ||||
| 	if err != nil { | ||||
| 		t.Errorf("Error creating new client from config: %v", err) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func TestNewClientFromInvalidConfig(t *testing.T) { | ||||
| 	cfg, _, err := LoadHTTPConfigFile("testdata/http.conf.invalid-bearer-token-file.bad.yml") | ||||
| 	if err != nil { | ||||
| 		t.Errorf("Error loading HTTP client config: %v", err) | ||||
| 	} | ||||
| 	_, err = NewHTTPClientFromConfig(cfg) | ||||
| 	if err == nil { | ||||
| 		t.Error("Expected error creating new client from invalid config but got none") | ||||
| 	} | ||||
| 	if !strings.Contains(err.Error(), "unable to read bearer token file file: open file: no such file or directory") { | ||||
| 		t.Errorf("Expected error with config but got: %s", err.Error()) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func TestValidateHTTPConfig(t *testing.T) { | ||||
| 	cfg, _, err := LoadHTTPConfigFile("testdata/http.conf.good.yml") | ||||
| 	if err != nil { | ||||
| 		t.Errorf("Error loading HTTP client config: %v", err) | ||||
| 	} | ||||
| 	err = cfg.validate() | ||||
| 	if err != nil { | ||||
| 		t.Fatalf("Error validating %s: %s", "testdata/http.conf.good.yml", err) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func TestInvalidHTTPConfigs(t *testing.T) { | ||||
| 	for _, ee := range invalidHTTPClientConfigs { | ||||
| 		_, _, err := LoadHTTPConfigFile(ee.httpClientConfigFile) | ||||
| 		if err == nil { | ||||
| 			t.Error("Expected error with config but got none") | ||||
| 			continue | ||||
| 		} | ||||
| 		if !strings.Contains(err.Error(), ee.errMsg) { | ||||
| 			t.Errorf("Expected error for invalid HTTP client configuration to contain %q but got: %s", ee.errMsg, err) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // LoadHTTPConfig parses the YAML input s into a HTTPClientConfig. | ||||
| func LoadHTTPConfig(s string) (*HTTPClientConfig, error) { | ||||
| 	cfg := &HTTPClientConfig{} | ||||
| 	err := yaml.Unmarshal([]byte(s), cfg) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return cfg, nil | ||||
| } | ||||
|  | ||||
| // LoadHTTPConfigFile parses the given YAML file into a HTTPClientConfig. | ||||
| func LoadHTTPConfigFile(filename string) (*HTTPClientConfig, []byte, error) { | ||||
| 	content, err := ioutil.ReadFile(filename) | ||||
| 	if err != nil { | ||||
| 		return nil, nil, err | ||||
| 	} | ||||
| 	cfg, err := LoadHTTPConfig(string(content)) | ||||
| 	if err != nil { | ||||
| 		return nil, nil, err | ||||
| 	} | ||||
| 	return cfg, content, nil | ||||
| } | ||||
							
								
								
									
										5
									
								
								vendor/github.com/prometheus/common/config/testdata/http.conf.bearer-token-and-file-set.bad.yml
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								vendor/github.com/prometheus/common/config/testdata/http.conf.bearer-token-and-file-set.bad.yml
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| basic_auth: | ||||
|   username: username | ||||
|   password: "mysecret" | ||||
| bearer_token: mysecret | ||||
| bearer_token_file: file | ||||
							
								
								
									
										4
									
								
								vendor/github.com/prometheus/common/config/testdata/http.conf.empty.bad.yml
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								vendor/github.com/prometheus/common/config/testdata/http.conf.empty.bad.yml
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,4 @@ | ||||
| basic_auth: | ||||
|   username: username | ||||
|   password: mysecret | ||||
| bearer_token_file: file | ||||
							
								
								
									
										4
									
								
								vendor/github.com/prometheus/common/config/testdata/http.conf.good.yml
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								vendor/github.com/prometheus/common/config/testdata/http.conf.good.yml
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,4 @@ | ||||
| basic_auth: | ||||
|   username: username | ||||
|   password: "mysecret" | ||||
| proxy_url: "http://remote.host" | ||||
							
								
								
									
										1
									
								
								vendor/github.com/prometheus/common/config/testdata/http.conf.invalid-bearer-token-file.bad.yml
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/prometheus/common/config/testdata/http.conf.invalid-bearer-token-file.bad.yml
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| bearer_token_file: file | ||||
							
								
								
									
										1
									
								
								vendor/github.com/prometheus/common/config/testdata/tls_config.cert_no_key.bad.yml
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/prometheus/common/config/testdata/tls_config.cert_no_key.bad.yml
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| cert_file: somefile | ||||
							
								
								
									
										0
									
								
								vendor/github.com/prometheus/common/config/testdata/tls_config.empty.good.yml
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								vendor/github.com/prometheus/common/config/testdata/tls_config.empty.good.yml
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
								
								
									
										1
									
								
								vendor/github.com/prometheus/common/config/testdata/tls_config.insecure.good.yml
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/prometheus/common/config/testdata/tls_config.insecure.good.yml
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| insecure_skip_verify: true | ||||
							
								
								
									
										1
									
								
								vendor/github.com/prometheus/common/config/testdata/tls_config.invalid_field.bad.yml
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/prometheus/common/config/testdata/tls_config.invalid_field.bad.yml
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| something_invalid: true | ||||
							
								
								
									
										1
									
								
								vendor/github.com/prometheus/common/config/testdata/tls_config.key_no_cert.bad.yml
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/prometheus/common/config/testdata/tls_config.key_no_cert.bad.yml
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| key_file: somefile | ||||
							
								
								
									
										92
									
								
								vendor/github.com/prometheus/common/config/tls_config_test.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										92
									
								
								vendor/github.com/prometheus/common/config/tls_config_test.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,92 @@ | ||||
| // Copyright 2016 The Prometheus Authors | ||||
| // Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| // you may not use this file except in compliance with the License. | ||||
| // You may obtain a copy of the License at | ||||
| // | ||||
| // http://www.apache.org/licenses/LICENSE-2.0 | ||||
| // | ||||
| // Unless required by applicable law or agreed to in writing, software | ||||
| // distributed under the License is distributed on an "AS IS" BASIS, | ||||
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
| // See the License for the specific language governing permissions and | ||||
| // limitations under the License. | ||||
|  | ||||
| package config | ||||
|  | ||||
| import ( | ||||
| 	"crypto/tls" | ||||
| 	"io/ioutil" | ||||
| 	"reflect" | ||||
| 	"strings" | ||||
| 	"testing" | ||||
|  | ||||
| 	"gopkg.in/yaml.v2" | ||||
| ) | ||||
|  | ||||
| // LoadTLSConfig parses the given YAML file into a tls.Config. | ||||
| func LoadTLSConfig(filename string) (*tls.Config, error) { | ||||
| 	content, err := ioutil.ReadFile(filename) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	cfg := &TLSConfig{} | ||||
| 	if err = yaml.Unmarshal(content, cfg); err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return NewTLSConfig(cfg) | ||||
| } | ||||
|  | ||||
| var expectedTLSConfigs = []struct { | ||||
| 	filename string | ||||
| 	config   *tls.Config | ||||
| }{ | ||||
| 	{ | ||||
| 		filename: "tls_config.empty.good.yml", | ||||
| 		config:   &tls.Config{}, | ||||
| 	}, { | ||||
| 		filename: "tls_config.insecure.good.yml", | ||||
| 		config:   &tls.Config{InsecureSkipVerify: true}, | ||||
| 	}, | ||||
| } | ||||
|  | ||||
| func TestValidTLSConfig(t *testing.T) { | ||||
| 	for _, cfg := range expectedTLSConfigs { | ||||
| 		cfg.config.BuildNameToCertificate() | ||||
| 		got, err := LoadTLSConfig("testdata/" + cfg.filename) | ||||
| 		if err != nil { | ||||
| 			t.Errorf("Error parsing %s: %s", cfg.filename, err) | ||||
| 		} | ||||
| 		if !reflect.DeepEqual(*got, *cfg.config) { | ||||
| 			t.Fatalf("%v: unexpected config result: \n\n%v\n expected\n\n%v", cfg.filename, got, cfg.config) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | ||||
| var expectedTLSConfigErrors = []struct { | ||||
| 	filename string | ||||
| 	errMsg   string | ||||
| }{ | ||||
| 	{ | ||||
| 		filename: "tls_config.invalid_field.bad.yml", | ||||
| 		errMsg:   "unknown fields in", | ||||
| 	}, { | ||||
| 		filename: "tls_config.cert_no_key.bad.yml", | ||||
| 		errMsg:   "specified without client key file", | ||||
| 	}, { | ||||
| 		filename: "tls_config.key_no_cert.bad.yml", | ||||
| 		errMsg:   "specified without client cert file", | ||||
| 	}, | ||||
| } | ||||
|  | ||||
| func TestBadTLSConfigs(t *testing.T) { | ||||
| 	for _, ee := range expectedTLSConfigErrors { | ||||
| 		_, err := LoadTLSConfig("testdata/" + ee.filename) | ||||
| 		if err == nil { | ||||
| 			t.Errorf("Expected error parsing %s but got none", ee.filename) | ||||
| 			continue | ||||
| 		} | ||||
| 		if !strings.Contains(err.Error(), ee.errMsg) { | ||||
| 			t.Errorf("Expected error for %s to contain %q but got: %s", ee.filename, ee.errMsg, err) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										2
									
								
								vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_0
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_0
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | ||||
|  | ||||
|  | ||||
							
								
								
									
										6
									
								
								vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_1
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_1
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
|  | ||||
| minimal_metric 1.234 | ||||
| another_metric -3e3 103948 | ||||
| # Even that: | ||||
| no_labels{} 3 | ||||
| # HELP line for non-existing metric will be ignored. | ||||
							
								
								
									
										12
									
								
								vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_2
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_2
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | ||||
|  | ||||
| # A normal comment. | ||||
| # | ||||
| # TYPE name counter | ||||
| name{labelname="val1",basename="basevalue"} NaN | ||||
| name {labelname="val2",basename="base\"v\\al\nue"} 0.23 1234567890 | ||||
| # HELP name two-line\n doc  str\\ing | ||||
|  | ||||
|  # HELP  name2  	doc str"ing 2 | ||||
|   #    TYPE    name2 gauge | ||||
| name2{labelname="val2"	,basename   =   "basevalue2"		} +Inf 54321 | ||||
| name2{ labelname = "val1" , }-Inf | ||||
							
								
								
									
										22
									
								
								vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_3
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_3
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | ||||
|  | ||||
| # TYPE my_summary summary | ||||
| my_summary{n1="val1",quantile="0.5"} 110 | ||||
| decoy -1 -2 | ||||
| my_summary{n1="val1",quantile="0.9"} 140 1 | ||||
| my_summary_count{n1="val1"} 42 | ||||
| # Latest timestamp wins in case of a summary. | ||||
| my_summary_sum{n1="val1"} 4711 2 | ||||
| fake_sum{n1="val1"} 2001 | ||||
| # TYPE another_summary summary | ||||
| another_summary_count{n2="val2",n1="val1"} 20 | ||||
| my_summary_count{n2="val2",n1="val1"} 5 5 | ||||
| another_summary{n1="val1",n2="val2",quantile=".3"} -1.2 | ||||
| my_summary_sum{n1="val2"} 08 15 | ||||
| my_summary{n1="val3", quantile="0.2"} 4711 | ||||
|   my_summary{n1="val1",n2="val2",quantile="-12.34",} NaN | ||||
| # some | ||||
| # funny comments | ||||
| # HELP  | ||||
| # HELP | ||||
| # HELP my_summary | ||||
| # HELP my_summary  | ||||
							
								
								
									
										10
									
								
								vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_4
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_4
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
|  | ||||
| # HELP request_duration_microseconds The response latency. | ||||
| # TYPE request_duration_microseconds histogram | ||||
| request_duration_microseconds_bucket{le="100"} 123 | ||||
| request_duration_microseconds_bucket{le="120"} 412 | ||||
| request_duration_microseconds_bucket{le="144"} 592 | ||||
| request_duration_microseconds_bucket{le="172.8"} 1524 | ||||
| request_duration_microseconds_bucket{le="+Inf"} 2693 | ||||
| request_duration_microseconds_sum 1.7560473e+06 | ||||
| request_duration_microseconds_count 2693 | ||||
							
								
								
									
										1
									
								
								vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_0
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_0
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| bla 3.14 | ||||
							
								
								
									
										1
									
								
								vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_1
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_1
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| metric{label="\t"} 3.14 | ||||
							
								
								
									
										1
									
								
								vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_10
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_10
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| metric{label="bla"} 3.14 2 3 | ||||
							
								
								
									
										1
									
								
								vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_11
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_11
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| metric{label="bla"} blubb | ||||
							
								
								
									
										3
									
								
								vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_12
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_12
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
|  | ||||
| # HELP metric one | ||||
| # HELP metric two | ||||
							
								
								
									
										3
									
								
								vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_13
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_13
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
|  | ||||
| # TYPE metric counter | ||||
| # TYPE metric untyped | ||||
							
								
								
									
										3
									
								
								vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_14
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_14
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
|  | ||||
| metric 4.12 | ||||
| # TYPE metric counter | ||||
							
								
								
									
										2
									
								
								vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_15
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_15
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | ||||
|  | ||||
| # TYPE metric bla | ||||
							
								
								
									
										2
									
								
								vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_16
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_16
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | ||||
|  | ||||
| # TYPE met-ric | ||||
							
								
								
									
										1
									
								
								vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_17
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_17
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| @invalidmetric{label="bla"} 3.14 2 | ||||
							
								
								
									
										1
									
								
								vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_18
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_18
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| {label="bla"} 3.14 2 | ||||
							
								
								
									
										3
									
								
								vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_19
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_19
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
|  | ||||
| # TYPE metric histogram | ||||
| metric_bucket{le="bla"} 3.14 | ||||
							
								
								
									
										3
									
								
								vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_2
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_2
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
|  | ||||
| metric{label="new | ||||
| line"} 3.14 | ||||
							
								
								
									
										1
									
								
								vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_3
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_3
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| metric{@="bla"} 3.14 | ||||
							
								
								
									
										1
									
								
								vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_4
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_4
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| metric{__name__="bla"} 3.14 | ||||
							
								
								
									
										1
									
								
								vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_5
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_5
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| metric{label+="bla"} 3.14 | ||||
							
								
								
									
										1
									
								
								vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_6
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_6
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| metric{label=bla} 3.14 | ||||
							
								
								
									
										3
									
								
								vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_7
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_7
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
|  | ||||
| # TYPE metric summary | ||||
| metric{quantile="bla"} 3.14 | ||||
							
								
								
									
										1
									
								
								vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_8
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_8
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| metric{label="bla"+} 3.14 | ||||
							
								
								
									
										1
									
								
								vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_9
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_9
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| metric{label="bla"} 3.14 2.72 | ||||
							
								
								
									
										1
									
								
								vendor/github.com/prometheus/common/expfmt/fuzz/corpus/minimal
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/prometheus/common/expfmt/fuzz/corpus/minimal
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| m{} 0 | ||||
							
								
								
									
										46
									
								
								vendor/github.com/prometheus/common/expfmt/testdata/json2
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								vendor/github.com/prometheus/common/expfmt/testdata/json2
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,46 @@ | ||||
| [ | ||||
|   { | ||||
|     "baseLabels": { | ||||
|       "__name__": "rpc_calls_total", | ||||
|       "job": "batch_job" | ||||
|     }, | ||||
|     "docstring": "RPC calls.", | ||||
|     "metric": { | ||||
|       "type": "counter", | ||||
|       "value": [ | ||||
|         { | ||||
|           "labels": { | ||||
|             "service": "zed" | ||||
|           }, | ||||
|           "value": 25 | ||||
|         }, | ||||
|         { | ||||
|           "labels": { | ||||
|             "service": "bar" | ||||
|           }, | ||||
|           "value": 24 | ||||
|         } | ||||
|       ] | ||||
|     } | ||||
|   }, | ||||
|   { | ||||
|     "baseLabels": { | ||||
|       "__name__": "rpc_latency_microseconds" | ||||
|     }, | ||||
|     "docstring": "RPC latency.", | ||||
|     "metric": { | ||||
|       "type": "histogram", | ||||
|       "value": [ | ||||
|         { | ||||
|           "labels": { | ||||
|             "service": "foo" | ||||
|           }, | ||||
|           "value": { | ||||
|             "0.010000": 15, | ||||
|             "0.990000": 17 | ||||
|           } | ||||
|         } | ||||
|       ] | ||||
|     } | ||||
|   } | ||||
| ] | ||||
							
								
								
									
										46
									
								
								vendor/github.com/prometheus/common/expfmt/testdata/json2_bad
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								vendor/github.com/prometheus/common/expfmt/testdata/json2_bad
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,46 @@ | ||||
| [ | ||||
|   { | ||||
|     "baseLabels": { | ||||
|       "__name__": "rpc_calls_total", | ||||
|       "job": "batch_job" | ||||
|     }, | ||||
|     "docstring": "RPC calls.", | ||||
|     "metric": { | ||||
|       "type": "counter", | ||||
|       "value": [ | ||||
|         { | ||||
|           "labels": { | ||||
|             "servic|e": "zed" | ||||
|           }, | ||||
|           "value": 25 | ||||
|         }, | ||||
|         { | ||||
|           "labels": { | ||||
|             "service": "bar" | ||||
|           }, | ||||
|           "value": 24 | ||||
|         } | ||||
|       ] | ||||
|     } | ||||
|   }, | ||||
|   { | ||||
|     "baseLabels": { | ||||
|       "__name__": "rpc_latency_microseconds" | ||||
|     }, | ||||
|     "docstring": "RPC latency.", | ||||
|     "metric": { | ||||
|       "type": "histogram", | ||||
|       "value": [ | ||||
|         { | ||||
|           "labels": { | ||||
|             "service": "foo" | ||||
|           }, | ||||
|           "value": { | ||||
|             "0.010000": 15, | ||||
|             "0.990000": 17 | ||||
|           } | ||||
|         } | ||||
|       ] | ||||
|     } | ||||
|   } | ||||
| ] | ||||
							
								
								
									
										
											BIN
										
									
								
								vendor/github.com/prometheus/common/expfmt/testdata/protobuf
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								vendor/github.com/prometheus/common/expfmt/testdata/protobuf
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								vendor/github.com/prometheus/common/expfmt/testdata/protobuf.gz
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								vendor/github.com/prometheus/common/expfmt/testdata/protobuf.gz
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										322
									
								
								vendor/github.com/prometheus/common/expfmt/testdata/text
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										322
									
								
								vendor/github.com/prometheus/common/expfmt/testdata/text
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,322 @@ | ||||
| # HELP http_request_duration_microseconds The HTTP request latencies in microseconds. | ||||
| # TYPE http_request_duration_microseconds summary | ||||
| http_request_duration_microseconds{handler="/",quantile="0.5"} 0 | ||||
| http_request_duration_microseconds{handler="/",quantile="0.9"} 0 | ||||
| http_request_duration_microseconds{handler="/",quantile="0.99"} 0 | ||||
| http_request_duration_microseconds_sum{handler="/"} 0 | ||||
| http_request_duration_microseconds_count{handler="/"} 0 | ||||
| http_request_duration_microseconds{handler="/alerts",quantile="0.5"} 0 | ||||
| http_request_duration_microseconds{handler="/alerts",quantile="0.9"} 0 | ||||
| http_request_duration_microseconds{handler="/alerts",quantile="0.99"} 0 | ||||
| http_request_duration_microseconds_sum{handler="/alerts"} 0 | ||||
| http_request_duration_microseconds_count{handler="/alerts"} 0 | ||||
| http_request_duration_microseconds{handler="/api/metrics",quantile="0.5"} 0 | ||||
| http_request_duration_microseconds{handler="/api/metrics",quantile="0.9"} 0 | ||||
| http_request_duration_microseconds{handler="/api/metrics",quantile="0.99"} 0 | ||||
| http_request_duration_microseconds_sum{handler="/api/metrics"} 0 | ||||
| http_request_duration_microseconds_count{handler="/api/metrics"} 0 | ||||
| http_request_duration_microseconds{handler="/api/query",quantile="0.5"} 0 | ||||
| http_request_duration_microseconds{handler="/api/query",quantile="0.9"} 0 | ||||
| http_request_duration_microseconds{handler="/api/query",quantile="0.99"} 0 | ||||
| http_request_duration_microseconds_sum{handler="/api/query"} 0 | ||||
| http_request_duration_microseconds_count{handler="/api/query"} 0 | ||||
| http_request_duration_microseconds{handler="/api/query_range",quantile="0.5"} 0 | ||||
| http_request_duration_microseconds{handler="/api/query_range",quantile="0.9"} 0 | ||||
| http_request_duration_microseconds{handler="/api/query_range",quantile="0.99"} 0 | ||||
| http_request_duration_microseconds_sum{handler="/api/query_range"} 0 | ||||
| http_request_duration_microseconds_count{handler="/api/query_range"} 0 | ||||
| http_request_duration_microseconds{handler="/api/targets",quantile="0.5"} 0 | ||||
| http_request_duration_microseconds{handler="/api/targets",quantile="0.9"} 0 | ||||
| http_request_duration_microseconds{handler="/api/targets",quantile="0.99"} 0 | ||||
| http_request_duration_microseconds_sum{handler="/api/targets"} 0 | ||||
| http_request_duration_microseconds_count{handler="/api/targets"} 0 | ||||
| http_request_duration_microseconds{handler="/consoles/",quantile="0.5"} 0 | ||||
| http_request_duration_microseconds{handler="/consoles/",quantile="0.9"} 0 | ||||
| http_request_duration_microseconds{handler="/consoles/",quantile="0.99"} 0 | ||||
| http_request_duration_microseconds_sum{handler="/consoles/"} 0 | ||||
| http_request_duration_microseconds_count{handler="/consoles/"} 0 | ||||
| http_request_duration_microseconds{handler="/graph",quantile="0.5"} 0 | ||||
| http_request_duration_microseconds{handler="/graph",quantile="0.9"} 0 | ||||
| http_request_duration_microseconds{handler="/graph",quantile="0.99"} 0 | ||||
| http_request_duration_microseconds_sum{handler="/graph"} 0 | ||||
| http_request_duration_microseconds_count{handler="/graph"} 0 | ||||
| http_request_duration_microseconds{handler="/heap",quantile="0.5"} 0 | ||||
| http_request_duration_microseconds{handler="/heap",quantile="0.9"} 0 | ||||
| http_request_duration_microseconds{handler="/heap",quantile="0.99"} 0 | ||||
| http_request_duration_microseconds_sum{handler="/heap"} 0 | ||||
| http_request_duration_microseconds_count{handler="/heap"} 0 | ||||
| http_request_duration_microseconds{handler="/static/",quantile="0.5"} 0 | ||||
| http_request_duration_microseconds{handler="/static/",quantile="0.9"} 0 | ||||
| http_request_duration_microseconds{handler="/static/",quantile="0.99"} 0 | ||||
| http_request_duration_microseconds_sum{handler="/static/"} 0 | ||||
| http_request_duration_microseconds_count{handler="/static/"} 0 | ||||
| http_request_duration_microseconds{handler="prometheus",quantile="0.5"} 1307.275 | ||||
| http_request_duration_microseconds{handler="prometheus",quantile="0.9"} 1858.632 | ||||
| http_request_duration_microseconds{handler="prometheus",quantile="0.99"} 3087.384 | ||||
| http_request_duration_microseconds_sum{handler="prometheus"} 179886.5000000001 | ||||
| http_request_duration_microseconds_count{handler="prometheus"} 119 | ||||
| # HELP http_request_size_bytes The HTTP request sizes in bytes. | ||||
| # TYPE http_request_size_bytes summary | ||||
| http_request_size_bytes{handler="/",quantile="0.5"} 0 | ||||
| http_request_size_bytes{handler="/",quantile="0.9"} 0 | ||||
| http_request_size_bytes{handler="/",quantile="0.99"} 0 | ||||
| http_request_size_bytes_sum{handler="/"} 0 | ||||
| http_request_size_bytes_count{handler="/"} 0 | ||||
| http_request_size_bytes{handler="/alerts",quantile="0.5"} 0 | ||||
| http_request_size_bytes{handler="/alerts",quantile="0.9"} 0 | ||||
| http_request_size_bytes{handler="/alerts",quantile="0.99"} 0 | ||||
| http_request_size_bytes_sum{handler="/alerts"} 0 | ||||
| http_request_size_bytes_count{handler="/alerts"} 0 | ||||
| http_request_size_bytes{handler="/api/metrics",quantile="0.5"} 0 | ||||
| http_request_size_bytes{handler="/api/metrics",quantile="0.9"} 0 | ||||
| http_request_size_bytes{handler="/api/metrics",quantile="0.99"} 0 | ||||
| http_request_size_bytes_sum{handler="/api/metrics"} 0 | ||||
| http_request_size_bytes_count{handler="/api/metrics"} 0 | ||||
| http_request_size_bytes{handler="/api/query",quantile="0.5"} 0 | ||||
| http_request_size_bytes{handler="/api/query",quantile="0.9"} 0 | ||||
| http_request_size_bytes{handler="/api/query",quantile="0.99"} 0 | ||||
| http_request_size_bytes_sum{handler="/api/query"} 0 | ||||
| http_request_size_bytes_count{handler="/api/query"} 0 | ||||
| http_request_size_bytes{handler="/api/query_range",quantile="0.5"} 0 | ||||
| http_request_size_bytes{handler="/api/query_range",quantile="0.9"} 0 | ||||
| http_request_size_bytes{handler="/api/query_range",quantile="0.99"} 0 | ||||
| http_request_size_bytes_sum{handler="/api/query_range"} 0 | ||||
| http_request_size_bytes_count{handler="/api/query_range"} 0 | ||||
| http_request_size_bytes{handler="/api/targets",quantile="0.5"} 0 | ||||
| http_request_size_bytes{handler="/api/targets",quantile="0.9"} 0 | ||||
| http_request_size_bytes{handler="/api/targets",quantile="0.99"} 0 | ||||
| http_request_size_bytes_sum{handler="/api/targets"} 0 | ||||
| http_request_size_bytes_count{handler="/api/targets"} 0 | ||||
| http_request_size_bytes{handler="/consoles/",quantile="0.5"} 0 | ||||
| http_request_size_bytes{handler="/consoles/",quantile="0.9"} 0 | ||||
| http_request_size_bytes{handler="/consoles/",quantile="0.99"} 0 | ||||
| http_request_size_bytes_sum{handler="/consoles/"} 0 | ||||
| http_request_size_bytes_count{handler="/consoles/"} 0 | ||||
| http_request_size_bytes{handler="/graph",quantile="0.5"} 0 | ||||
| http_request_size_bytes{handler="/graph",quantile="0.9"} 0 | ||||
| http_request_size_bytes{handler="/graph",quantile="0.99"} 0 | ||||
| http_request_size_bytes_sum{handler="/graph"} 0 | ||||
| http_request_size_bytes_count{handler="/graph"} 0 | ||||
| http_request_size_bytes{handler="/heap",quantile="0.5"} 0 | ||||
| http_request_size_bytes{handler="/heap",quantile="0.9"} 0 | ||||
| http_request_size_bytes{handler="/heap",quantile="0.99"} 0 | ||||
| http_request_size_bytes_sum{handler="/heap"} 0 | ||||
| http_request_size_bytes_count{handler="/heap"} 0 | ||||
| http_request_size_bytes{handler="/static/",quantile="0.5"} 0 | ||||
| http_request_size_bytes{handler="/static/",quantile="0.9"} 0 | ||||
| http_request_size_bytes{handler="/static/",quantile="0.99"} 0 | ||||
| http_request_size_bytes_sum{handler="/static/"} 0 | ||||
| http_request_size_bytes_count{handler="/static/"} 0 | ||||
| http_request_size_bytes{handler="prometheus",quantile="0.5"} 291 | ||||
| http_request_size_bytes{handler="prometheus",quantile="0.9"} 291 | ||||
| http_request_size_bytes{handler="prometheus",quantile="0.99"} 291 | ||||
| http_request_size_bytes_sum{handler="prometheus"} 34488 | ||||
| http_request_size_bytes_count{handler="prometheus"} 119 | ||||
| # HELP http_requests_total Total number of HTTP requests made. | ||||
| # TYPE http_requests_total counter | ||||
| http_requests_total{code="200",handler="prometheus",method="get"} 119 | ||||
| # HELP http_response_size_bytes The HTTP response sizes in bytes. | ||||
| # TYPE http_response_size_bytes summary | ||||
| http_response_size_bytes{handler="/",quantile="0.5"} 0 | ||||
| http_response_size_bytes{handler="/",quantile="0.9"} 0 | ||||
| http_response_size_bytes{handler="/",quantile="0.99"} 0 | ||||
| http_response_size_bytes_sum{handler="/"} 0 | ||||
| http_response_size_bytes_count{handler="/"} 0 | ||||
| http_response_size_bytes{handler="/alerts",quantile="0.5"} 0 | ||||
| http_response_size_bytes{handler="/alerts",quantile="0.9"} 0 | ||||
| http_response_size_bytes{handler="/alerts",quantile="0.99"} 0 | ||||
| http_response_size_bytes_sum{handler="/alerts"} 0 | ||||
| http_response_size_bytes_count{handler="/alerts"} 0 | ||||
| http_response_size_bytes{handler="/api/metrics",quantile="0.5"} 0 | ||||
| http_response_size_bytes{handler="/api/metrics",quantile="0.9"} 0 | ||||
| http_response_size_bytes{handler="/api/metrics",quantile="0.99"} 0 | ||||
| http_response_size_bytes_sum{handler="/api/metrics"} 0 | ||||
| http_response_size_bytes_count{handler="/api/metrics"} 0 | ||||
| http_response_size_bytes{handler="/api/query",quantile="0.5"} 0 | ||||
| http_response_size_bytes{handler="/api/query",quantile="0.9"} 0 | ||||
| http_response_size_bytes{handler="/api/query",quantile="0.99"} 0 | ||||
| http_response_size_bytes_sum{handler="/api/query"} 0 | ||||
| http_response_size_bytes_count{handler="/api/query"} 0 | ||||
| http_response_size_bytes{handler="/api/query_range",quantile="0.5"} 0 | ||||
| http_response_size_bytes{handler="/api/query_range",quantile="0.9"} 0 | ||||
| http_response_size_bytes{handler="/api/query_range",quantile="0.99"} 0 | ||||
| http_response_size_bytes_sum{handler="/api/query_range"} 0 | ||||
| http_response_size_bytes_count{handler="/api/query_range"} 0 | ||||
| http_response_size_bytes{handler="/api/targets",quantile="0.5"} 0 | ||||
| http_response_size_bytes{handler="/api/targets",quantile="0.9"} 0 | ||||
| http_response_size_bytes{handler="/api/targets",quantile="0.99"} 0 | ||||
| http_response_size_bytes_sum{handler="/api/targets"} 0 | ||||
| http_response_size_bytes_count{handler="/api/targets"} 0 | ||||
| http_response_size_bytes{handler="/consoles/",quantile="0.5"} 0 | ||||
| http_response_size_bytes{handler="/consoles/",quantile="0.9"} 0 | ||||
| http_response_size_bytes{handler="/consoles/",quantile="0.99"} 0 | ||||
| http_response_size_bytes_sum{handler="/consoles/"} 0 | ||||
| http_response_size_bytes_count{handler="/consoles/"} 0 | ||||
| http_response_size_bytes{handler="/graph",quantile="0.5"} 0 | ||||
| http_response_size_bytes{handler="/graph",quantile="0.9"} 0 | ||||
| http_response_size_bytes{handler="/graph",quantile="0.99"} 0 | ||||
| http_response_size_bytes_sum{handler="/graph"} 0 | ||||
| http_response_size_bytes_count{handler="/graph"} 0 | ||||
| http_response_size_bytes{handler="/heap",quantile="0.5"} 0 | ||||
| http_response_size_bytes{handler="/heap",quantile="0.9"} 0 | ||||
| http_response_size_bytes{handler="/heap",quantile="0.99"} 0 | ||||
| http_response_size_bytes_sum{handler="/heap"} 0 | ||||
| http_response_size_bytes_count{handler="/heap"} 0 | ||||
| http_response_size_bytes{handler="/static/",quantile="0.5"} 0 | ||||
| http_response_size_bytes{handler="/static/",quantile="0.9"} 0 | ||||
| http_response_size_bytes{handler="/static/",quantile="0.99"} 0 | ||||
| http_response_size_bytes_sum{handler="/static/"} 0 | ||||
| http_response_size_bytes_count{handler="/static/"} 0 | ||||
| http_response_size_bytes{handler="prometheus",quantile="0.5"} 2049 | ||||
| http_response_size_bytes{handler="prometheus",quantile="0.9"} 2058 | ||||
| http_response_size_bytes{handler="prometheus",quantile="0.99"} 2064 | ||||
| http_response_size_bytes_sum{handler="prometheus"} 247001 | ||||
| http_response_size_bytes_count{handler="prometheus"} 119 | ||||
| # HELP process_cpu_seconds_total Total user and system CPU time spent in seconds. | ||||
| # TYPE process_cpu_seconds_total counter | ||||
| process_cpu_seconds_total 0.55 | ||||
| # HELP go_goroutines Number of goroutines that currently exist. | ||||
| # TYPE go_goroutines gauge | ||||
| go_goroutines 70 | ||||
| # HELP process_max_fds Maximum number of open file descriptors. | ||||
| # TYPE process_max_fds gauge | ||||
| process_max_fds 8192 | ||||
| # HELP process_open_fds Number of open file descriptors. | ||||
| # TYPE process_open_fds gauge | ||||
| process_open_fds 29 | ||||
| # HELP process_resident_memory_bytes Resident memory size in bytes. | ||||
| # TYPE process_resident_memory_bytes gauge | ||||
| process_resident_memory_bytes 5.3870592e+07 | ||||
| # HELP process_start_time_seconds Start time of the process since unix epoch in seconds. | ||||
| # TYPE process_start_time_seconds gauge | ||||
| process_start_time_seconds 1.42236894836e+09 | ||||
| # HELP process_virtual_memory_bytes Virtual memory size in bytes. | ||||
| # TYPE process_virtual_memory_bytes gauge | ||||
| process_virtual_memory_bytes 5.41478912e+08 | ||||
| # HELP prometheus_dns_sd_lookup_failures_total The number of DNS-SD lookup failures. | ||||
| # TYPE prometheus_dns_sd_lookup_failures_total counter | ||||
| prometheus_dns_sd_lookup_failures_total 0 | ||||
| # HELP prometheus_dns_sd_lookups_total The number of DNS-SD lookups. | ||||
| # TYPE prometheus_dns_sd_lookups_total counter | ||||
| prometheus_dns_sd_lookups_total 7 | ||||
| # HELP prometheus_evaluator_duration_milliseconds The duration for all evaluations to execute. | ||||
| # TYPE prometheus_evaluator_duration_milliseconds summary | ||||
| prometheus_evaluator_duration_milliseconds{quantile="0.01"} 0 | ||||
| prometheus_evaluator_duration_milliseconds{quantile="0.05"} 0 | ||||
| prometheus_evaluator_duration_milliseconds{quantile="0.5"} 0 | ||||
| prometheus_evaluator_duration_milliseconds{quantile="0.9"} 1 | ||||
| prometheus_evaluator_duration_milliseconds{quantile="0.99"} 1 | ||||
| prometheus_evaluator_duration_milliseconds_sum 12 | ||||
| prometheus_evaluator_duration_milliseconds_count 23 | ||||
| # HELP prometheus_local_storage_checkpoint_duration_milliseconds The duration (in milliseconds) it took to checkpoint in-memory metrics and head chunks. | ||||
| # TYPE prometheus_local_storage_checkpoint_duration_milliseconds gauge | ||||
| prometheus_local_storage_checkpoint_duration_milliseconds 0 | ||||
| # HELP prometheus_local_storage_chunk_ops_total The total number of chunk operations by their type. | ||||
| # TYPE prometheus_local_storage_chunk_ops_total counter | ||||
| prometheus_local_storage_chunk_ops_total{type="create"} 598 | ||||
| prometheus_local_storage_chunk_ops_total{type="persist"} 174 | ||||
| prometheus_local_storage_chunk_ops_total{type="pin"} 920 | ||||
| prometheus_local_storage_chunk_ops_total{type="transcode"} 415 | ||||
| prometheus_local_storage_chunk_ops_total{type="unpin"} 920 | ||||
| # HELP prometheus_local_storage_indexing_batch_latency_milliseconds Quantiles for batch indexing latencies in milliseconds. | ||||
| # TYPE prometheus_local_storage_indexing_batch_latency_milliseconds summary | ||||
| prometheus_local_storage_indexing_batch_latency_milliseconds{quantile="0.5"} 0 | ||||
| prometheus_local_storage_indexing_batch_latency_milliseconds{quantile="0.9"} 0 | ||||
| prometheus_local_storage_indexing_batch_latency_milliseconds{quantile="0.99"} 0 | ||||
| prometheus_local_storage_indexing_batch_latency_milliseconds_sum 0 | ||||
| prometheus_local_storage_indexing_batch_latency_milliseconds_count 1 | ||||
| # HELP prometheus_local_storage_indexing_batch_sizes Quantiles for indexing batch sizes (number of metrics per batch). | ||||
| # TYPE prometheus_local_storage_indexing_batch_sizes summary | ||||
| prometheus_local_storage_indexing_batch_sizes{quantile="0.5"} 2 | ||||
| prometheus_local_storage_indexing_batch_sizes{quantile="0.9"} 2 | ||||
| prometheus_local_storage_indexing_batch_sizes{quantile="0.99"} 2 | ||||
| prometheus_local_storage_indexing_batch_sizes_sum 2 | ||||
| prometheus_local_storage_indexing_batch_sizes_count 1 | ||||
| # HELP prometheus_local_storage_indexing_queue_capacity The capacity of the indexing queue. | ||||
| # TYPE prometheus_local_storage_indexing_queue_capacity gauge | ||||
| prometheus_local_storage_indexing_queue_capacity 16384 | ||||
| # HELP prometheus_local_storage_indexing_queue_length The number of metrics waiting to be indexed. | ||||
| # TYPE prometheus_local_storage_indexing_queue_length gauge | ||||
| prometheus_local_storage_indexing_queue_length 0 | ||||
| # HELP prometheus_local_storage_ingested_samples_total The total number of samples ingested. | ||||
| # TYPE prometheus_local_storage_ingested_samples_total counter | ||||
| prometheus_local_storage_ingested_samples_total 30473 | ||||
| # HELP prometheus_local_storage_invalid_preload_requests_total The total number of preload requests referring to a non-existent series. This is an indication of outdated label indexes. | ||||
| # TYPE prometheus_local_storage_invalid_preload_requests_total counter | ||||
| prometheus_local_storage_invalid_preload_requests_total 0 | ||||
| # HELP prometheus_local_storage_memory_chunkdescs The current number of chunk descriptors in memory. | ||||
| # TYPE prometheus_local_storage_memory_chunkdescs gauge | ||||
| prometheus_local_storage_memory_chunkdescs 1059 | ||||
| # HELP prometheus_local_storage_memory_chunks The current number of chunks in memory, excluding cloned chunks (i.e. chunks without a descriptor). | ||||
| # TYPE prometheus_local_storage_memory_chunks gauge | ||||
| prometheus_local_storage_memory_chunks 1020 | ||||
| # HELP prometheus_local_storage_memory_series The current number of series in memory. | ||||
| # TYPE prometheus_local_storage_memory_series gauge | ||||
| prometheus_local_storage_memory_series 424 | ||||
| # HELP prometheus_local_storage_persist_latency_microseconds A summary of latencies for persisting each chunk. | ||||
| # TYPE prometheus_local_storage_persist_latency_microseconds summary | ||||
| prometheus_local_storage_persist_latency_microseconds{quantile="0.5"} 30.377 | ||||
| prometheus_local_storage_persist_latency_microseconds{quantile="0.9"} 203.539 | ||||
| prometheus_local_storage_persist_latency_microseconds{quantile="0.99"} 2626.463 | ||||
| prometheus_local_storage_persist_latency_microseconds_sum 20424.415 | ||||
| prometheus_local_storage_persist_latency_microseconds_count 174 | ||||
| # HELP prometheus_local_storage_persist_queue_capacity The total capacity of the persist queue. | ||||
| # TYPE prometheus_local_storage_persist_queue_capacity gauge | ||||
| prometheus_local_storage_persist_queue_capacity 1024 | ||||
| # HELP prometheus_local_storage_persist_queue_length The current number of chunks waiting in the persist queue. | ||||
| # TYPE prometheus_local_storage_persist_queue_length gauge | ||||
| prometheus_local_storage_persist_queue_length 0 | ||||
| # HELP prometheus_local_storage_series_ops_total The total number of series operations by their type. | ||||
| # TYPE prometheus_local_storage_series_ops_total counter | ||||
| prometheus_local_storage_series_ops_total{type="create"} 2 | ||||
| prometheus_local_storage_series_ops_total{type="maintenance_in_memory"} 11 | ||||
| # HELP prometheus_notifications_latency_milliseconds Latency quantiles for sending alert notifications (not including dropped notifications). | ||||
| # TYPE prometheus_notifications_latency_milliseconds summary | ||||
| prometheus_notifications_latency_milliseconds{quantile="0.5"} 0 | ||||
| prometheus_notifications_latency_milliseconds{quantile="0.9"} 0 | ||||
| prometheus_notifications_latency_milliseconds{quantile="0.99"} 0 | ||||
| prometheus_notifications_latency_milliseconds_sum 0 | ||||
| prometheus_notifications_latency_milliseconds_count 0 | ||||
| # HELP prometheus_notifications_queue_capacity The capacity of the alert notifications queue. | ||||
| # TYPE prometheus_notifications_queue_capacity gauge | ||||
| prometheus_notifications_queue_capacity 100 | ||||
| # HELP prometheus_notifications_queue_length The number of alert notifications in the queue. | ||||
| # TYPE prometheus_notifications_queue_length gauge | ||||
| prometheus_notifications_queue_length 0 | ||||
| # HELP prometheus_rule_evaluation_duration_milliseconds The duration for a rule to execute. | ||||
| # TYPE prometheus_rule_evaluation_duration_milliseconds summary | ||||
| prometheus_rule_evaluation_duration_milliseconds{rule_type="alerting",quantile="0.5"} 0 | ||||
| prometheus_rule_evaluation_duration_milliseconds{rule_type="alerting",quantile="0.9"} 0 | ||||
| prometheus_rule_evaluation_duration_milliseconds{rule_type="alerting",quantile="0.99"} 2 | ||||
| prometheus_rule_evaluation_duration_milliseconds_sum{rule_type="alerting"} 12 | ||||
| prometheus_rule_evaluation_duration_milliseconds_count{rule_type="alerting"} 115 | ||||
| prometheus_rule_evaluation_duration_milliseconds{rule_type="recording",quantile="0.5"} 0 | ||||
| prometheus_rule_evaluation_duration_milliseconds{rule_type="recording",quantile="0.9"} 0 | ||||
| prometheus_rule_evaluation_duration_milliseconds{rule_type="recording",quantile="0.99"} 3 | ||||
| prometheus_rule_evaluation_duration_milliseconds_sum{rule_type="recording"} 15 | ||||
| prometheus_rule_evaluation_duration_milliseconds_count{rule_type="recording"} 115 | ||||
| # HELP prometheus_rule_evaluation_failures_total The total number of rule evaluation failures. | ||||
| # TYPE prometheus_rule_evaluation_failures_total counter | ||||
| prometheus_rule_evaluation_failures_total 0 | ||||
| # HELP prometheus_samples_queue_capacity Capacity of the queue for unwritten samples. | ||||
| # TYPE prometheus_samples_queue_capacity gauge | ||||
| prometheus_samples_queue_capacity 4096 | ||||
| # HELP prometheus_samples_queue_length Current number of items in the queue for unwritten samples. Each item comprises all samples exposed by one target as one metric family (i.e. metrics of the same name). | ||||
| # TYPE prometheus_samples_queue_length gauge | ||||
| prometheus_samples_queue_length 0 | ||||
| # HELP prometheus_target_interval_length_seconds Actual intervals between scrapes. | ||||
| # TYPE prometheus_target_interval_length_seconds summary | ||||
| prometheus_target_interval_length_seconds{interval="15s",quantile="0.01"} 14 | ||||
| prometheus_target_interval_length_seconds{interval="15s",quantile="0.05"} 14 | ||||
| prometheus_target_interval_length_seconds{interval="15s",quantile="0.5"} 15 | ||||
| prometheus_target_interval_length_seconds{interval="15s",quantile="0.9"} 15 | ||||
| prometheus_target_interval_length_seconds{interval="15s",quantile="0.99"} 15 | ||||
| prometheus_target_interval_length_seconds_sum{interval="15s"} 175 | ||||
| prometheus_target_interval_length_seconds_count{interval="15s"} 12 | ||||
| prometheus_target_interval_length_seconds{interval="1s",quantile="0.01"} 0 | ||||
| prometheus_target_interval_length_seconds{interval="1s",quantile="0.05"} 0 | ||||
| prometheus_target_interval_length_seconds{interval="1s",quantile="0.5"} 0 | ||||
| prometheus_target_interval_length_seconds{interval="1s",quantile="0.9"} 1 | ||||
| prometheus_target_interval_length_seconds{interval="1s",quantile="0.99"} 1 | ||||
| prometheus_target_interval_length_seconds_sum{interval="1s"} 55 | ||||
| prometheus_target_interval_length_seconds_count{interval="1s"} 117 | ||||
							
								
								
									
										
											BIN
										
									
								
								vendor/github.com/prometheus/common/expfmt/testdata/text.gz
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								vendor/github.com/prometheus/common/expfmt/testdata/text.gz
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										89
									
								
								vendor/github.com/prometheus/common/log/eventlog_formatter.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								vendor/github.com/prometheus/common/log/eventlog_formatter.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,89 @@ | ||||
| // Copyright 2015 The Prometheus Authors | ||||
| // Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| // you may not use this file except in compliance with the License. | ||||
| // You may obtain a copy of the License at | ||||
| // | ||||
| // http://www.apache.org/licenses/LICENSE-2.0 | ||||
| // | ||||
| // Unless required by applicable law or agreed to in writing, software | ||||
| // distributed under the License is distributed on an "AS IS" BASIS, | ||||
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
| // See the License for the specific language governing permissions and | ||||
| // limitations under the License. | ||||
|  | ||||
| // +build windows | ||||
|  | ||||
| package log | ||||
|  | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"os" | ||||
|  | ||||
| 	"golang.org/x/sys/windows/svc/eventlog" | ||||
|  | ||||
| 	"github.com/sirupsen/logrus" | ||||
| ) | ||||
|  | ||||
| func init() { | ||||
| 	setEventlogFormatter = func(l logger, name string, debugAsInfo bool) error { | ||||
| 		if name == "" { | ||||
| 			return fmt.Errorf("missing name parameter") | ||||
| 		} | ||||
|  | ||||
| 		fmter, err := newEventlogger(name, debugAsInfo, l.entry.Logger.Formatter) | ||||
| 		if err != nil { | ||||
| 			fmt.Fprintf(os.Stderr, "error creating eventlog formatter: %v\n", err) | ||||
| 			l.Errorf("can't connect logger to eventlog: %v", err) | ||||
| 			return err | ||||
| 		} | ||||
| 		l.entry.Logger.Formatter = fmter | ||||
| 		return nil | ||||
| 	} | ||||
| } | ||||
|  | ||||
| type eventlogger struct { | ||||
| 	log         *eventlog.Log | ||||
| 	debugAsInfo bool | ||||
| 	wrap        logrus.Formatter | ||||
| } | ||||
|  | ||||
| func newEventlogger(name string, debugAsInfo bool, fmter logrus.Formatter) (*eventlogger, error) { | ||||
| 	logHandle, err := eventlog.Open(name) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return &eventlogger{log: logHandle, debugAsInfo: debugAsInfo, wrap: fmter}, nil | ||||
| } | ||||
|  | ||||
| func (s *eventlogger) Format(e *logrus.Entry) ([]byte, error) { | ||||
| 	data, err := s.wrap.Format(e) | ||||
| 	if err != nil { | ||||
| 		fmt.Fprintf(os.Stderr, "eventlogger: can't format entry: %v\n", err) | ||||
| 		return data, err | ||||
| 	} | ||||
|  | ||||
| 	switch e.Level { | ||||
| 	case logrus.PanicLevel: | ||||
| 		fallthrough | ||||
| 	case logrus.FatalLevel: | ||||
| 		fallthrough | ||||
| 	case logrus.ErrorLevel: | ||||
| 		err = s.log.Error(102, e.Message) | ||||
| 	case logrus.WarnLevel: | ||||
| 		err = s.log.Warning(101, e.Message) | ||||
| 	case logrus.InfoLevel: | ||||
| 		err = s.log.Info(100, e.Message) | ||||
| 	case logrus.DebugLevel: | ||||
| 		if s.debugAsInfo { | ||||
| 			err = s.log.Info(100, e.Message) | ||||
| 		} | ||||
| 	default: | ||||
| 		err = s.log.Info(100, e.Message) | ||||
| 	} | ||||
|  | ||||
| 	if err != nil { | ||||
| 		fmt.Fprintf(os.Stderr, "eventlogger: can't send log to eventlog: %v\n", err) | ||||
| 	} | ||||
|  | ||||
| 	return data, err | ||||
| } | ||||
							
								
								
									
										364
									
								
								vendor/github.com/prometheus/common/log/log.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										364
									
								
								vendor/github.com/prometheus/common/log/log.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,364 @@ | ||||
| // Copyright 2015 The Prometheus Authors | ||||
| // Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| // you may not use this file except in compliance with the License. | ||||
| // You may obtain a copy of the License at | ||||
| // | ||||
| // http://www.apache.org/licenses/LICENSE-2.0 | ||||
| // | ||||
| // Unless required by applicable law or agreed to in writing, software | ||||
| // distributed under the License is distributed on an "AS IS" BASIS, | ||||
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
| // See the License for the specific language governing permissions and | ||||
| // limitations under the License. | ||||
|  | ||||
| package log | ||||
|  | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"io" | ||||
| 	"io/ioutil" | ||||
| 	"log" | ||||
| 	"net/url" | ||||
| 	"os" | ||||
| 	"runtime" | ||||
| 	"strconv" | ||||
| 	"strings" | ||||
|  | ||||
| 	"github.com/sirupsen/logrus" | ||||
| 	"gopkg.in/alecthomas/kingpin.v2" | ||||
| ) | ||||
|  | ||||
| // setSyslogFormatter is nil if the target architecture does not support syslog. | ||||
| var setSyslogFormatter func(logger, string, string) error | ||||
|  | ||||
| // setEventlogFormatter is nil if the target OS does not support Eventlog (i.e., is not Windows). | ||||
| var setEventlogFormatter func(logger, string, bool) error | ||||
|  | ||||
| func setJSONFormatter() { | ||||
| 	origLogger.Formatter = &logrus.JSONFormatter{} | ||||
| } | ||||
|  | ||||
| type loggerSettings struct { | ||||
| 	level  string | ||||
| 	format string | ||||
| } | ||||
|  | ||||
| func (s *loggerSettings) apply(ctx *kingpin.ParseContext) error { | ||||
| 	err := baseLogger.SetLevel(s.level) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	err = baseLogger.SetFormat(s.format) | ||||
| 	return err | ||||
| } | ||||
|  | ||||
| // AddFlags adds the flags used by this package to the Kingpin application. | ||||
| // To use the default Kingpin application, call AddFlags(kingpin.CommandLine) | ||||
| func AddFlags(a *kingpin.Application) { | ||||
| 	s := loggerSettings{} | ||||
| 	a.Flag("log.level", "Only log messages with the given severity or above. Valid levels: [debug, info, warn, error, fatal]"). | ||||
| 		Default(origLogger.Level.String()). | ||||
| 		StringVar(&s.level) | ||||
| 	defaultFormat := url.URL{Scheme: "logger", Opaque: "stderr"} | ||||
| 	a.Flag("log.format", `Set the log target and format. Example: "logger:syslog?appname=bob&local=7" or "logger:stdout?json=true"`). | ||||
| 		Default(defaultFormat.String()). | ||||
| 		StringVar(&s.format) | ||||
| 	a.Action(s.apply) | ||||
| } | ||||
|  | ||||
| // Logger is the interface for loggers used in the Prometheus components. | ||||
| type Logger interface { | ||||
| 	Debug(...interface{}) | ||||
| 	Debugln(...interface{}) | ||||
| 	Debugf(string, ...interface{}) | ||||
|  | ||||
| 	Info(...interface{}) | ||||
| 	Infoln(...interface{}) | ||||
| 	Infof(string, ...interface{}) | ||||
|  | ||||
| 	Warn(...interface{}) | ||||
| 	Warnln(...interface{}) | ||||
| 	Warnf(string, ...interface{}) | ||||
|  | ||||
| 	Error(...interface{}) | ||||
| 	Errorln(...interface{}) | ||||
| 	Errorf(string, ...interface{}) | ||||
|  | ||||
| 	Fatal(...interface{}) | ||||
| 	Fatalln(...interface{}) | ||||
| 	Fatalf(string, ...interface{}) | ||||
|  | ||||
| 	With(key string, value interface{}) Logger | ||||
|  | ||||
| 	SetFormat(string) error | ||||
| 	SetLevel(string) error | ||||
| } | ||||
|  | ||||
| type logger struct { | ||||
| 	entry *logrus.Entry | ||||
| } | ||||
|  | ||||
| func (l logger) With(key string, value interface{}) Logger { | ||||
| 	return logger{l.entry.WithField(key, value)} | ||||
| } | ||||
|  | ||||
| // Debug logs a message at level Debug on the standard logger. | ||||
| func (l logger) Debug(args ...interface{}) { | ||||
| 	l.sourced().Debug(args...) | ||||
| } | ||||
|  | ||||
| // Debug logs a message at level Debug on the standard logger. | ||||
| func (l logger) Debugln(args ...interface{}) { | ||||
| 	l.sourced().Debugln(args...) | ||||
| } | ||||
|  | ||||
| // Debugf logs a message at level Debug on the standard logger. | ||||
| func (l logger) Debugf(format string, args ...interface{}) { | ||||
| 	l.sourced().Debugf(format, args...) | ||||
| } | ||||
|  | ||||
| // Info logs a message at level Info on the standard logger. | ||||
| func (l logger) Info(args ...interface{}) { | ||||
| 	l.sourced().Info(args...) | ||||
| } | ||||
|  | ||||
| // Info logs a message at level Info on the standard logger. | ||||
| func (l logger) Infoln(args ...interface{}) { | ||||
| 	l.sourced().Infoln(args...) | ||||
| } | ||||
|  | ||||
| // Infof logs a message at level Info on the standard logger. | ||||
| func (l logger) Infof(format string, args ...interface{}) { | ||||
| 	l.sourced().Infof(format, args...) | ||||
| } | ||||
|  | ||||
| // Warn logs a message at level Warn on the standard logger. | ||||
| func (l logger) Warn(args ...interface{}) { | ||||
| 	l.sourced().Warn(args...) | ||||
| } | ||||
|  | ||||
| // Warn logs a message at level Warn on the standard logger. | ||||
| func (l logger) Warnln(args ...interface{}) { | ||||
| 	l.sourced().Warnln(args...) | ||||
| } | ||||
|  | ||||
| // Warnf logs a message at level Warn on the standard logger. | ||||
| func (l logger) Warnf(format string, args ...interface{}) { | ||||
| 	l.sourced().Warnf(format, args...) | ||||
| } | ||||
|  | ||||
| // Error logs a message at level Error on the standard logger. | ||||
| func (l logger) Error(args ...interface{}) { | ||||
| 	l.sourced().Error(args...) | ||||
| } | ||||
|  | ||||
| // Error logs a message at level Error on the standard logger. | ||||
| func (l logger) Errorln(args ...interface{}) { | ||||
| 	l.sourced().Errorln(args...) | ||||
| } | ||||
|  | ||||
| // Errorf logs a message at level Error on the standard logger. | ||||
| func (l logger) Errorf(format string, args ...interface{}) { | ||||
| 	l.sourced().Errorf(format, args...) | ||||
| } | ||||
|  | ||||
| // Fatal logs a message at level Fatal on the standard logger. | ||||
| func (l logger) Fatal(args ...interface{}) { | ||||
| 	l.sourced().Fatal(args...) | ||||
| } | ||||
|  | ||||
| // Fatal logs a message at level Fatal on the standard logger. | ||||
| func (l logger) Fatalln(args ...interface{}) { | ||||
| 	l.sourced().Fatalln(args...) | ||||
| } | ||||
|  | ||||
| // Fatalf logs a message at level Fatal on the standard logger. | ||||
| func (l logger) Fatalf(format string, args ...interface{}) { | ||||
| 	l.sourced().Fatalf(format, args...) | ||||
| } | ||||
|  | ||||
| func (l logger) SetLevel(level string) error { | ||||
| 	lvl, err := logrus.ParseLevel(level) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	l.entry.Logger.Level = lvl | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (l logger) SetFormat(format string) error { | ||||
| 	u, err := url.Parse(format) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	if u.Scheme != "logger" { | ||||
| 		return fmt.Errorf("invalid scheme %s", u.Scheme) | ||||
| 	} | ||||
| 	jsonq := u.Query().Get("json") | ||||
| 	if jsonq == "true" { | ||||
| 		setJSONFormatter() | ||||
| 	} | ||||
|  | ||||
| 	switch u.Opaque { | ||||
| 	case "syslog": | ||||
| 		if setSyslogFormatter == nil { | ||||
| 			return fmt.Errorf("system does not support syslog") | ||||
| 		} | ||||
| 		appname := u.Query().Get("appname") | ||||
| 		facility := u.Query().Get("local") | ||||
| 		return setSyslogFormatter(l, appname, facility) | ||||
| 	case "eventlog": | ||||
| 		if setEventlogFormatter == nil { | ||||
| 			return fmt.Errorf("system does not support eventlog") | ||||
| 		} | ||||
| 		name := u.Query().Get("name") | ||||
| 		debugAsInfo := false | ||||
| 		debugAsInfoRaw := u.Query().Get("debugAsInfo") | ||||
| 		if parsedDebugAsInfo, err := strconv.ParseBool(debugAsInfoRaw); err == nil { | ||||
| 			debugAsInfo = parsedDebugAsInfo | ||||
| 		} | ||||
| 		return setEventlogFormatter(l, name, debugAsInfo) | ||||
| 	case "stdout": | ||||
| 		l.entry.Logger.Out = os.Stdout | ||||
| 	case "stderr": | ||||
| 		l.entry.Logger.Out = os.Stderr | ||||
| 	default: | ||||
| 		return fmt.Errorf("unsupported logger %q", u.Opaque) | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // sourced adds a source field to the logger that contains | ||||
| // the file name and line where the logging happened. | ||||
| func (l logger) sourced() *logrus.Entry { | ||||
| 	_, file, line, ok := runtime.Caller(2) | ||||
| 	if !ok { | ||||
| 		file = "<???>" | ||||
| 		line = 1 | ||||
| 	} else { | ||||
| 		slash := strings.LastIndex(file, "/") | ||||
| 		file = file[slash+1:] | ||||
| 	} | ||||
| 	return l.entry.WithField("source", fmt.Sprintf("%s:%d", file, line)) | ||||
| } | ||||
|  | ||||
| var origLogger = logrus.New() | ||||
| var baseLogger = logger{entry: logrus.NewEntry(origLogger)} | ||||
|  | ||||
| // Base returns the default Logger logging to | ||||
| func Base() Logger { | ||||
| 	return baseLogger | ||||
| } | ||||
|  | ||||
| // NewLogger returns a new Logger logging to out. | ||||
| func NewLogger(w io.Writer) Logger { | ||||
| 	l := logrus.New() | ||||
| 	l.Out = w | ||||
| 	return logger{entry: logrus.NewEntry(l)} | ||||
| } | ||||
|  | ||||
| // NewNopLogger returns a logger that discards all log messages. | ||||
| func NewNopLogger() Logger { | ||||
| 	l := logrus.New() | ||||
| 	l.Out = ioutil.Discard | ||||
| 	return logger{entry: logrus.NewEntry(l)} | ||||
| } | ||||
|  | ||||
| // With adds a field to the logger. | ||||
| func With(key string, value interface{}) Logger { | ||||
| 	return baseLogger.With(key, value) | ||||
| } | ||||
|  | ||||
| // Debug logs a message at level Debug on the standard logger. | ||||
| func Debug(args ...interface{}) { | ||||
| 	baseLogger.sourced().Debug(args...) | ||||
| } | ||||
|  | ||||
| // Debugln logs a message at level Debug on the standard logger. | ||||
| func Debugln(args ...interface{}) { | ||||
| 	baseLogger.sourced().Debugln(args...) | ||||
| } | ||||
|  | ||||
| // Debugf logs a message at level Debug on the standard logger. | ||||
| func Debugf(format string, args ...interface{}) { | ||||
| 	baseLogger.sourced().Debugf(format, args...) | ||||
| } | ||||
|  | ||||
| // Info logs a message at level Info on the standard logger. | ||||
| func Info(args ...interface{}) { | ||||
| 	baseLogger.sourced().Info(args...) | ||||
| } | ||||
|  | ||||
| // Infoln logs a message at level Info on the standard logger. | ||||
| func Infoln(args ...interface{}) { | ||||
| 	baseLogger.sourced().Infoln(args...) | ||||
| } | ||||
|  | ||||
| // Infof logs a message at level Info on the standard logger. | ||||
| func Infof(format string, args ...interface{}) { | ||||
| 	baseLogger.sourced().Infof(format, args...) | ||||
| } | ||||
|  | ||||
| // Warn logs a message at level Warn on the standard logger. | ||||
| func Warn(args ...interface{}) { | ||||
| 	baseLogger.sourced().Warn(args...) | ||||
| } | ||||
|  | ||||
| // Warnln logs a message at level Warn on the standard logger. | ||||
| func Warnln(args ...interface{}) { | ||||
| 	baseLogger.sourced().Warnln(args...) | ||||
| } | ||||
|  | ||||
| // Warnf logs a message at level Warn on the standard logger. | ||||
| func Warnf(format string, args ...interface{}) { | ||||
| 	baseLogger.sourced().Warnf(format, args...) | ||||
| } | ||||
|  | ||||
| // Error logs a message at level Error on the standard logger. | ||||
| func Error(args ...interface{}) { | ||||
| 	baseLogger.sourced().Error(args...) | ||||
| } | ||||
|  | ||||
| // Errorln logs a message at level Error on the standard logger. | ||||
| func Errorln(args ...interface{}) { | ||||
| 	baseLogger.sourced().Errorln(args...) | ||||
| } | ||||
|  | ||||
| // Errorf logs a message at level Error on the standard logger. | ||||
| func Errorf(format string, args ...interface{}) { | ||||
| 	baseLogger.sourced().Errorf(format, args...) | ||||
| } | ||||
|  | ||||
| // Fatal logs a message at level Fatal on the standard logger. | ||||
| func Fatal(args ...interface{}) { | ||||
| 	baseLogger.sourced().Fatal(args...) | ||||
| } | ||||
|  | ||||
| // Fatalln logs a message at level Fatal on the standard logger. | ||||
| func Fatalln(args ...interface{}) { | ||||
| 	baseLogger.sourced().Fatalln(args...) | ||||
| } | ||||
|  | ||||
| // Fatalf logs a message at level Fatal on the standard logger. | ||||
| func Fatalf(format string, args ...interface{}) { | ||||
| 	baseLogger.sourced().Fatalf(format, args...) | ||||
| } | ||||
|  | ||||
| // AddHook adds hook to Prometheus' original logger. | ||||
| func AddHook(hook logrus.Hook) { | ||||
| 	origLogger.Hooks.Add(hook) | ||||
| } | ||||
|  | ||||
| type errorLogWriter struct{} | ||||
|  | ||||
| func (errorLogWriter) Write(b []byte) (int, error) { | ||||
| 	baseLogger.sourced().Error(string(b)) | ||||
| 	return len(b), nil | ||||
| } | ||||
|  | ||||
| // NewErrorLogger returns a log.Logger that is meant to be used | ||||
| // in the ErrorLog field of an http.Server to log HTTP server errors. | ||||
| func NewErrorLogger() *log.Logger { | ||||
| 	return log.New(&errorLogWriter{}, "", 0) | ||||
| } | ||||
							
								
								
									
										39
									
								
								vendor/github.com/prometheus/common/log/log_test.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								vendor/github.com/prometheus/common/log/log_test.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,39 @@ | ||||
| // Copyright 2015 The Prometheus Authors | ||||
| // Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| // you may not use this file except in compliance with the License. | ||||
| // You may obtain a copy of the License at | ||||
| // | ||||
| // http://www.apache.org/licenses/LICENSE-2.0 | ||||
| // | ||||
| // Unless required by applicable law or agreed to in writing, software | ||||
| // distributed under the License is distributed on an "AS IS" BASIS, | ||||
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
| // See the License for the specific language governing permissions and | ||||
| // limitations under the License. | ||||
|  | ||||
| package log | ||||
|  | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"regexp" | ||||
| 	"testing" | ||||
|  | ||||
| 	"github.com/sirupsen/logrus" | ||||
| ) | ||||
|  | ||||
| func TestFileLineLogging(t *testing.T) { | ||||
| 	var buf bytes.Buffer | ||||
| 	origLogger.Out = &buf | ||||
| 	origLogger.Formatter = &logrus.TextFormatter{ | ||||
| 		DisableColors: true, | ||||
| 	} | ||||
|  | ||||
| 	// The default logging level should be "info". | ||||
| 	Debug("This debug-level line should not show up in the output.") | ||||
| 	Infof("This %s-level line should show up in the output.", "info") | ||||
|  | ||||
| 	re := `^time=".*" level=info msg="This info-level line should show up in the output." source="log_test.go:33"\n$` | ||||
| 	if !regexp.MustCompile(re).Match(buf.Bytes()) { | ||||
| 		t.Fatalf("%q did not match expected regex %q", buf.String(), re) | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										126
									
								
								vendor/github.com/prometheus/common/log/syslog_formatter.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										126
									
								
								vendor/github.com/prometheus/common/log/syslog_formatter.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,126 @@ | ||||
| // Copyright 2015 The Prometheus Authors | ||||
| // Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| // you may not use this file except in compliance with the License. | ||||
| // You may obtain a copy of the License at | ||||
| // | ||||
| // http://www.apache.org/licenses/LICENSE-2.0 | ||||
| // | ||||
| // Unless required by applicable law or agreed to in writing, software | ||||
| // distributed under the License is distributed on an "AS IS" BASIS, | ||||
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
| // See the License for the specific language governing permissions and | ||||
| // limitations under the License. | ||||
|  | ||||
| // +build !windows,!nacl,!plan9 | ||||
|  | ||||
| package log | ||||
|  | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"log/syslog" | ||||
| 	"os" | ||||
|  | ||||
| 	"github.com/sirupsen/logrus" | ||||
| ) | ||||
|  | ||||
| var _ logrus.Formatter = (*syslogger)(nil) | ||||
|  | ||||
| func init() { | ||||
| 	setSyslogFormatter = func(l logger, appname, local string) error { | ||||
| 		if appname == "" { | ||||
| 			return fmt.Errorf("missing appname parameter") | ||||
| 		} | ||||
| 		if local == "" { | ||||
| 			return fmt.Errorf("missing local parameter") | ||||
| 		} | ||||
|  | ||||
| 		fmter, err := newSyslogger(appname, local, l.entry.Logger.Formatter) | ||||
| 		if err != nil { | ||||
| 			fmt.Fprintf(os.Stderr, "error creating syslog formatter: %v\n", err) | ||||
| 			l.entry.Errorf("can't connect logger to syslog: %v", err) | ||||
| 			return err | ||||
| 		} | ||||
| 		l.entry.Logger.Formatter = fmter | ||||
| 		return nil | ||||
| 	} | ||||
| } | ||||
|  | ||||
| var prefixTag []byte | ||||
|  | ||||
| type syslogger struct { | ||||
| 	wrap logrus.Formatter | ||||
| 	out  *syslog.Writer | ||||
| } | ||||
|  | ||||
| func newSyslogger(appname string, facility string, fmter logrus.Formatter) (*syslogger, error) { | ||||
| 	priority, err := getFacility(facility) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	out, err := syslog.New(priority, appname) | ||||
| 	_, isJSON := fmter.(*logrus.JSONFormatter) | ||||
| 	if isJSON { | ||||
| 		// add cee tag to json formatted syslogs | ||||
| 		prefixTag = []byte("@cee:") | ||||
| 	} | ||||
| 	return &syslogger{ | ||||
| 		out:  out, | ||||
| 		wrap: fmter, | ||||
| 	}, err | ||||
| } | ||||
|  | ||||
| func getFacility(facility string) (syslog.Priority, error) { | ||||
| 	switch facility { | ||||
| 	case "0": | ||||
| 		return syslog.LOG_LOCAL0, nil | ||||
| 	case "1": | ||||
| 		return syslog.LOG_LOCAL1, nil | ||||
| 	case "2": | ||||
| 		return syslog.LOG_LOCAL2, nil | ||||
| 	case "3": | ||||
| 		return syslog.LOG_LOCAL3, nil | ||||
| 	case "4": | ||||
| 		return syslog.LOG_LOCAL4, nil | ||||
| 	case "5": | ||||
| 		return syslog.LOG_LOCAL5, nil | ||||
| 	case "6": | ||||
| 		return syslog.LOG_LOCAL6, nil | ||||
| 	case "7": | ||||
| 		return syslog.LOG_LOCAL7, nil | ||||
| 	} | ||||
| 	return syslog.LOG_LOCAL0, fmt.Errorf("invalid local(%s) for syslog", facility) | ||||
| } | ||||
|  | ||||
| func (s *syslogger) Format(e *logrus.Entry) ([]byte, error) { | ||||
| 	data, err := s.wrap.Format(e) | ||||
| 	if err != nil { | ||||
| 		fmt.Fprintf(os.Stderr, "syslogger: can't format entry: %v\n", err) | ||||
| 		return data, err | ||||
| 	} | ||||
| 	// only append tag to data sent to syslog (line), not to what | ||||
| 	// is returned | ||||
| 	line := string(append(prefixTag, data...)) | ||||
|  | ||||
| 	switch e.Level { | ||||
| 	case logrus.PanicLevel: | ||||
| 		err = s.out.Crit(line) | ||||
| 	case logrus.FatalLevel: | ||||
| 		err = s.out.Crit(line) | ||||
| 	case logrus.ErrorLevel: | ||||
| 		err = s.out.Err(line) | ||||
| 	case logrus.WarnLevel: | ||||
| 		err = s.out.Warning(line) | ||||
| 	case logrus.InfoLevel: | ||||
| 		err = s.out.Info(line) | ||||
| 	case logrus.DebugLevel: | ||||
| 		err = s.out.Debug(line) | ||||
| 	default: | ||||
| 		err = s.out.Notice(line) | ||||
| 	} | ||||
|  | ||||
| 	if err != nil { | ||||
| 		fmt.Fprintf(os.Stderr, "syslogger: can't send log to syslog: %v\n", err) | ||||
| 	} | ||||
|  | ||||
| 	return data, err | ||||
| } | ||||
							
								
								
									
										52
									
								
								vendor/github.com/prometheus/common/log/syslog_formatter_test.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								vendor/github.com/prometheus/common/log/syslog_formatter_test.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,52 @@ | ||||
| // Copyright 2015 The Prometheus Authors | ||||
| // Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| // you may not use this file except in compliance with the License. | ||||
| // You may obtain a copy of the License at | ||||
| // | ||||
| // http://www.apache.org/licenses/LICENSE-2.0 | ||||
| // | ||||
| // Unless required by applicable law or agreed to in writing, software | ||||
| // distributed under the License is distributed on an "AS IS" BASIS, | ||||
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
| // See the License for the specific language governing permissions and | ||||
| // limitations under the License. | ||||
|  | ||||
| // +build !windows,!nacl,!plan9 | ||||
|  | ||||
| package log | ||||
|  | ||||
| import ( | ||||
| 	"errors" | ||||
| 	"log/syslog" | ||||
| 	"testing" | ||||
| ) | ||||
|  | ||||
| func TestGetFacility(t *testing.T) { | ||||
| 	testCases := []struct { | ||||
| 		facility         string | ||||
| 		expectedPriority syslog.Priority | ||||
| 		expectedErr      error | ||||
| 	}{ | ||||
| 		{"0", syslog.LOG_LOCAL0, nil}, | ||||
| 		{"1", syslog.LOG_LOCAL1, nil}, | ||||
| 		{"2", syslog.LOG_LOCAL2, nil}, | ||||
| 		{"3", syslog.LOG_LOCAL3, nil}, | ||||
| 		{"4", syslog.LOG_LOCAL4, nil}, | ||||
| 		{"5", syslog.LOG_LOCAL5, nil}, | ||||
| 		{"6", syslog.LOG_LOCAL6, nil}, | ||||
| 		{"7", syslog.LOG_LOCAL7, nil}, | ||||
| 		{"8", syslog.LOG_LOCAL0, errors.New("invalid local(8) for syslog")}, | ||||
| 	} | ||||
| 	for _, tc := range testCases { | ||||
| 		priority, err := getFacility(tc.facility) | ||||
| 		if err != tc.expectedErr { | ||||
| 			if err.Error() != tc.expectedErr.Error() { | ||||
| 				t.Errorf("want %s, got %s", tc.expectedErr.Error(), err.Error()) | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		if priority != tc.expectedPriority { | ||||
| 			t.Errorf("want %q, got %q", tc.expectedPriority, priority) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										33
									
								
								vendor/github.com/prometheus/common/promlog/flag/flag.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								vendor/github.com/prometheus/common/promlog/flag/flag.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,33 @@ | ||||
| // Copyright 2017 The Prometheus Authors | ||||
| // Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| // you may not use this file except in compliance with the License. | ||||
| // You may obtain a copy of the License at | ||||
| // | ||||
| // http://www.apache.org/licenses/LICENSE-2.0 | ||||
| // | ||||
| // Unless required by applicable law or agreed to in writing, software | ||||
| // distributed under the License is distributed on an "AS IS" BASIS, | ||||
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
| // See the License for the specific language governing permissions and | ||||
| // limitations under the License. | ||||
|  | ||||
| package flag | ||||
|  | ||||
| import ( | ||||
| 	"github.com/prometheus/common/promlog" | ||||
| 	kingpin "gopkg.in/alecthomas/kingpin.v2" | ||||
| ) | ||||
|  | ||||
| // LevelFlagName is the canonical flag name to configure the allowed log level | ||||
| // within Prometheus projects. | ||||
| const LevelFlagName = "log.level" | ||||
|  | ||||
| // LevelFlagHelp is the help description for the log.level flag. | ||||
| const LevelFlagHelp = "Only log messages with the given severity or above. One of: [debug, info, warn, error]" | ||||
|  | ||||
| // AddFlags adds the flags used by this package to the Kingpin application. | ||||
| // To use the default Kingpin application, call AddFlags(kingpin.CommandLine) | ||||
| func AddFlags(a *kingpin.Application, logLevel *promlog.AllowedLevel) { | ||||
| 	a.Flag(LevelFlagName, LevelFlagHelp). | ||||
| 		Default("info").SetValue(logLevel) | ||||
| } | ||||
							
								
								
									
										63
									
								
								vendor/github.com/prometheus/common/promlog/log.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								vendor/github.com/prometheus/common/promlog/log.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,63 @@ | ||||
| // Copyright 2017 The Prometheus Authors | ||||
| // Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| // you may not use this file except in compliance with the License. | ||||
| // You may obtain a copy of the License at | ||||
| // | ||||
| // http://www.apache.org/licenses/LICENSE-2.0 | ||||
| // | ||||
| // Unless required by applicable law or agreed to in writing, software | ||||
| // distributed under the License is distributed on an "AS IS" BASIS, | ||||
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
| // See the License for the specific language governing permissions and | ||||
| // limitations under the License. | ||||
|  | ||||
| // Package promlog defines standardised ways to initialize Go kit loggers | ||||
| // across Prometheus components. | ||||
| // It should typically only ever be imported by main packages. | ||||
| package promlog | ||||
|  | ||||
| import ( | ||||
| 	"os" | ||||
|  | ||||
| 	"github.com/go-kit/kit/log" | ||||
| 	"github.com/go-kit/kit/log/level" | ||||
| 	"github.com/pkg/errors" | ||||
| ) | ||||
|  | ||||
| // AllowedLevel is a settable identifier for the minimum level a log entry | ||||
| // must be have. | ||||
| type AllowedLevel struct { | ||||
| 	s string | ||||
| 	o level.Option | ||||
| } | ||||
|  | ||||
| func (l *AllowedLevel) String() string { | ||||
| 	return l.s | ||||
| } | ||||
|  | ||||
| // Set updates the value of the allowed level. | ||||
| func (l *AllowedLevel) Set(s string) error { | ||||
| 	switch s { | ||||
| 	case "debug": | ||||
| 		l.o = level.AllowDebug() | ||||
| 	case "info": | ||||
| 		l.o = level.AllowInfo() | ||||
| 	case "warn": | ||||
| 		l.o = level.AllowWarn() | ||||
| 	case "error": | ||||
| 		l.o = level.AllowError() | ||||
| 	default: | ||||
| 		return errors.Errorf("unrecognized log level %q", s) | ||||
| 	} | ||||
| 	l.s = s | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // New returns a new leveled oklog logger in the logfmt format. Each logged line will be annotated | ||||
| // with a timestamp. The output always goes to stderr. | ||||
| func New(al AllowedLevel) log.Logger { | ||||
| 	l := log.NewLogfmtLogger(log.NewSyncWriter(os.Stderr)) | ||||
| 	l = level.NewFilter(l, al.o) | ||||
| 	l = log.With(l, "ts", log.DefaultTimestampUTC, "caller", log.DefaultCaller) | ||||
| 	return l | ||||
| } | ||||
							
								
								
									
										100
									
								
								vendor/github.com/prometheus/common/route/route.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										100
									
								
								vendor/github.com/prometheus/common/route/route.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,100 @@ | ||||
| package route | ||||
|  | ||||
| import ( | ||||
| 	"net/http" | ||||
|  | ||||
| 	"github.com/julienschmidt/httprouter" | ||||
| 	"golang.org/x/net/context" | ||||
| ) | ||||
|  | ||||
| type param string | ||||
|  | ||||
| // Param returns param p for the context. | ||||
| func Param(ctx context.Context, p string) string { | ||||
| 	return ctx.Value(param(p)).(string) | ||||
| } | ||||
|  | ||||
| // WithParam returns a new context with param p set to v. | ||||
| func WithParam(ctx context.Context, p, v string) context.Context { | ||||
| 	return context.WithValue(ctx, param(p), v) | ||||
| } | ||||
|  | ||||
| // Router wraps httprouter.Router and adds support for prefixed sub-routers | ||||
| // and per-request context injections. | ||||
| type Router struct { | ||||
| 	rtr    *httprouter.Router | ||||
| 	prefix string | ||||
| } | ||||
|  | ||||
| // New returns a new Router. | ||||
| func New() *Router { | ||||
| 	return &Router{ | ||||
| 		rtr: httprouter.New(), | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // WithPrefix returns a router that prefixes all registered routes with prefix. | ||||
| func (r *Router) WithPrefix(prefix string) *Router { | ||||
| 	return &Router{rtr: r.rtr, prefix: r.prefix + prefix} | ||||
| } | ||||
|  | ||||
| // handle turns a HandlerFunc into an httprouter.Handle. | ||||
| func (r *Router) handle(h http.HandlerFunc) httprouter.Handle { | ||||
| 	return func(w http.ResponseWriter, req *http.Request, params httprouter.Params) { | ||||
| 		ctx, cancel := context.WithCancel(req.Context()) | ||||
| 		defer cancel() | ||||
|  | ||||
| 		for _, p := range params { | ||||
| 			ctx = context.WithValue(ctx, param(p.Key), p.Value) | ||||
| 		} | ||||
| 		h(w, req.WithContext(ctx)) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // Get registers a new GET route. | ||||
| func (r *Router) Get(path string, h http.HandlerFunc) { | ||||
| 	r.rtr.GET(r.prefix+path, r.handle(h)) | ||||
| } | ||||
|  | ||||
| // Options registers a new OPTIONS route. | ||||
| func (r *Router) Options(path string, h http.HandlerFunc) { | ||||
| 	r.rtr.OPTIONS(r.prefix+path, r.handle(h)) | ||||
| } | ||||
|  | ||||
| // Del registers a new DELETE route. | ||||
| func (r *Router) Del(path string, h http.HandlerFunc) { | ||||
| 	r.rtr.DELETE(r.prefix+path, r.handle(h)) | ||||
| } | ||||
|  | ||||
| // Put registers a new PUT route. | ||||
| func (r *Router) Put(path string, h http.HandlerFunc) { | ||||
| 	r.rtr.PUT(r.prefix+path, r.handle(h)) | ||||
| } | ||||
|  | ||||
| // Post registers a new POST route. | ||||
| func (r *Router) Post(path string, h http.HandlerFunc) { | ||||
| 	r.rtr.POST(r.prefix+path, r.handle(h)) | ||||
| } | ||||
|  | ||||
| // Redirect takes an absolute path and sends an internal HTTP redirect for it, | ||||
| // prefixed by the router's path prefix. Note that this method does not include | ||||
| // functionality for handling relative paths or full URL redirects. | ||||
| func (r *Router) Redirect(w http.ResponseWriter, req *http.Request, path string, code int) { | ||||
| 	http.Redirect(w, req, r.prefix+path, code) | ||||
| } | ||||
|  | ||||
| // ServeHTTP implements http.Handler. | ||||
| func (r *Router) ServeHTTP(w http.ResponseWriter, req *http.Request) { | ||||
| 	r.rtr.ServeHTTP(w, req) | ||||
| } | ||||
|  | ||||
| // FileServe returns a new http.HandlerFunc that serves files from dir. | ||||
| // Using routes must provide the *filepath parameter. | ||||
| func FileServe(dir string) http.HandlerFunc { | ||||
| 	fs := http.FileServer(http.Dir(dir)) | ||||
|  | ||||
| 	return func(w http.ResponseWriter, r *http.Request) { | ||||
| 		r.URL.Path = Param(r.Context(), "filepath") | ||||
| 		fs.ServeHTTP(w, r) | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										44
									
								
								vendor/github.com/prometheus/common/route/route_test.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								vendor/github.com/prometheus/common/route/route_test.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,44 @@ | ||||
| package route | ||||
|  | ||||
| import ( | ||||
| 	"net/http" | ||||
| 	"net/http/httptest" | ||||
| 	"testing" | ||||
| ) | ||||
|  | ||||
| func TestRedirect(t *testing.T) { | ||||
| 	router := New().WithPrefix("/test/prefix") | ||||
| 	w := httptest.NewRecorder() | ||||
| 	r, err := http.NewRequest("GET", "http://localhost:9090/foo", nil) | ||||
| 	if err != nil { | ||||
| 		t.Fatalf("Error building test request: %s", err) | ||||
| 	} | ||||
|  | ||||
| 	router.Redirect(w, r, "/some/endpoint", http.StatusFound) | ||||
| 	if w.Code != http.StatusFound { | ||||
| 		t.Fatalf("Unexpected redirect status code: got %d, want %d", w.Code, http.StatusFound) | ||||
| 	} | ||||
|  | ||||
| 	want := "/test/prefix/some/endpoint" | ||||
| 	got := w.Header()["Location"][0] | ||||
| 	if want != got { | ||||
| 		t.Fatalf("Unexpected redirect location: got %s, want %s", got, want) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func TestContext(t *testing.T) { | ||||
| 	router := New() | ||||
| 	router.Get("/test/:foo/", func(w http.ResponseWriter, r *http.Request) { | ||||
| 		want := "bar" | ||||
| 		got := Param(r.Context(), "foo") | ||||
| 		if want != got { | ||||
| 			t.Fatalf("Unexpected context value: want %q, got %q", want, got) | ||||
| 		} | ||||
| 	}) | ||||
|  | ||||
| 	r, err := http.NewRequest("GET", "http://localhost:9090/test/bar/", nil) | ||||
| 	if err != nil { | ||||
| 		t.Fatalf("Error building test request: %s", err) | ||||
| 	} | ||||
| 	router.ServeHTTP(nil, r) | ||||
| } | ||||
							
								
								
									
										89
									
								
								vendor/github.com/prometheus/common/version/info.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								vendor/github.com/prometheus/common/version/info.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,89 @@ | ||||
| // Copyright 2016 The Prometheus Authors | ||||
| // Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| // you may not use this file except in compliance with the License. | ||||
| // You may obtain a copy of the License at | ||||
| // | ||||
| // http://www.apache.org/licenses/LICENSE-2.0 | ||||
| // | ||||
| // Unless required by applicable law or agreed to in writing, software | ||||
| // distributed under the License is distributed on an "AS IS" BASIS, | ||||
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
| // See the License for the specific language governing permissions and | ||||
| // limitations under the License. | ||||
|  | ||||
| package version | ||||
|  | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"fmt" | ||||
| 	"runtime" | ||||
| 	"strings" | ||||
| 	"text/template" | ||||
|  | ||||
| 	"github.com/prometheus/client_golang/prometheus" | ||||
| ) | ||||
|  | ||||
| // Build information. Populated at build-time. | ||||
| var ( | ||||
| 	Version   string | ||||
| 	Revision  string | ||||
| 	Branch    string | ||||
| 	BuildUser string | ||||
| 	BuildDate string | ||||
| 	GoVersion = runtime.Version() | ||||
| ) | ||||
|  | ||||
| // NewCollector returns a collector which exports metrics about current version information. | ||||
| func NewCollector(program string) *prometheus.GaugeVec { | ||||
| 	buildInfo := prometheus.NewGaugeVec( | ||||
| 		prometheus.GaugeOpts{ | ||||
| 			Namespace: program, | ||||
| 			Name:      "build_info", | ||||
| 			Help: fmt.Sprintf( | ||||
| 				"A metric with a constant '1' value labeled by version, revision, branch, and goversion from which %s was built.", | ||||
| 				program, | ||||
| 			), | ||||
| 		}, | ||||
| 		[]string{"version", "revision", "branch", "goversion"}, | ||||
| 	) | ||||
| 	buildInfo.WithLabelValues(Version, Revision, Branch, GoVersion).Set(1) | ||||
| 	return buildInfo | ||||
| } | ||||
|  | ||||
| // versionInfoTmpl contains the template used by Info. | ||||
| var versionInfoTmpl = ` | ||||
| {{.program}}, version {{.version}} (branch: {{.branch}}, revision: {{.revision}}) | ||||
|   build user:       {{.buildUser}} | ||||
|   build date:       {{.buildDate}} | ||||
|   go version:       {{.goVersion}} | ||||
| ` | ||||
|  | ||||
| // Print returns version information. | ||||
| func Print(program string) string { | ||||
| 	m := map[string]string{ | ||||
| 		"program":   program, | ||||
| 		"version":   Version, | ||||
| 		"revision":  Revision, | ||||
| 		"branch":    Branch, | ||||
| 		"buildUser": BuildUser, | ||||
| 		"buildDate": BuildDate, | ||||
| 		"goVersion": GoVersion, | ||||
| 	} | ||||
| 	t := template.Must(template.New("version").Parse(versionInfoTmpl)) | ||||
|  | ||||
| 	var buf bytes.Buffer | ||||
| 	if err := t.ExecuteTemplate(&buf, "version", m); err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
| 	return strings.TrimSpace(buf.String()) | ||||
| } | ||||
|  | ||||
| // Info returns version, branch and revision information. | ||||
| func Info() string { | ||||
| 	return fmt.Sprintf("(version=%s, branch=%s, revision=%s)", Version, Branch, Revision) | ||||
| } | ||||
|  | ||||
| // BuildContext returns goVersion, buildUser and buildDate information. | ||||
| func BuildContext() string { | ||||
| 	return fmt.Sprintf("(go=%s, user=%s, date=%s)", GoVersion, BuildUser, BuildDate) | ||||
| } | ||||
		Reference in New Issue
	
	Block a user