From 6ef270c7445f67bafd5ec3d203bf36b4e73a7fbb Mon Sep 17 00:00:00 2001 From: Ilya Mashchenko Date: Wed, 20 Nov 2024 16:28:06 +0200 Subject: [PATCH] feat(go.d/pkg/web): add "force_http2" option (#19047) --- .../modules/activemq/testdata/config.json | 3 +- .../modules/activemq/testdata/config.yaml | 1 + .../go.d/modules/apache/config_schema.json | 8 +- .../plugin/go.d/modules/apache/metadata.yaml | 4 + .../go.d/modules/apache/testdata/config.json | 3 +- .../go.d/modules/apache/testdata/config.yaml | 1 + .../go.d/modules/bind/testdata/config.json | 1 + .../go.d/modules/bind/testdata/config.yaml | 1 + .../modules/cassandra/testdata/config.json | 3 +- .../modules/cassandra/testdata/config.yaml | 1 + .../go.d/modules/ceph/testdata/config.json | 3 +- .../go.d/modules/ceph/testdata/config.yaml | 1 + .../modules/clickhouse/testdata/config.json | 3 +- .../modules/clickhouse/testdata/config.yaml | 1 + .../modules/cockroachdb/testdata/config.json | 3 +- .../modules/cockroachdb/testdata/config.yaml | 1 + .../go.d/modules/consul/testdata/config.json | 3 +- .../go.d/modules/consul/testdata/config.yaml | 1 + .../go.d/modules/coredns/testdata/config.json | 1 + .../go.d/modules/coredns/testdata/config.yaml | 1 + .../modules/couchbase/testdata/config.json | 3 +- .../modules/couchbase/testdata/config.yaml | 1 + .../go.d/modules/couchdb/testdata/config.json | 1 + .../go.d/modules/couchdb/testdata/config.yaml | 1 + .../go.d/modules/dnsdist/testdata/config.json | 3 +- .../go.d/modules/dnsdist/testdata/config.yaml | 1 + .../docker_engine/testdata/config.json | 3 +- .../docker_engine/testdata/config.yaml | 1 + .../modules/dockerhub/testdata/config.json | 1 + .../modules/dockerhub/testdata/config.yaml | 1 + .../elasticsearch/testdata/config.json | 1 + .../elasticsearch/testdata/config.yaml | 1 + .../go.d/modules/envoy/testdata/config.json | 3 +- .../go.d/modules/envoy/testdata/config.yaml | 1 + .../go.d/modules/fluentd/testdata/config.json | 1 + .../go.d/modules/fluentd/testdata/config.yaml | 1 + .../go.d/modules/geth/testdata/config.json | 3 +- .../go.d/modules/geth/testdata/config.yaml | 1 + .../go.d/modules/haproxy/testdata/config.json | 3 +- .../go.d/modules/haproxy/testdata/config.yaml | 1 + .../go.d/modules/hdfs/testdata/config.json | 3 +- .../go.d/modules/hdfs/testdata/config.yaml | 1 + .../modules/httpcheck/testdata/config.json | 1 + .../modules/httpcheck/testdata/config.yaml | 1 + .../go.d/modules/icecast/testdata/config.json | 3 +- .../go.d/modules/icecast/testdata/config.yaml | 1 + .../go.d/modules/ipfs/testdata/config.json | 1 + .../go.d/modules/ipfs/testdata/config.yaml | 1 + .../modules/k8s_kubelet/testdata/config.json | 1 + .../modules/k8s_kubelet/testdata/config.yaml | 1 + .../k8s_kubeproxy/testdata/config.json | 3 +- .../k8s_kubeproxy/testdata/config.yaml | 1 + .../modules/lighttpd/testdata/config.json | 3 +- .../modules/lighttpd/testdata/config.yaml | 1 + .../modules/logstash/testdata/config.json | 3 +- .../modules/logstash/testdata/config.yaml | 1 + .../modules/maxscale/testdata/config.json | 3 +- .../modules/maxscale/testdata/config.yaml | 1 + .../go.d/modules/monit/testdata/config.json | 3 +- .../go.d/modules/monit/testdata/config.yaml | 1 + .../go.d/modules/nginx/testdata/config.json | 3 +- .../go.d/modules/nginx/testdata/config.yaml | 1 + .../modules/nginxplus/testdata/config.json | 3 +- .../modules/nginxplus/testdata/config.yaml | 1 + .../modules/nginxunit/testdata/config.json | 3 +- .../modules/nginxunit/testdata/config.yaml | 1 + .../modules/nginxvts/testdata/config.json | 3 +- .../modules/nginxvts/testdata/config.yaml | 1 + .../modules/phpdaemon/testdata/config.json | 3 +- .../modules/phpdaemon/testdata/config.yaml | 1 + .../go.d/modules/phpfpm/testdata/config.json | 1 + .../go.d/modules/phpfpm/testdata/config.yaml | 1 + .../go.d/modules/pihole/testdata/config.json | 1 + .../go.d/modules/pihole/testdata/config.yaml | 1 + .../modules/powerdns/testdata/config.json | 3 +- .../modules/powerdns/testdata/config.yaml | 1 + .../powerdns_recursor/testdata/config.json | 3 +- .../powerdns_recursor/testdata/config.yaml | 1 + .../modules/prometheus/testdata/config.json | 1 + .../modules/prometheus/testdata/config.yaml | 1 + .../go.d/modules/pulsar/testdata/config.json | 1 + .../go.d/modules/pulsar/testdata/config.yaml | 1 + .../go.d/modules/puppet/testdata/config.json | 3 +- .../go.d/modules/puppet/testdata/config.yaml | 1 + .../modules/rabbitmq/testdata/config.json | 1 + .../modules/rabbitmq/testdata/config.yaml | 1 + .../go.d/modules/riakkv/testdata/config.json | 3 +- .../go.d/modules/riakkv/testdata/config.yaml | 1 + .../go.d/modules/rspamd/testdata/config.json | 3 +- .../go.d/modules/rspamd/testdata/config.yaml | 1 + .../go.d/modules/scaleio/testdata/config.json | 3 +- .../go.d/modules/scaleio/testdata/config.yaml | 1 + .../go.d/modules/squid/testdata/config.json | 3 +- .../go.d/modules/squid/testdata/config.yaml | 1 + .../modules/supervisord/testdata/config.json | 3 +- .../modules/supervisord/testdata/config.yaml | 1 + .../go.d/modules/tengine/testdata/config.json | 3 +- .../go.d/modules/tengine/testdata/config.yaml | 1 + .../go.d/modules/tomcat/testdata/config.json | 3 +- .../go.d/modules/tomcat/testdata/config.yaml | 1 + .../go.d/modules/traefik/testdata/config.json | 3 +- .../go.d/modules/traefik/testdata/config.yaml | 1 + .../modules/typesense/testdata/config.json | 3 +- .../modules/typesense/testdata/config.yaml | 1 + .../go.d/modules/vcsa/testdata/config.json | 3 +- .../go.d/modules/vcsa/testdata/config.yaml | 1 + .../go.d/modules/vernemq/testdata/config.json | 3 +- .../go.d/modules/vernemq/testdata/config.yaml | 1 + .../go.d/modules/vsphere/testdata/config.json | 1 + .../go.d/modules/vsphere/testdata/config.yaml | 1 + .../go.d/modules/windows/testdata/config.json | 3 +- .../go.d/modules/windows/testdata/config.yaml | 1 + src/go/plugin/go.d/pkg/web/client_config.go | 85 ++++++++++++++++--- 113 files changed, 236 insertions(+), 51 deletions(-) diff --git a/src/go/plugin/go.d/modules/activemq/testdata/config.json b/src/go/plugin/go.d/modules/activemq/testdata/config.json index 13327dd3fab2e4..8c22484838af84 100644 --- a/src/go/plugin/go.d/modules/activemq/testdata/config.json +++ b/src/go/plugin/go.d/modules/activemq/testdata/config.json @@ -21,5 +21,6 @@ "tls_ca": "ok", "tls_cert": "ok", "tls_key": "ok", - "tls_skip_verify": true + "tls_skip_verify": true, + "force_http2": true } diff --git a/src/go/plugin/go.d/modules/activemq/testdata/config.yaml b/src/go/plugin/go.d/modules/activemq/testdata/config.yaml index dbb4232e98ac0f..0d68150df55f59 100644 --- a/src/go/plugin/go.d/modules/activemq/testdata/config.yaml +++ b/src/go/plugin/go.d/modules/activemq/testdata/config.yaml @@ -20,3 +20,4 @@ tls_ca: "ok" tls_cert: "ok" tls_key: "ok" tls_skip_verify: yes +force_http2: yes diff --git a/src/go/plugin/go.d/modules/apache/config_schema.json b/src/go/plugin/go.d/modules/apache/config_schema.json index 4c68bbd578062c..92dcc4eeda1933 100644 --- a/src/go/plugin/go.d/modules/apache/config_schema.json +++ b/src/go/plugin/go.d/modules/apache/config_schema.json @@ -30,6 +30,11 @@ "description": "If set, the client will not follow HTTP redirects automatically.", "type": "boolean" }, + "force_http2": { + "title": "Force HTTP2", + "description": "If set, forces the use of HTTP/2 protocol for all requests, even over plain TCP (h2c).", + "type": "boolean" + }, "username": { "title": "Username", "description": "The username for basic authentication.", @@ -143,7 +148,8 @@ "update_every", "url", "timeout", - "not_follow_redirects" + "not_follow_redirects", + "force_http2" ] }, { diff --git a/src/go/plugin/go.d/modules/apache/metadata.yaml b/src/go/plugin/go.d/modules/apache/metadata.yaml index bfab73fcfe45a8..2623dd9ef02bdb 100644 --- a/src/go/plugin/go.d/modules/apache/metadata.yaml +++ b/src/go/plugin/go.d/modules/apache/metadata.yaml @@ -119,6 +119,10 @@ modules: description: Redirect handling policy. Controls whether the client follows redirects. default_value: no required: false + - name: force_http2 + description: Forces the use of HTTP/2 protocol for all requests, even over plain TCP (h2c). + default_value: no + required: false - name: tls_skip_verify description: Server certificate chain and hostname validation policy. Controls whether the client performs this check. default_value: no diff --git a/src/go/plugin/go.d/modules/apache/testdata/config.json b/src/go/plugin/go.d/modules/apache/testdata/config.json index 984c3ed6e7a880..adedab97fdc7df 100644 --- a/src/go/plugin/go.d/modules/apache/testdata/config.json +++ b/src/go/plugin/go.d/modules/apache/testdata/config.json @@ -16,5 +16,6 @@ "tls_ca": "ok", "tls_cert": "ok", "tls_key": "ok", - "tls_skip_verify": true + "tls_skip_verify": true, + "force_http2": true } diff --git a/src/go/plugin/go.d/modules/apache/testdata/config.yaml b/src/go/plugin/go.d/modules/apache/testdata/config.yaml index 8558b61cc05cf8..744c7c996d5a21 100644 --- a/src/go/plugin/go.d/modules/apache/testdata/config.yaml +++ b/src/go/plugin/go.d/modules/apache/testdata/config.yaml @@ -15,3 +15,4 @@ tls_ca: "ok" tls_cert: "ok" tls_key: "ok" tls_skip_verify: yes +force_http2: yes diff --git a/src/go/plugin/go.d/modules/bind/testdata/config.json b/src/go/plugin/go.d/modules/bind/testdata/config.json index 145df9ff4a40bd..e14f33913765d0 100644 --- a/src/go/plugin/go.d/modules/bind/testdata/config.json +++ b/src/go/plugin/go.d/modules/bind/testdata/config.json @@ -17,5 +17,6 @@ "tls_cert": "ok", "tls_key": "ok", "tls_skip_verify": true, + "force_http2": true, "permit_view": "ok" } diff --git a/src/go/plugin/go.d/modules/bind/testdata/config.yaml b/src/go/plugin/go.d/modules/bind/testdata/config.yaml index cc0a33b7470a47..e7f7aca429a317 100644 --- a/src/go/plugin/go.d/modules/bind/testdata/config.yaml +++ b/src/go/plugin/go.d/modules/bind/testdata/config.yaml @@ -15,4 +15,5 @@ tls_ca: "ok" tls_cert: "ok" tls_key: "ok" tls_skip_verify: yes +force_http2: yes permit_view: "ok" diff --git a/src/go/plugin/go.d/modules/cassandra/testdata/config.json b/src/go/plugin/go.d/modules/cassandra/testdata/config.json index 984c3ed6e7a880..adedab97fdc7df 100644 --- a/src/go/plugin/go.d/modules/cassandra/testdata/config.json +++ b/src/go/plugin/go.d/modules/cassandra/testdata/config.json @@ -16,5 +16,6 @@ "tls_ca": "ok", "tls_cert": "ok", "tls_key": "ok", - "tls_skip_verify": true + "tls_skip_verify": true, + "force_http2": true } diff --git a/src/go/plugin/go.d/modules/cassandra/testdata/config.yaml b/src/go/plugin/go.d/modules/cassandra/testdata/config.yaml index 8558b61cc05cf8..744c7c996d5a21 100644 --- a/src/go/plugin/go.d/modules/cassandra/testdata/config.yaml +++ b/src/go/plugin/go.d/modules/cassandra/testdata/config.yaml @@ -15,3 +15,4 @@ tls_ca: "ok" tls_cert: "ok" tls_key: "ok" tls_skip_verify: yes +force_http2: yes diff --git a/src/go/plugin/go.d/modules/ceph/testdata/config.json b/src/go/plugin/go.d/modules/ceph/testdata/config.json index 984c3ed6e7a880..adedab97fdc7df 100644 --- a/src/go/plugin/go.d/modules/ceph/testdata/config.json +++ b/src/go/plugin/go.d/modules/ceph/testdata/config.json @@ -16,5 +16,6 @@ "tls_ca": "ok", "tls_cert": "ok", "tls_key": "ok", - "tls_skip_verify": true + "tls_skip_verify": true, + "force_http2": true } diff --git a/src/go/plugin/go.d/modules/ceph/testdata/config.yaml b/src/go/plugin/go.d/modules/ceph/testdata/config.yaml index 8558b61cc05cf8..744c7c996d5a21 100644 --- a/src/go/plugin/go.d/modules/ceph/testdata/config.yaml +++ b/src/go/plugin/go.d/modules/ceph/testdata/config.yaml @@ -15,3 +15,4 @@ tls_ca: "ok" tls_cert: "ok" tls_key: "ok" tls_skip_verify: yes +force_http2: yes diff --git a/src/go/plugin/go.d/modules/clickhouse/testdata/config.json b/src/go/plugin/go.d/modules/clickhouse/testdata/config.json index 984c3ed6e7a880..adedab97fdc7df 100644 --- a/src/go/plugin/go.d/modules/clickhouse/testdata/config.json +++ b/src/go/plugin/go.d/modules/clickhouse/testdata/config.json @@ -16,5 +16,6 @@ "tls_ca": "ok", "tls_cert": "ok", "tls_key": "ok", - "tls_skip_verify": true + "tls_skip_verify": true, + "force_http2": true } diff --git a/src/go/plugin/go.d/modules/clickhouse/testdata/config.yaml b/src/go/plugin/go.d/modules/clickhouse/testdata/config.yaml index 8558b61cc05cf8..744c7c996d5a21 100644 --- a/src/go/plugin/go.d/modules/clickhouse/testdata/config.yaml +++ b/src/go/plugin/go.d/modules/clickhouse/testdata/config.yaml @@ -15,3 +15,4 @@ tls_ca: "ok" tls_cert: "ok" tls_key: "ok" tls_skip_verify: yes +force_http2: yes diff --git a/src/go/plugin/go.d/modules/cockroachdb/testdata/config.json b/src/go/plugin/go.d/modules/cockroachdb/testdata/config.json index 984c3ed6e7a880..adedab97fdc7df 100644 --- a/src/go/plugin/go.d/modules/cockroachdb/testdata/config.json +++ b/src/go/plugin/go.d/modules/cockroachdb/testdata/config.json @@ -16,5 +16,6 @@ "tls_ca": "ok", "tls_cert": "ok", "tls_key": "ok", - "tls_skip_verify": true + "tls_skip_verify": true, + "force_http2": true } diff --git a/src/go/plugin/go.d/modules/cockroachdb/testdata/config.yaml b/src/go/plugin/go.d/modules/cockroachdb/testdata/config.yaml index 8558b61cc05cf8..744c7c996d5a21 100644 --- a/src/go/plugin/go.d/modules/cockroachdb/testdata/config.yaml +++ b/src/go/plugin/go.d/modules/cockroachdb/testdata/config.yaml @@ -15,3 +15,4 @@ tls_ca: "ok" tls_cert: "ok" tls_key: "ok" tls_skip_verify: yes +force_http2: yes diff --git a/src/go/plugin/go.d/modules/consul/testdata/config.json b/src/go/plugin/go.d/modules/consul/testdata/config.json index bcd07a41b4e865..24908ca16d4f54 100644 --- a/src/go/plugin/go.d/modules/consul/testdata/config.json +++ b/src/go/plugin/go.d/modules/consul/testdata/config.json @@ -17,5 +17,6 @@ "tls_cert": "ok", "tls_key": "ok", "tls_skip_verify": true, - "acl_token": "ok" + "acl_token": "ok", + "force_http2": true } diff --git a/src/go/plugin/go.d/modules/consul/testdata/config.yaml b/src/go/plugin/go.d/modules/consul/testdata/config.yaml index def554c7e66a27..705904fa9ffc22 100644 --- a/src/go/plugin/go.d/modules/consul/testdata/config.yaml +++ b/src/go/plugin/go.d/modules/consul/testdata/config.yaml @@ -16,3 +16,4 @@ tls_cert: "ok" tls_key: "ok" tls_skip_verify: yes acl_token: "ok" +force_http2: yes diff --git a/src/go/plugin/go.d/modules/coredns/testdata/config.json b/src/go/plugin/go.d/modules/coredns/testdata/config.json index 2dc54a1a2be4d0..5b11abe281d251 100644 --- a/src/go/plugin/go.d/modules/coredns/testdata/config.json +++ b/src/go/plugin/go.d/modules/coredns/testdata/config.json @@ -17,6 +17,7 @@ "tls_cert": "ok", "tls_key": "ok", "tls_skip_verify": true, + "force_http2": true, "per_server_stats": { "includes": [ "ok" diff --git a/src/go/plugin/go.d/modules/coredns/testdata/config.yaml b/src/go/plugin/go.d/modules/coredns/testdata/config.yaml index be474167fd0fb5..5551696f17c8ec 100644 --- a/src/go/plugin/go.d/modules/coredns/testdata/config.yaml +++ b/src/go/plugin/go.d/modules/coredns/testdata/config.yaml @@ -15,6 +15,7 @@ tls_ca: "ok" tls_cert: "ok" tls_key: "ok" tls_skip_verify: yes +force_http2: yes per_server_stats: includes: - "ok" diff --git a/src/go/plugin/go.d/modules/couchbase/testdata/config.json b/src/go/plugin/go.d/modules/couchbase/testdata/config.json index 984c3ed6e7a880..adedab97fdc7df 100644 --- a/src/go/plugin/go.d/modules/couchbase/testdata/config.json +++ b/src/go/plugin/go.d/modules/couchbase/testdata/config.json @@ -16,5 +16,6 @@ "tls_ca": "ok", "tls_cert": "ok", "tls_key": "ok", - "tls_skip_verify": true + "tls_skip_verify": true, + "force_http2": true } diff --git a/src/go/plugin/go.d/modules/couchbase/testdata/config.yaml b/src/go/plugin/go.d/modules/couchbase/testdata/config.yaml index 8558b61cc05cf8..744c7c996d5a21 100644 --- a/src/go/plugin/go.d/modules/couchbase/testdata/config.yaml +++ b/src/go/plugin/go.d/modules/couchbase/testdata/config.yaml @@ -15,3 +15,4 @@ tls_ca: "ok" tls_cert: "ok" tls_key: "ok" tls_skip_verify: yes +force_http2: yes diff --git a/src/go/plugin/go.d/modules/couchdb/testdata/config.json b/src/go/plugin/go.d/modules/couchdb/testdata/config.json index 0fa716e5d4f38d..19cca35eff95bc 100644 --- a/src/go/plugin/go.d/modules/couchdb/testdata/config.json +++ b/src/go/plugin/go.d/modules/couchdb/testdata/config.json @@ -17,6 +17,7 @@ "tls_cert": "ok", "tls_key": "ok", "tls_skip_verify": true, + "force_http2": true, "node": "ok", "databases": "ok" } diff --git a/src/go/plugin/go.d/modules/couchdb/testdata/config.yaml b/src/go/plugin/go.d/modules/couchdb/testdata/config.yaml index 4968ed263b4bb5..22934dcd516cb0 100644 --- a/src/go/plugin/go.d/modules/couchdb/testdata/config.yaml +++ b/src/go/plugin/go.d/modules/couchdb/testdata/config.yaml @@ -15,5 +15,6 @@ tls_ca: "ok" tls_cert: "ok" tls_key: "ok" tls_skip_verify: yes +force_http2: yes node: "ok" databases: "ok" diff --git a/src/go/plugin/go.d/modules/dnsdist/testdata/config.json b/src/go/plugin/go.d/modules/dnsdist/testdata/config.json index 984c3ed6e7a880..adedab97fdc7df 100644 --- a/src/go/plugin/go.d/modules/dnsdist/testdata/config.json +++ b/src/go/plugin/go.d/modules/dnsdist/testdata/config.json @@ -16,5 +16,6 @@ "tls_ca": "ok", "tls_cert": "ok", "tls_key": "ok", - "tls_skip_verify": true + "tls_skip_verify": true, + "force_http2": true } diff --git a/src/go/plugin/go.d/modules/dnsdist/testdata/config.yaml b/src/go/plugin/go.d/modules/dnsdist/testdata/config.yaml index 8558b61cc05cf8..744c7c996d5a21 100644 --- a/src/go/plugin/go.d/modules/dnsdist/testdata/config.yaml +++ b/src/go/plugin/go.d/modules/dnsdist/testdata/config.yaml @@ -15,3 +15,4 @@ tls_ca: "ok" tls_cert: "ok" tls_key: "ok" tls_skip_verify: yes +force_http2: yes diff --git a/src/go/plugin/go.d/modules/docker_engine/testdata/config.json b/src/go/plugin/go.d/modules/docker_engine/testdata/config.json index 984c3ed6e7a880..adedab97fdc7df 100644 --- a/src/go/plugin/go.d/modules/docker_engine/testdata/config.json +++ b/src/go/plugin/go.d/modules/docker_engine/testdata/config.json @@ -16,5 +16,6 @@ "tls_ca": "ok", "tls_cert": "ok", "tls_key": "ok", - "tls_skip_verify": true + "tls_skip_verify": true, + "force_http2": true } diff --git a/src/go/plugin/go.d/modules/docker_engine/testdata/config.yaml b/src/go/plugin/go.d/modules/docker_engine/testdata/config.yaml index 8558b61cc05cf8..744c7c996d5a21 100644 --- a/src/go/plugin/go.d/modules/docker_engine/testdata/config.yaml +++ b/src/go/plugin/go.d/modules/docker_engine/testdata/config.yaml @@ -15,3 +15,4 @@ tls_ca: "ok" tls_cert: "ok" tls_key: "ok" tls_skip_verify: yes +force_http2: yes diff --git a/src/go/plugin/go.d/modules/dockerhub/testdata/config.json b/src/go/plugin/go.d/modules/dockerhub/testdata/config.json index 3496e747cc42c8..3cbb615c810bc3 100644 --- a/src/go/plugin/go.d/modules/dockerhub/testdata/config.json +++ b/src/go/plugin/go.d/modules/dockerhub/testdata/config.json @@ -17,6 +17,7 @@ "tls_cert": "ok", "tls_key": "ok", "tls_skip_verify": true, + "force_http2": true, "repositories": [ "ok" ] diff --git a/src/go/plugin/go.d/modules/dockerhub/testdata/config.yaml b/src/go/plugin/go.d/modules/dockerhub/testdata/config.yaml index 20c4ba61b43a8f..e25234c1475c80 100644 --- a/src/go/plugin/go.d/modules/dockerhub/testdata/config.yaml +++ b/src/go/plugin/go.d/modules/dockerhub/testdata/config.yaml @@ -15,5 +15,6 @@ tls_ca: "ok" tls_cert: "ok" tls_key: "ok" tls_skip_verify: yes +force_http2: yes repositories: - "ok" diff --git a/src/go/plugin/go.d/modules/elasticsearch/testdata/config.json b/src/go/plugin/go.d/modules/elasticsearch/testdata/config.json index a456d1d5619886..201ca27792b499 100644 --- a/src/go/plugin/go.d/modules/elasticsearch/testdata/config.json +++ b/src/go/plugin/go.d/modules/elasticsearch/testdata/config.json @@ -17,6 +17,7 @@ "tls_cert": "ok", "tls_key": "ok", "tls_skip_verify": true, + "force_http2": true, "cluster_mode": true, "collect_node_stats": true, "collect_cluster_health": true, diff --git a/src/go/plugin/go.d/modules/elasticsearch/testdata/config.yaml b/src/go/plugin/go.d/modules/elasticsearch/testdata/config.yaml index af1b4a1369b133..87476834c6716f 100644 --- a/src/go/plugin/go.d/modules/elasticsearch/testdata/config.yaml +++ b/src/go/plugin/go.d/modules/elasticsearch/testdata/config.yaml @@ -15,6 +15,7 @@ tls_ca: "ok" tls_cert: "ok" tls_key: "ok" tls_skip_verify: yes +force_http2: yes cluster_mode: yes collect_node_stats: yes collect_cluster_health: yes diff --git a/src/go/plugin/go.d/modules/envoy/testdata/config.json b/src/go/plugin/go.d/modules/envoy/testdata/config.json index 984c3ed6e7a880..adedab97fdc7df 100644 --- a/src/go/plugin/go.d/modules/envoy/testdata/config.json +++ b/src/go/plugin/go.d/modules/envoy/testdata/config.json @@ -16,5 +16,6 @@ "tls_ca": "ok", "tls_cert": "ok", "tls_key": "ok", - "tls_skip_verify": true + "tls_skip_verify": true, + "force_http2": true } diff --git a/src/go/plugin/go.d/modules/envoy/testdata/config.yaml b/src/go/plugin/go.d/modules/envoy/testdata/config.yaml index 8558b61cc05cf8..744c7c996d5a21 100644 --- a/src/go/plugin/go.d/modules/envoy/testdata/config.yaml +++ b/src/go/plugin/go.d/modules/envoy/testdata/config.yaml @@ -15,3 +15,4 @@ tls_ca: "ok" tls_cert: "ok" tls_key: "ok" tls_skip_verify: yes +force_http2: yes diff --git a/src/go/plugin/go.d/modules/fluentd/testdata/config.json b/src/go/plugin/go.d/modules/fluentd/testdata/config.json index 6477bd57d2cceb..cb7e83bfc329d5 100644 --- a/src/go/plugin/go.d/modules/fluentd/testdata/config.json +++ b/src/go/plugin/go.d/modules/fluentd/testdata/config.json @@ -17,5 +17,6 @@ "tls_cert": "ok", "tls_key": "ok", "tls_skip_verify": true, + "force_http2": true, "permit_plugin_id": "ok" } diff --git a/src/go/plugin/go.d/modules/fluentd/testdata/config.yaml b/src/go/plugin/go.d/modules/fluentd/testdata/config.yaml index 0afd42e6769842..c832c88dd50632 100644 --- a/src/go/plugin/go.d/modules/fluentd/testdata/config.yaml +++ b/src/go/plugin/go.d/modules/fluentd/testdata/config.yaml @@ -15,4 +15,5 @@ tls_ca: "ok" tls_cert: "ok" tls_key: "ok" tls_skip_verify: yes +force_http2: yes permit_plugin_id: "ok" diff --git a/src/go/plugin/go.d/modules/geth/testdata/config.json b/src/go/plugin/go.d/modules/geth/testdata/config.json index 984c3ed6e7a880..adedab97fdc7df 100644 --- a/src/go/plugin/go.d/modules/geth/testdata/config.json +++ b/src/go/plugin/go.d/modules/geth/testdata/config.json @@ -16,5 +16,6 @@ "tls_ca": "ok", "tls_cert": "ok", "tls_key": "ok", - "tls_skip_verify": true + "tls_skip_verify": true, + "force_http2": true } diff --git a/src/go/plugin/go.d/modules/geth/testdata/config.yaml b/src/go/plugin/go.d/modules/geth/testdata/config.yaml index 8558b61cc05cf8..744c7c996d5a21 100644 --- a/src/go/plugin/go.d/modules/geth/testdata/config.yaml +++ b/src/go/plugin/go.d/modules/geth/testdata/config.yaml @@ -15,3 +15,4 @@ tls_ca: "ok" tls_cert: "ok" tls_key: "ok" tls_skip_verify: yes +force_http2: yes diff --git a/src/go/plugin/go.d/modules/haproxy/testdata/config.json b/src/go/plugin/go.d/modules/haproxy/testdata/config.json index 984c3ed6e7a880..adedab97fdc7df 100644 --- a/src/go/plugin/go.d/modules/haproxy/testdata/config.json +++ b/src/go/plugin/go.d/modules/haproxy/testdata/config.json @@ -16,5 +16,6 @@ "tls_ca": "ok", "tls_cert": "ok", "tls_key": "ok", - "tls_skip_verify": true + "tls_skip_verify": true, + "force_http2": true } diff --git a/src/go/plugin/go.d/modules/haproxy/testdata/config.yaml b/src/go/plugin/go.d/modules/haproxy/testdata/config.yaml index 8558b61cc05cf8..744c7c996d5a21 100644 --- a/src/go/plugin/go.d/modules/haproxy/testdata/config.yaml +++ b/src/go/plugin/go.d/modules/haproxy/testdata/config.yaml @@ -15,3 +15,4 @@ tls_ca: "ok" tls_cert: "ok" tls_key: "ok" tls_skip_verify: yes +force_http2: yes diff --git a/src/go/plugin/go.d/modules/hdfs/testdata/config.json b/src/go/plugin/go.d/modules/hdfs/testdata/config.json index 984c3ed6e7a880..adedab97fdc7df 100644 --- a/src/go/plugin/go.d/modules/hdfs/testdata/config.json +++ b/src/go/plugin/go.d/modules/hdfs/testdata/config.json @@ -16,5 +16,6 @@ "tls_ca": "ok", "tls_cert": "ok", "tls_key": "ok", - "tls_skip_verify": true + "tls_skip_verify": true, + "force_http2": true } diff --git a/src/go/plugin/go.d/modules/hdfs/testdata/config.yaml b/src/go/plugin/go.d/modules/hdfs/testdata/config.yaml index 8558b61cc05cf8..744c7c996d5a21 100644 --- a/src/go/plugin/go.d/modules/hdfs/testdata/config.yaml +++ b/src/go/plugin/go.d/modules/hdfs/testdata/config.yaml @@ -15,3 +15,4 @@ tls_ca: "ok" tls_cert: "ok" tls_key: "ok" tls_skip_verify: yes +force_http2: yes diff --git a/src/go/plugin/go.d/modules/httpcheck/testdata/config.json b/src/go/plugin/go.d/modules/httpcheck/testdata/config.json index 649393cdda0dfe..9de1100be8a9b8 100644 --- a/src/go/plugin/go.d/modules/httpcheck/testdata/config.json +++ b/src/go/plugin/go.d/modules/httpcheck/testdata/config.json @@ -17,6 +17,7 @@ "tls_cert": "ok", "tls_key": "ok", "tls_skip_verify": true, + "force_http2": true, "status_accepted": [ 123 ], diff --git a/src/go/plugin/go.d/modules/httpcheck/testdata/config.yaml b/src/go/plugin/go.d/modules/httpcheck/testdata/config.yaml index 1a66590e6467c8..0af4237c2e3dd3 100644 --- a/src/go/plugin/go.d/modules/httpcheck/testdata/config.yaml +++ b/src/go/plugin/go.d/modules/httpcheck/testdata/config.yaml @@ -15,6 +15,7 @@ tls_ca: "ok" tls_cert: "ok" tls_key: "ok" tls_skip_verify: yes +force_http2: yes status_accepted: - 123 response_match: "ok" diff --git a/src/go/plugin/go.d/modules/icecast/testdata/config.json b/src/go/plugin/go.d/modules/icecast/testdata/config.json index 984c3ed6e7a880..adedab97fdc7df 100644 --- a/src/go/plugin/go.d/modules/icecast/testdata/config.json +++ b/src/go/plugin/go.d/modules/icecast/testdata/config.json @@ -16,5 +16,6 @@ "tls_ca": "ok", "tls_cert": "ok", "tls_key": "ok", - "tls_skip_verify": true + "tls_skip_verify": true, + "force_http2": true } diff --git a/src/go/plugin/go.d/modules/icecast/testdata/config.yaml b/src/go/plugin/go.d/modules/icecast/testdata/config.yaml index 8558b61cc05cf8..744c7c996d5a21 100644 --- a/src/go/plugin/go.d/modules/icecast/testdata/config.yaml +++ b/src/go/plugin/go.d/modules/icecast/testdata/config.yaml @@ -15,3 +15,4 @@ tls_ca: "ok" tls_cert: "ok" tls_key: "ok" tls_skip_verify: yes +force_http2: yes diff --git a/src/go/plugin/go.d/modules/ipfs/testdata/config.json b/src/go/plugin/go.d/modules/ipfs/testdata/config.json index b99928ca655e4c..83826f4933045c 100644 --- a/src/go/plugin/go.d/modules/ipfs/testdata/config.json +++ b/src/go/plugin/go.d/modules/ipfs/testdata/config.json @@ -17,6 +17,7 @@ "tls_cert": "ok", "tls_key": "ok", "tls_skip_verify": true, + "force_http2": true, "pinapi": false, "repoapi": false } diff --git a/src/go/plugin/go.d/modules/ipfs/testdata/config.yaml b/src/go/plugin/go.d/modules/ipfs/testdata/config.yaml index 271695e647cb76..8be0e7bb3a58b8 100644 --- a/src/go/plugin/go.d/modules/ipfs/testdata/config.yaml +++ b/src/go/plugin/go.d/modules/ipfs/testdata/config.yaml @@ -15,5 +15,6 @@ tls_ca: "ok" tls_cert: "ok" tls_key: "ok" tls_skip_verify: yes +force_http2: yes pinapi: no repoapi: no diff --git a/src/go/plugin/go.d/modules/k8s_kubelet/testdata/config.json b/src/go/plugin/go.d/modules/k8s_kubelet/testdata/config.json index d854839533036a..bc694dc57745f6 100644 --- a/src/go/plugin/go.d/modules/k8s_kubelet/testdata/config.json +++ b/src/go/plugin/go.d/modules/k8s_kubelet/testdata/config.json @@ -17,5 +17,6 @@ "tls_cert": "ok", "tls_key": "ok", "tls_skip_verify": true, + "force_http2": true, "token_path": "ok" } diff --git a/src/go/plugin/go.d/modules/k8s_kubelet/testdata/config.yaml b/src/go/plugin/go.d/modules/k8s_kubelet/testdata/config.yaml index 9e4f3fdc45c2ed..ae468ded892ac2 100644 --- a/src/go/plugin/go.d/modules/k8s_kubelet/testdata/config.yaml +++ b/src/go/plugin/go.d/modules/k8s_kubelet/testdata/config.yaml @@ -15,4 +15,5 @@ tls_ca: "ok" tls_cert: "ok" tls_key: "ok" tls_skip_verify: yes +force_http2: yes token_path: "ok" diff --git a/src/go/plugin/go.d/modules/k8s_kubeproxy/testdata/config.json b/src/go/plugin/go.d/modules/k8s_kubeproxy/testdata/config.json index 984c3ed6e7a880..adedab97fdc7df 100644 --- a/src/go/plugin/go.d/modules/k8s_kubeproxy/testdata/config.json +++ b/src/go/plugin/go.d/modules/k8s_kubeproxy/testdata/config.json @@ -16,5 +16,6 @@ "tls_ca": "ok", "tls_cert": "ok", "tls_key": "ok", - "tls_skip_verify": true + "tls_skip_verify": true, + "force_http2": true } diff --git a/src/go/plugin/go.d/modules/k8s_kubeproxy/testdata/config.yaml b/src/go/plugin/go.d/modules/k8s_kubeproxy/testdata/config.yaml index 8558b61cc05cf8..744c7c996d5a21 100644 --- a/src/go/plugin/go.d/modules/k8s_kubeproxy/testdata/config.yaml +++ b/src/go/plugin/go.d/modules/k8s_kubeproxy/testdata/config.yaml @@ -15,3 +15,4 @@ tls_ca: "ok" tls_cert: "ok" tls_key: "ok" tls_skip_verify: yes +force_http2: yes diff --git a/src/go/plugin/go.d/modules/lighttpd/testdata/config.json b/src/go/plugin/go.d/modules/lighttpd/testdata/config.json index 984c3ed6e7a880..adedab97fdc7df 100644 --- a/src/go/plugin/go.d/modules/lighttpd/testdata/config.json +++ b/src/go/plugin/go.d/modules/lighttpd/testdata/config.json @@ -16,5 +16,6 @@ "tls_ca": "ok", "tls_cert": "ok", "tls_key": "ok", - "tls_skip_verify": true + "tls_skip_verify": true, + "force_http2": true } diff --git a/src/go/plugin/go.d/modules/lighttpd/testdata/config.yaml b/src/go/plugin/go.d/modules/lighttpd/testdata/config.yaml index 8558b61cc05cf8..744c7c996d5a21 100644 --- a/src/go/plugin/go.d/modules/lighttpd/testdata/config.yaml +++ b/src/go/plugin/go.d/modules/lighttpd/testdata/config.yaml @@ -15,3 +15,4 @@ tls_ca: "ok" tls_cert: "ok" tls_key: "ok" tls_skip_verify: yes +force_http2: yes diff --git a/src/go/plugin/go.d/modules/logstash/testdata/config.json b/src/go/plugin/go.d/modules/logstash/testdata/config.json index 984c3ed6e7a880..adedab97fdc7df 100644 --- a/src/go/plugin/go.d/modules/logstash/testdata/config.json +++ b/src/go/plugin/go.d/modules/logstash/testdata/config.json @@ -16,5 +16,6 @@ "tls_ca": "ok", "tls_cert": "ok", "tls_key": "ok", - "tls_skip_verify": true + "tls_skip_verify": true, + "force_http2": true } diff --git a/src/go/plugin/go.d/modules/logstash/testdata/config.yaml b/src/go/plugin/go.d/modules/logstash/testdata/config.yaml index 8558b61cc05cf8..744c7c996d5a21 100644 --- a/src/go/plugin/go.d/modules/logstash/testdata/config.yaml +++ b/src/go/plugin/go.d/modules/logstash/testdata/config.yaml @@ -15,3 +15,4 @@ tls_ca: "ok" tls_cert: "ok" tls_key: "ok" tls_skip_verify: yes +force_http2: yes diff --git a/src/go/plugin/go.d/modules/maxscale/testdata/config.json b/src/go/plugin/go.d/modules/maxscale/testdata/config.json index 984c3ed6e7a880..adedab97fdc7df 100644 --- a/src/go/plugin/go.d/modules/maxscale/testdata/config.json +++ b/src/go/plugin/go.d/modules/maxscale/testdata/config.json @@ -16,5 +16,6 @@ "tls_ca": "ok", "tls_cert": "ok", "tls_key": "ok", - "tls_skip_verify": true + "tls_skip_verify": true, + "force_http2": true } diff --git a/src/go/plugin/go.d/modules/maxscale/testdata/config.yaml b/src/go/plugin/go.d/modules/maxscale/testdata/config.yaml index 8558b61cc05cf8..744c7c996d5a21 100644 --- a/src/go/plugin/go.d/modules/maxscale/testdata/config.yaml +++ b/src/go/plugin/go.d/modules/maxscale/testdata/config.yaml @@ -15,3 +15,4 @@ tls_ca: "ok" tls_cert: "ok" tls_key: "ok" tls_skip_verify: yes +force_http2: yes diff --git a/src/go/plugin/go.d/modules/monit/testdata/config.json b/src/go/plugin/go.d/modules/monit/testdata/config.json index 984c3ed6e7a880..adedab97fdc7df 100644 --- a/src/go/plugin/go.d/modules/monit/testdata/config.json +++ b/src/go/plugin/go.d/modules/monit/testdata/config.json @@ -16,5 +16,6 @@ "tls_ca": "ok", "tls_cert": "ok", "tls_key": "ok", - "tls_skip_verify": true + "tls_skip_verify": true, + "force_http2": true } diff --git a/src/go/plugin/go.d/modules/monit/testdata/config.yaml b/src/go/plugin/go.d/modules/monit/testdata/config.yaml index 8558b61cc05cf8..744c7c996d5a21 100644 --- a/src/go/plugin/go.d/modules/monit/testdata/config.yaml +++ b/src/go/plugin/go.d/modules/monit/testdata/config.yaml @@ -15,3 +15,4 @@ tls_ca: "ok" tls_cert: "ok" tls_key: "ok" tls_skip_verify: yes +force_http2: yes diff --git a/src/go/plugin/go.d/modules/nginx/testdata/config.json b/src/go/plugin/go.d/modules/nginx/testdata/config.json index 984c3ed6e7a880..adedab97fdc7df 100644 --- a/src/go/plugin/go.d/modules/nginx/testdata/config.json +++ b/src/go/plugin/go.d/modules/nginx/testdata/config.json @@ -16,5 +16,6 @@ "tls_ca": "ok", "tls_cert": "ok", "tls_key": "ok", - "tls_skip_verify": true + "tls_skip_verify": true, + "force_http2": true } diff --git a/src/go/plugin/go.d/modules/nginx/testdata/config.yaml b/src/go/plugin/go.d/modules/nginx/testdata/config.yaml index 8558b61cc05cf8..744c7c996d5a21 100644 --- a/src/go/plugin/go.d/modules/nginx/testdata/config.yaml +++ b/src/go/plugin/go.d/modules/nginx/testdata/config.yaml @@ -15,3 +15,4 @@ tls_ca: "ok" tls_cert: "ok" tls_key: "ok" tls_skip_verify: yes +force_http2: yes diff --git a/src/go/plugin/go.d/modules/nginxplus/testdata/config.json b/src/go/plugin/go.d/modules/nginxplus/testdata/config.json index 984c3ed6e7a880..adedab97fdc7df 100644 --- a/src/go/plugin/go.d/modules/nginxplus/testdata/config.json +++ b/src/go/plugin/go.d/modules/nginxplus/testdata/config.json @@ -16,5 +16,6 @@ "tls_ca": "ok", "tls_cert": "ok", "tls_key": "ok", - "tls_skip_verify": true + "tls_skip_verify": true, + "force_http2": true } diff --git a/src/go/plugin/go.d/modules/nginxplus/testdata/config.yaml b/src/go/plugin/go.d/modules/nginxplus/testdata/config.yaml index 8558b61cc05cf8..744c7c996d5a21 100644 --- a/src/go/plugin/go.d/modules/nginxplus/testdata/config.yaml +++ b/src/go/plugin/go.d/modules/nginxplus/testdata/config.yaml @@ -15,3 +15,4 @@ tls_ca: "ok" tls_cert: "ok" tls_key: "ok" tls_skip_verify: yes +force_http2: yes diff --git a/src/go/plugin/go.d/modules/nginxunit/testdata/config.json b/src/go/plugin/go.d/modules/nginxunit/testdata/config.json index 984c3ed6e7a880..adedab97fdc7df 100644 --- a/src/go/plugin/go.d/modules/nginxunit/testdata/config.json +++ b/src/go/plugin/go.d/modules/nginxunit/testdata/config.json @@ -16,5 +16,6 @@ "tls_ca": "ok", "tls_cert": "ok", "tls_key": "ok", - "tls_skip_verify": true + "tls_skip_verify": true, + "force_http2": true } diff --git a/src/go/plugin/go.d/modules/nginxunit/testdata/config.yaml b/src/go/plugin/go.d/modules/nginxunit/testdata/config.yaml index 8558b61cc05cf8..744c7c996d5a21 100644 --- a/src/go/plugin/go.d/modules/nginxunit/testdata/config.yaml +++ b/src/go/plugin/go.d/modules/nginxunit/testdata/config.yaml @@ -15,3 +15,4 @@ tls_ca: "ok" tls_cert: "ok" tls_key: "ok" tls_skip_verify: yes +force_http2: yes diff --git a/src/go/plugin/go.d/modules/nginxvts/testdata/config.json b/src/go/plugin/go.d/modules/nginxvts/testdata/config.json index 984c3ed6e7a880..adedab97fdc7df 100644 --- a/src/go/plugin/go.d/modules/nginxvts/testdata/config.json +++ b/src/go/plugin/go.d/modules/nginxvts/testdata/config.json @@ -16,5 +16,6 @@ "tls_ca": "ok", "tls_cert": "ok", "tls_key": "ok", - "tls_skip_verify": true + "tls_skip_verify": true, + "force_http2": true } diff --git a/src/go/plugin/go.d/modules/nginxvts/testdata/config.yaml b/src/go/plugin/go.d/modules/nginxvts/testdata/config.yaml index 8558b61cc05cf8..744c7c996d5a21 100644 --- a/src/go/plugin/go.d/modules/nginxvts/testdata/config.yaml +++ b/src/go/plugin/go.d/modules/nginxvts/testdata/config.yaml @@ -15,3 +15,4 @@ tls_ca: "ok" tls_cert: "ok" tls_key: "ok" tls_skip_verify: yes +force_http2: yes diff --git a/src/go/plugin/go.d/modules/phpdaemon/testdata/config.json b/src/go/plugin/go.d/modules/phpdaemon/testdata/config.json index 984c3ed6e7a880..adedab97fdc7df 100644 --- a/src/go/plugin/go.d/modules/phpdaemon/testdata/config.json +++ b/src/go/plugin/go.d/modules/phpdaemon/testdata/config.json @@ -16,5 +16,6 @@ "tls_ca": "ok", "tls_cert": "ok", "tls_key": "ok", - "tls_skip_verify": true + "tls_skip_verify": true, + "force_http2": true } diff --git a/src/go/plugin/go.d/modules/phpdaemon/testdata/config.yaml b/src/go/plugin/go.d/modules/phpdaemon/testdata/config.yaml index 8558b61cc05cf8..744c7c996d5a21 100644 --- a/src/go/plugin/go.d/modules/phpdaemon/testdata/config.yaml +++ b/src/go/plugin/go.d/modules/phpdaemon/testdata/config.yaml @@ -15,3 +15,4 @@ tls_ca: "ok" tls_cert: "ok" tls_key: "ok" tls_skip_verify: yes +force_http2: yes diff --git a/src/go/plugin/go.d/modules/phpfpm/testdata/config.json b/src/go/plugin/go.d/modules/phpfpm/testdata/config.json index 458343f7415aed..3a6e24bd5fe418 100644 --- a/src/go/plugin/go.d/modules/phpfpm/testdata/config.json +++ b/src/go/plugin/go.d/modules/phpfpm/testdata/config.json @@ -17,6 +17,7 @@ "tls_cert": "ok", "tls_key": "ok", "tls_skip_verify": true, + "force_http2": true, "socket": "ok", "address": "ok", "fcgi_path": "ok" diff --git a/src/go/plugin/go.d/modules/phpfpm/testdata/config.yaml b/src/go/plugin/go.d/modules/phpfpm/testdata/config.yaml index 6c7bea094bab4f..092d0f96d05c8d 100644 --- a/src/go/plugin/go.d/modules/phpfpm/testdata/config.yaml +++ b/src/go/plugin/go.d/modules/phpfpm/testdata/config.yaml @@ -15,6 +15,7 @@ tls_ca: "ok" tls_cert: "ok" tls_key: "ok" tls_skip_verify: yes +force_http2: yes socket: "ok" address: "ok" fcgi_path: "ok" diff --git a/src/go/plugin/go.d/modules/pihole/testdata/config.json b/src/go/plugin/go.d/modules/pihole/testdata/config.json index 2d82443b0642b6..5de773728f2136 100644 --- a/src/go/plugin/go.d/modules/pihole/testdata/config.json +++ b/src/go/plugin/go.d/modules/pihole/testdata/config.json @@ -17,5 +17,6 @@ "tls_cert": "ok", "tls_key": "ok", "tls_skip_verify": true, + "force_http2": true, "setup_vars_path": "ok" } diff --git a/src/go/plugin/go.d/modules/pihole/testdata/config.yaml b/src/go/plugin/go.d/modules/pihole/testdata/config.yaml index a9361246af839a..7122ad0931bcef 100644 --- a/src/go/plugin/go.d/modules/pihole/testdata/config.yaml +++ b/src/go/plugin/go.d/modules/pihole/testdata/config.yaml @@ -15,4 +15,5 @@ tls_ca: "ok" tls_cert: "ok" tls_key: "ok" tls_skip_verify: yes +force_http2: yes setup_vars_path: "ok" diff --git a/src/go/plugin/go.d/modules/powerdns/testdata/config.json b/src/go/plugin/go.d/modules/powerdns/testdata/config.json index 984c3ed6e7a880..adedab97fdc7df 100644 --- a/src/go/plugin/go.d/modules/powerdns/testdata/config.json +++ b/src/go/plugin/go.d/modules/powerdns/testdata/config.json @@ -16,5 +16,6 @@ "tls_ca": "ok", "tls_cert": "ok", "tls_key": "ok", - "tls_skip_verify": true + "tls_skip_verify": true, + "force_http2": true } diff --git a/src/go/plugin/go.d/modules/powerdns/testdata/config.yaml b/src/go/plugin/go.d/modules/powerdns/testdata/config.yaml index 8558b61cc05cf8..744c7c996d5a21 100644 --- a/src/go/plugin/go.d/modules/powerdns/testdata/config.yaml +++ b/src/go/plugin/go.d/modules/powerdns/testdata/config.yaml @@ -15,3 +15,4 @@ tls_ca: "ok" tls_cert: "ok" tls_key: "ok" tls_skip_verify: yes +force_http2: yes diff --git a/src/go/plugin/go.d/modules/powerdns_recursor/testdata/config.json b/src/go/plugin/go.d/modules/powerdns_recursor/testdata/config.json index 984c3ed6e7a880..adedab97fdc7df 100644 --- a/src/go/plugin/go.d/modules/powerdns_recursor/testdata/config.json +++ b/src/go/plugin/go.d/modules/powerdns_recursor/testdata/config.json @@ -16,5 +16,6 @@ "tls_ca": "ok", "tls_cert": "ok", "tls_key": "ok", - "tls_skip_verify": true + "tls_skip_verify": true, + "force_http2": true } diff --git a/src/go/plugin/go.d/modules/powerdns_recursor/testdata/config.yaml b/src/go/plugin/go.d/modules/powerdns_recursor/testdata/config.yaml index 8558b61cc05cf8..744c7c996d5a21 100644 --- a/src/go/plugin/go.d/modules/powerdns_recursor/testdata/config.yaml +++ b/src/go/plugin/go.d/modules/powerdns_recursor/testdata/config.yaml @@ -15,3 +15,4 @@ tls_ca: "ok" tls_cert: "ok" tls_key: "ok" tls_skip_verify: yes +force_http2: yes diff --git a/src/go/plugin/go.d/modules/prometheus/testdata/config.json b/src/go/plugin/go.d/modules/prometheus/testdata/config.json index 75d7e9ba3cd38c..fa3d543d137493 100644 --- a/src/go/plugin/go.d/modules/prometheus/testdata/config.json +++ b/src/go/plugin/go.d/modules/prometheus/testdata/config.json @@ -17,6 +17,7 @@ "tls_cert": "ok", "tls_key": "ok", "tls_skip_verify": true, + "force_http2": true, "name": "ok", "app": "ok", "label_prefix": "ok", diff --git a/src/go/plugin/go.d/modules/prometheus/testdata/config.yaml b/src/go/plugin/go.d/modules/prometheus/testdata/config.yaml index d7ab417ecdde8e..f00094bd988b7d 100644 --- a/src/go/plugin/go.d/modules/prometheus/testdata/config.yaml +++ b/src/go/plugin/go.d/modules/prometheus/testdata/config.yaml @@ -15,6 +15,7 @@ tls_ca: "ok" tls_cert: "ok" tls_key: "ok" tls_skip_verify: yes +force_http2: yes name: "ok" app: "ok" label_prefix: "ok" diff --git a/src/go/plugin/go.d/modules/pulsar/testdata/config.json b/src/go/plugin/go.d/modules/pulsar/testdata/config.json index ab4f38fe0826c2..42a77ceac41404 100644 --- a/src/go/plugin/go.d/modules/pulsar/testdata/config.json +++ b/src/go/plugin/go.d/modules/pulsar/testdata/config.json @@ -17,6 +17,7 @@ "tls_cert": "ok", "tls_key": "ok", "tls_skip_verify": true, + "force_http2": true, "topic_filter": { "includes": [ "ok" diff --git a/src/go/plugin/go.d/modules/pulsar/testdata/config.yaml b/src/go/plugin/go.d/modules/pulsar/testdata/config.yaml index f2645d9e9f4007..e7a631527054e4 100644 --- a/src/go/plugin/go.d/modules/pulsar/testdata/config.yaml +++ b/src/go/plugin/go.d/modules/pulsar/testdata/config.yaml @@ -15,6 +15,7 @@ tls_ca: "ok" tls_cert: "ok" tls_key: "ok" tls_skip_verify: yes +force_http2: yes topic_filter: includes: - "ok" diff --git a/src/go/plugin/go.d/modules/puppet/testdata/config.json b/src/go/plugin/go.d/modules/puppet/testdata/config.json index 984c3ed6e7a880..adedab97fdc7df 100644 --- a/src/go/plugin/go.d/modules/puppet/testdata/config.json +++ b/src/go/plugin/go.d/modules/puppet/testdata/config.json @@ -16,5 +16,6 @@ "tls_ca": "ok", "tls_cert": "ok", "tls_key": "ok", - "tls_skip_verify": true + "tls_skip_verify": true, + "force_http2": true } diff --git a/src/go/plugin/go.d/modules/puppet/testdata/config.yaml b/src/go/plugin/go.d/modules/puppet/testdata/config.yaml index 8558b61cc05cf8..744c7c996d5a21 100644 --- a/src/go/plugin/go.d/modules/puppet/testdata/config.yaml +++ b/src/go/plugin/go.d/modules/puppet/testdata/config.yaml @@ -15,3 +15,4 @@ tls_ca: "ok" tls_cert: "ok" tls_key: "ok" tls_skip_verify: yes +force_http2: yes diff --git a/src/go/plugin/go.d/modules/rabbitmq/testdata/config.json b/src/go/plugin/go.d/modules/rabbitmq/testdata/config.json index b3f637f06ab17c..a8159f1fef33df 100644 --- a/src/go/plugin/go.d/modules/rabbitmq/testdata/config.json +++ b/src/go/plugin/go.d/modules/rabbitmq/testdata/config.json @@ -17,5 +17,6 @@ "tls_cert": "ok", "tls_key": "ok", "tls_skip_verify": true, + "force_http2": true, "collect_queues_metrics": true } diff --git a/src/go/plugin/go.d/modules/rabbitmq/testdata/config.yaml b/src/go/plugin/go.d/modules/rabbitmq/testdata/config.yaml index 12bb79bece0570..3c62ad30a125bc 100644 --- a/src/go/plugin/go.d/modules/rabbitmq/testdata/config.yaml +++ b/src/go/plugin/go.d/modules/rabbitmq/testdata/config.yaml @@ -15,4 +15,5 @@ tls_ca: "ok" tls_cert: "ok" tls_key: "ok" tls_skip_verify: yes +force_http2: yes collect_queues_metrics: yes diff --git a/src/go/plugin/go.d/modules/riakkv/testdata/config.json b/src/go/plugin/go.d/modules/riakkv/testdata/config.json index 984c3ed6e7a880..adedab97fdc7df 100644 --- a/src/go/plugin/go.d/modules/riakkv/testdata/config.json +++ b/src/go/plugin/go.d/modules/riakkv/testdata/config.json @@ -16,5 +16,6 @@ "tls_ca": "ok", "tls_cert": "ok", "tls_key": "ok", - "tls_skip_verify": true + "tls_skip_verify": true, + "force_http2": true } diff --git a/src/go/plugin/go.d/modules/riakkv/testdata/config.yaml b/src/go/plugin/go.d/modules/riakkv/testdata/config.yaml index 8558b61cc05cf8..744c7c996d5a21 100644 --- a/src/go/plugin/go.d/modules/riakkv/testdata/config.yaml +++ b/src/go/plugin/go.d/modules/riakkv/testdata/config.yaml @@ -15,3 +15,4 @@ tls_ca: "ok" tls_cert: "ok" tls_key: "ok" tls_skip_verify: yes +force_http2: yes diff --git a/src/go/plugin/go.d/modules/rspamd/testdata/config.json b/src/go/plugin/go.d/modules/rspamd/testdata/config.json index 984c3ed6e7a880..adedab97fdc7df 100644 --- a/src/go/plugin/go.d/modules/rspamd/testdata/config.json +++ b/src/go/plugin/go.d/modules/rspamd/testdata/config.json @@ -16,5 +16,6 @@ "tls_ca": "ok", "tls_cert": "ok", "tls_key": "ok", - "tls_skip_verify": true + "tls_skip_verify": true, + "force_http2": true } diff --git a/src/go/plugin/go.d/modules/rspamd/testdata/config.yaml b/src/go/plugin/go.d/modules/rspamd/testdata/config.yaml index 8558b61cc05cf8..744c7c996d5a21 100644 --- a/src/go/plugin/go.d/modules/rspamd/testdata/config.yaml +++ b/src/go/plugin/go.d/modules/rspamd/testdata/config.yaml @@ -15,3 +15,4 @@ tls_ca: "ok" tls_cert: "ok" tls_key: "ok" tls_skip_verify: yes +force_http2: yes diff --git a/src/go/plugin/go.d/modules/scaleio/testdata/config.json b/src/go/plugin/go.d/modules/scaleio/testdata/config.json index 984c3ed6e7a880..adedab97fdc7df 100644 --- a/src/go/plugin/go.d/modules/scaleio/testdata/config.json +++ b/src/go/plugin/go.d/modules/scaleio/testdata/config.json @@ -16,5 +16,6 @@ "tls_ca": "ok", "tls_cert": "ok", "tls_key": "ok", - "tls_skip_verify": true + "tls_skip_verify": true, + "force_http2": true } diff --git a/src/go/plugin/go.d/modules/scaleio/testdata/config.yaml b/src/go/plugin/go.d/modules/scaleio/testdata/config.yaml index 8558b61cc05cf8..744c7c996d5a21 100644 --- a/src/go/plugin/go.d/modules/scaleio/testdata/config.yaml +++ b/src/go/plugin/go.d/modules/scaleio/testdata/config.yaml @@ -15,3 +15,4 @@ tls_ca: "ok" tls_cert: "ok" tls_key: "ok" tls_skip_verify: yes +force_http2: yes diff --git a/src/go/plugin/go.d/modules/squid/testdata/config.json b/src/go/plugin/go.d/modules/squid/testdata/config.json index 984c3ed6e7a880..adedab97fdc7df 100644 --- a/src/go/plugin/go.d/modules/squid/testdata/config.json +++ b/src/go/plugin/go.d/modules/squid/testdata/config.json @@ -16,5 +16,6 @@ "tls_ca": "ok", "tls_cert": "ok", "tls_key": "ok", - "tls_skip_verify": true + "tls_skip_verify": true, + "force_http2": true } diff --git a/src/go/plugin/go.d/modules/squid/testdata/config.yaml b/src/go/plugin/go.d/modules/squid/testdata/config.yaml index 8558b61cc05cf8..744c7c996d5a21 100644 --- a/src/go/plugin/go.d/modules/squid/testdata/config.yaml +++ b/src/go/plugin/go.d/modules/squid/testdata/config.yaml @@ -15,3 +15,4 @@ tls_ca: "ok" tls_cert: "ok" tls_key: "ok" tls_skip_verify: yes +force_http2: yes diff --git a/src/go/plugin/go.d/modules/supervisord/testdata/config.json b/src/go/plugin/go.d/modules/supervisord/testdata/config.json index 825b0c394d96d8..15c4216b4b0245 100644 --- a/src/go/plugin/go.d/modules/supervisord/testdata/config.json +++ b/src/go/plugin/go.d/modules/supervisord/testdata/config.json @@ -7,5 +7,6 @@ "tls_ca": "ok", "tls_cert": "ok", "tls_key": "ok", - "tls_skip_verify": true + "tls_skip_verify": true, + "force_http2": true } diff --git a/src/go/plugin/go.d/modules/supervisord/testdata/config.yaml b/src/go/plugin/go.d/modules/supervisord/testdata/config.yaml index e1a01abd7146bf..022c36e72ac723 100644 --- a/src/go/plugin/go.d/modules/supervisord/testdata/config.yaml +++ b/src/go/plugin/go.d/modules/supervisord/testdata/config.yaml @@ -7,3 +7,4 @@ tls_ca: "ok" tls_cert: "ok" tls_key: "ok" tls_skip_verify: yes +force_http2: yes diff --git a/src/go/plugin/go.d/modules/tengine/testdata/config.json b/src/go/plugin/go.d/modules/tengine/testdata/config.json index 984c3ed6e7a880..adedab97fdc7df 100644 --- a/src/go/plugin/go.d/modules/tengine/testdata/config.json +++ b/src/go/plugin/go.d/modules/tengine/testdata/config.json @@ -16,5 +16,6 @@ "tls_ca": "ok", "tls_cert": "ok", "tls_key": "ok", - "tls_skip_verify": true + "tls_skip_verify": true, + "force_http2": true } diff --git a/src/go/plugin/go.d/modules/tengine/testdata/config.yaml b/src/go/plugin/go.d/modules/tengine/testdata/config.yaml index 8558b61cc05cf8..744c7c996d5a21 100644 --- a/src/go/plugin/go.d/modules/tengine/testdata/config.yaml +++ b/src/go/plugin/go.d/modules/tengine/testdata/config.yaml @@ -15,3 +15,4 @@ tls_ca: "ok" tls_cert: "ok" tls_key: "ok" tls_skip_verify: yes +force_http2: yes diff --git a/src/go/plugin/go.d/modules/tomcat/testdata/config.json b/src/go/plugin/go.d/modules/tomcat/testdata/config.json index 984c3ed6e7a880..adedab97fdc7df 100644 --- a/src/go/plugin/go.d/modules/tomcat/testdata/config.json +++ b/src/go/plugin/go.d/modules/tomcat/testdata/config.json @@ -16,5 +16,6 @@ "tls_ca": "ok", "tls_cert": "ok", "tls_key": "ok", - "tls_skip_verify": true + "tls_skip_verify": true, + "force_http2": true } diff --git a/src/go/plugin/go.d/modules/tomcat/testdata/config.yaml b/src/go/plugin/go.d/modules/tomcat/testdata/config.yaml index 8558b61cc05cf8..744c7c996d5a21 100644 --- a/src/go/plugin/go.d/modules/tomcat/testdata/config.yaml +++ b/src/go/plugin/go.d/modules/tomcat/testdata/config.yaml @@ -15,3 +15,4 @@ tls_ca: "ok" tls_cert: "ok" tls_key: "ok" tls_skip_verify: yes +force_http2: yes diff --git a/src/go/plugin/go.d/modules/traefik/testdata/config.json b/src/go/plugin/go.d/modules/traefik/testdata/config.json index 984c3ed6e7a880..adedab97fdc7df 100644 --- a/src/go/plugin/go.d/modules/traefik/testdata/config.json +++ b/src/go/plugin/go.d/modules/traefik/testdata/config.json @@ -16,5 +16,6 @@ "tls_ca": "ok", "tls_cert": "ok", "tls_key": "ok", - "tls_skip_verify": true + "tls_skip_verify": true, + "force_http2": true } diff --git a/src/go/plugin/go.d/modules/traefik/testdata/config.yaml b/src/go/plugin/go.d/modules/traefik/testdata/config.yaml index 8558b61cc05cf8..744c7c996d5a21 100644 --- a/src/go/plugin/go.d/modules/traefik/testdata/config.yaml +++ b/src/go/plugin/go.d/modules/traefik/testdata/config.yaml @@ -15,3 +15,4 @@ tls_ca: "ok" tls_cert: "ok" tls_key: "ok" tls_skip_verify: yes +force_http2: yes diff --git a/src/go/plugin/go.d/modules/typesense/testdata/config.json b/src/go/plugin/go.d/modules/typesense/testdata/config.json index 628fa6317c7d72..6c8695d384b0a8 100644 --- a/src/go/plugin/go.d/modules/typesense/testdata/config.json +++ b/src/go/plugin/go.d/modules/typesense/testdata/config.json @@ -17,5 +17,6 @@ "tls_ca": "ok", "tls_cert": "ok", "tls_key": "ok", - "tls_skip_verify": true + "tls_skip_verify": true, + "force_http2": true } diff --git a/src/go/plugin/go.d/modules/typesense/testdata/config.yaml b/src/go/plugin/go.d/modules/typesense/testdata/config.yaml index 7274c3ab066f28..ddabb8696ea6b8 100644 --- a/src/go/plugin/go.d/modules/typesense/testdata/config.yaml +++ b/src/go/plugin/go.d/modules/typesense/testdata/config.yaml @@ -16,3 +16,4 @@ tls_ca: "ok" tls_cert: "ok" tls_key: "ok" tls_skip_verify: yes +force_http2: yes diff --git a/src/go/plugin/go.d/modules/vcsa/testdata/config.json b/src/go/plugin/go.d/modules/vcsa/testdata/config.json index 984c3ed6e7a880..adedab97fdc7df 100644 --- a/src/go/plugin/go.d/modules/vcsa/testdata/config.json +++ b/src/go/plugin/go.d/modules/vcsa/testdata/config.json @@ -16,5 +16,6 @@ "tls_ca": "ok", "tls_cert": "ok", "tls_key": "ok", - "tls_skip_verify": true + "tls_skip_verify": true, + "force_http2": true } diff --git a/src/go/plugin/go.d/modules/vcsa/testdata/config.yaml b/src/go/plugin/go.d/modules/vcsa/testdata/config.yaml index 8558b61cc05cf8..744c7c996d5a21 100644 --- a/src/go/plugin/go.d/modules/vcsa/testdata/config.yaml +++ b/src/go/plugin/go.d/modules/vcsa/testdata/config.yaml @@ -15,3 +15,4 @@ tls_ca: "ok" tls_cert: "ok" tls_key: "ok" tls_skip_verify: yes +force_http2: yes diff --git a/src/go/plugin/go.d/modules/vernemq/testdata/config.json b/src/go/plugin/go.d/modules/vernemq/testdata/config.json index 984c3ed6e7a880..adedab97fdc7df 100644 --- a/src/go/plugin/go.d/modules/vernemq/testdata/config.json +++ b/src/go/plugin/go.d/modules/vernemq/testdata/config.json @@ -16,5 +16,6 @@ "tls_ca": "ok", "tls_cert": "ok", "tls_key": "ok", - "tls_skip_verify": true + "tls_skip_verify": true, + "force_http2": true } diff --git a/src/go/plugin/go.d/modules/vernemq/testdata/config.yaml b/src/go/plugin/go.d/modules/vernemq/testdata/config.yaml index 8558b61cc05cf8..744c7c996d5a21 100644 --- a/src/go/plugin/go.d/modules/vernemq/testdata/config.yaml +++ b/src/go/plugin/go.d/modules/vernemq/testdata/config.yaml @@ -15,3 +15,4 @@ tls_ca: "ok" tls_cert: "ok" tls_key: "ok" tls_skip_verify: yes +force_http2: yes diff --git a/src/go/plugin/go.d/modules/vsphere/testdata/config.json b/src/go/plugin/go.d/modules/vsphere/testdata/config.json index 3e4a7739640c7f..f40ac5d0460d2f 100644 --- a/src/go/plugin/go.d/modules/vsphere/testdata/config.json +++ b/src/go/plugin/go.d/modules/vsphere/testdata/config.json @@ -17,6 +17,7 @@ "tls_cert": "ok", "tls_key": "ok", "tls_skip_verify": true, + "force_http2": true, "discovery_interval": 123.123, "host_include": [ "ok" diff --git a/src/go/plugin/go.d/modules/vsphere/testdata/config.yaml b/src/go/plugin/go.d/modules/vsphere/testdata/config.yaml index d15e2346fd6c23..8c86028c568c6d 100644 --- a/src/go/plugin/go.d/modules/vsphere/testdata/config.yaml +++ b/src/go/plugin/go.d/modules/vsphere/testdata/config.yaml @@ -15,6 +15,7 @@ tls_ca: "ok" tls_cert: "ok" tls_key: "ok" tls_skip_verify: yes +force_http2: yes discovery_interval: 123.123 host_include: - "ok" diff --git a/src/go/plugin/go.d/modules/windows/testdata/config.json b/src/go/plugin/go.d/modules/windows/testdata/config.json index 6f8c1084e16265..d0080c440aaae1 100644 --- a/src/go/plugin/go.d/modules/windows/testdata/config.json +++ b/src/go/plugin/go.d/modules/windows/testdata/config.json @@ -17,5 +17,6 @@ "tls_ca": "ok", "tls_cert": "ok", "tls_key": "ok", - "tls_skip_verify": true + "tls_skip_verify": true, + "force_http2": true } diff --git a/src/go/plugin/go.d/modules/windows/testdata/config.yaml b/src/go/plugin/go.d/modules/windows/testdata/config.yaml index 4bbb7474d0227c..2b67fbf480635e 100644 --- a/src/go/plugin/go.d/modules/windows/testdata/config.yaml +++ b/src/go/plugin/go.d/modules/windows/testdata/config.yaml @@ -16,3 +16,4 @@ tls_ca: "ok" tls_cert: "ok" tls_key: "ok" tls_skip_verify: yes +force_http2: yes diff --git a/src/go/plugin/go.d/pkg/web/client_config.go b/src/go/plugin/go.d/pkg/web/client_config.go index 0ab3a045a1d2de..bf010c9810483b 100644 --- a/src/go/plugin/go.d/pkg/web/client_config.go +++ b/src/go/plugin/go.d/pkg/web/client_config.go @@ -3,12 +3,16 @@ package web import ( + "context" + "crypto/tls" "errors" "fmt" "net" "net/http" "net/url" + "golang.org/x/net/http2" + "github.com/netdata/netdata/go/plugins/plugin/go.d/pkg/confopt" "github.com/netdata/netdata/go/plugins/plugin/go.d/pkg/tlscfg" ) @@ -34,10 +38,34 @@ type ClientConfig struct { // TLSConfig specifies the TLS configuration. tlscfg.TLSConfig `yaml:",inline" json:""` + + ForceHTTP2 bool `yaml:"force_http2,omitempty" json:"force_http2"` } // NewHTTPClient returns a new *http.Client given a ClientConfig configuration and an error if any. func NewHTTPClient(cfg ClientConfig) (*http.Client, error) { + var transport http.RoundTripper + var err error + + if cfg.ForceHTTP2 { + transport, err = newHTTP2Transport(cfg) + } else { + transport, err = newHTTPTransport(cfg) + } + if err != nil { + return nil, err + } + + client := &http.Client{ + Timeout: cfg.Timeout.Duration(), + Transport: transport, + CheckRedirect: redirectFunc(cfg.NotFollowRedirect), + } + + return client, nil +} + +func newHTTPTransport(cfg ClientConfig) (*http.Transport, error) { tlsConfig, err := tlscfg.NewTLSConfig(cfg.TLSConfig) if err != nil { return nil, fmt.Errorf("error on creating TLS config: %v", err) @@ -52,24 +80,54 @@ func NewHTTPClient(cfg ClientConfig) (*http.Client, error) { d := &net.Dialer{Timeout: cfg.Timeout.Duration()} transport := &http.Transport{ - Proxy: proxyFunc(cfg.ProxyURL), TLSClientConfig: tlsConfig, DialContext: d.DialContext, TLSHandshakeTimeout: cfg.Timeout.Duration(), + Proxy: proxyFunc(cfg.ProxyURL), } - return &http.Client{ - Timeout: cfg.Timeout.Duration(), - Transport: transport, - CheckRedirect: redirectFunc(cfg.NotFollowRedirect), - }, nil + return transport, nil } -func redirectFunc(notFollowRedirect bool) func(req *http.Request, via []*http.Request) error { - if follow := !notFollowRedirect; follow { - return nil +func newHTTP2Transport(cfg ClientConfig) (*http2Transport, error) { + tlsConfig, err := tlscfg.NewTLSConfig(cfg.TLSConfig) + if err != nil { + return nil, fmt.Errorf("error on creating TLS config: %v", err) + } + + d := &net.Dialer{Timeout: cfg.Timeout.Duration()} + + transport := &http2Transport{ + t2: &http2.Transport{ + TLSClientConfig: tlsConfig, + }, + t2c: &http2.Transport{ + AllowHTTP: true, + DialTLSContext: func(ctx context.Context, network, addr string, _ *tls.Config) (net.Conn, error) { + return d.DialContext(ctx, network, addr) + }, + TLSClientConfig: tlsConfig, + }, + } + + return transport, nil +} + +type http2Transport struct { + t2 *http2.Transport + t2c *http2.Transport +} + +func (t *http2Transport) RoundTrip(req *http.Request) (resp *http.Response, err error) { + if req.URL.Scheme == "https" { + return t.t2.RoundTrip(req) } - return func(_ *http.Request, _ []*http.Request) error { return ErrRedirectAttempted } + return t.t2c.RoundTrip(req) +} + +func (t *http2Transport) CloseIdleConnection() { + t.t2.CloseIdleConnections() + t.t2c.CloseIdleConnections() } func proxyFunc(rawProxyURL string) func(r *http.Request) (*url.URL, error) { @@ -79,3 +137,10 @@ func proxyFunc(rawProxyURL string) func(r *http.Request) (*url.URL, error) { proxyURL, _ := url.Parse(rawProxyURL) return http.ProxyURL(proxyURL) } + +func redirectFunc(notFollow bool) func(req *http.Request, via []*http.Request) error { + if notFollow { + return func(_ *http.Request, _ []*http.Request) error { return ErrRedirectAttempted } + } + return nil +}