From dc9abf3f0497b76e8978741b7e359860c5a0631c Mon Sep 17 00:00:00 2001 From: Joshua Powers Date: Wed, 7 Sep 2022 13:08:21 -0600 Subject: [PATCH] fix(inputs.jolokia2): add optional origin header (#11692) --- plugins/inputs/jolokia2/common/client.go | 4 ++++ .../inputs/jolokia2/jolokia2_agent/README.md | 4 ++++ .../jolokia2/jolokia2_agent/jolokia2_agent.go | 9 +++++--- .../jolokia2/jolokia2_agent/sample.conf | 4 ++++ .../inputs/jolokia2/jolokia2_proxy/README.md | 4 ++++ .../jolokia2/jolokia2_proxy/jolokia_proxy.go | 22 ++++++++++--------- .../jolokia2/jolokia2_proxy/sample.conf | 4 ++++ 7 files changed, 38 insertions(+), 13 deletions(-) diff --git a/plugins/inputs/jolokia2/common/client.go b/plugins/inputs/jolokia2/common/client.go index 04624eb26..6f9872075 100644 --- a/plugins/inputs/jolokia2/common/client.go +++ b/plugins/inputs/jolokia2/common/client.go @@ -23,6 +23,7 @@ type ClientConfig struct { ResponseTimeout time.Duration Username string Password string + Origin string ProxyConfig *ProxyConfig tls.ClientConfig } @@ -137,6 +138,9 @@ func (c *Client) read(requests []ReadRequest) ([]ReadResponse, error) { } req.Header.Add("Content-type", "application/json") + if c.config.Origin != "" { + req.Header.Add("Origin", c.config.Origin) + } resp, err := c.client.Do(req) if err != nil { diff --git a/plugins/inputs/jolokia2/jolokia2_agent/README.md b/plugins/inputs/jolokia2/jolokia2_agent/README.md index 9e6ed3a1a..8f457db25 100644 --- a/plugins/inputs/jolokia2/jolokia2_agent/README.md +++ b/plugins/inputs/jolokia2/jolokia2_agent/README.md @@ -18,6 +18,10 @@ The `jolokia2_agent` input plugin reads JMX metrics from one or more # password = "" # response_timeout = "5s" + ## Optional origin URL to include as a header in the request. Some endpoints + ## may reject an empty origin. + # origin = "" + ## Optional TLS config # tls_ca = "/var/private/ca.pem" # tls_cert = "/var/private/client.pem" diff --git a/plugins/inputs/jolokia2/jolokia2_agent/jolokia2_agent.go b/plugins/inputs/jolokia2/jolokia2_agent/jolokia2_agent.go index 5613c0bd4..44f850fa3 100644 --- a/plugins/inputs/jolokia2/jolokia2_agent/jolokia2_agent.go +++ b/plugins/inputs/jolokia2/jolokia2_agent/jolokia2_agent.go @@ -15,6 +15,7 @@ import ( ) // DO NOT REMOVE THE NEXT TWO LINES! This is required to embed the sampleConfig data. +// //go:embed sample.conf var sampleConfig string @@ -23,9 +24,10 @@ type JolokiaAgent struct { DefaultFieldSeparator string DefaultTagPrefix string - URLs []string `toml:"urls"` - Username string - Password string + URLs []string `toml:"urls"` + Username string `toml:"username"` + Password string `toml:"password"` + Origin string `toml:"origin"` ResponseTimeout config.Duration `toml:"response_timeout"` tls.ClientConfig @@ -91,6 +93,7 @@ func (ja *JolokiaAgent) createClient(url string) (*common.Client, error) { return common.NewClient(url, &common.ClientConfig{ Username: ja.Username, Password: ja.Password, + Origin: ja.Origin, ResponseTimeout: time.Duration(ja.ResponseTimeout), ClientConfig: ja.ClientConfig, }) diff --git a/plugins/inputs/jolokia2/jolokia2_agent/sample.conf b/plugins/inputs/jolokia2/jolokia2_agent/sample.conf index 24f0e4636..d50089f0a 100644 --- a/plugins/inputs/jolokia2/jolokia2_agent/sample.conf +++ b/plugins/inputs/jolokia2/jolokia2_agent/sample.conf @@ -10,6 +10,10 @@ # password = "" # response_timeout = "5s" + ## Optional origin URL to include as a header in the request. Some endpoints + ## may reject an empty origin. + # origin = "" + ## Optional TLS config # tls_ca = "/var/private/ca.pem" # tls_cert = "/var/private/client.pem" diff --git a/plugins/inputs/jolokia2/jolokia2_proxy/README.md b/plugins/inputs/jolokia2/jolokia2_proxy/README.md index 01783d99f..fb8780676 100644 --- a/plugins/inputs/jolokia2/jolokia2_proxy/README.md +++ b/plugins/inputs/jolokia2/jolokia2_proxy/README.md @@ -19,6 +19,10 @@ REST endpoint. # password = "" # response_timeout = "5s" + ## Optional origin URL to include as a header in the request. Some endpoints + ## may reject an empty origin. + # origin = "" + ## Optional TLS config # tls_ca = "/var/private/ca.pem" # tls_cert = "/var/private/client.pem" diff --git a/plugins/inputs/jolokia2/jolokia2_proxy/jolokia_proxy.go b/plugins/inputs/jolokia2/jolokia2_proxy/jolokia_proxy.go index 33074c7b3..f2bf49fc9 100644 --- a/plugins/inputs/jolokia2/jolokia2_proxy/jolokia_proxy.go +++ b/plugins/inputs/jolokia2/jolokia2_proxy/jolokia_proxy.go @@ -12,21 +12,23 @@ import ( ) // DO NOT REMOVE THE NEXT TWO LINES! This is required to embed the sampleConfig data. +// //go:embed sample.conf var sampleConfig string type JolokiaProxy struct { - DefaultFieldPrefix string - DefaultFieldSeparator string - DefaultTagPrefix string + DefaultFieldPrefix string `toml:"default_field_prefix"` + DefaultFieldSeparator string `toml:"default_field_separator"` + DefaultTagPrefix string `toml:"default_tag_prefix"` - URL string `toml:"url"` - DefaultTargetPassword string - DefaultTargetUsername string + URL string `toml:"url"` + DefaultTargetPassword string `toml:"default_target_password"` + DefaultTargetUsername string `toml:"default_target_username"` Targets []JolokiaProxyTargetConfig `toml:"target"` - Username string - Password string + Username string `toml:"username"` + Password string `toml:"password"` + Origin string `toml:"origin"` ResponseTimeout config.Duration `toml:"response_timeout"` tls.ClientConfig @@ -37,8 +39,8 @@ type JolokiaProxy struct { type JolokiaProxyTargetConfig struct { URL string `toml:"url"` - Username string - Password string + Username string `toml:"username"` + Password string `toml:"password"` } func (*JolokiaProxy) SampleConfig() string { diff --git a/plugins/inputs/jolokia2/jolokia2_proxy/sample.conf b/plugins/inputs/jolokia2/jolokia2_proxy/sample.conf index d5b4e41b0..22e4e3a22 100644 --- a/plugins/inputs/jolokia2/jolokia2_proxy/sample.conf +++ b/plugins/inputs/jolokia2/jolokia2_proxy/sample.conf @@ -10,6 +10,10 @@ # password = "" # response_timeout = "5s" + ## Optional origin URL to include as a header in the request. Some endpoints + ## may reject an empty origin. + # origin = "" + ## Optional TLS config # tls_ca = "/var/private/ca.pem" # tls_cert = "/var/private/client.pem"