@cryptotaxi247 / netdata-1 / commits / 6ef270c74

feat(go.d/pkg/web): add "force_http2" option (#19047)

Ilya Mashchenko committed Nov 20, 2024 at 16:28 UTC 6ef270c7445f67bafd5ec3d203bf36b4e73a7fbb
113 files changed +236 -51
src/go/plugin/go.d/modules/activemq/testdata/config.json
+2 -1
@@ -21,5 +21,6 @@
21 "tls_ca": "ok",
22 "tls_cert": "ok",
23 "tls_key": "ok",
24 - "tls_skip_verify": true
24 + "tls_skip_verify": true,
25 + "force_http2": true
26 }
src/go/plugin/go.d/modules/activemq/testdata/config.yaml
+1
@@ -20,3 +20,4 @@ tls_ca: "ok"
20 tls_cert: "ok"
21 tls_key: "ok"
22 tls_skip_verify: yes
23 +force_http2: yes
src/go/plugin/go.d/modules/apache/config_schema.json
+7 -1
@@ -30,6 +30,11 @@
30 "description": "If set, the client will not follow HTTP redirects automatically.",
31 "type": "boolean"
32 },
33 + "force_http2": {
34 + "title": "Force HTTP2",
35 + "description": "If set, forces the use of HTTP/2 protocol for all requests, even over plain TCP (h2c).",
36 + "type": "boolean"
37 + },
38 "username": {
39 "title": "Username",
40 "description": "The username for basic authentication.",
@@ -143,7 +148,8 @@
148 "update_every",
149 "url",
150 "timeout",
146 - "not_follow_redirects"
151 + "not_follow_redirects",
152 + "force_http2"
153 ]
154 },
155 {
src/go/plugin/go.d/modules/apache/metadata.yaml
+4
@@ -119,6 +119,10 @@ modules:
119 description: Redirect handling policy. Controls whether the client follows redirects.
120 default_value: no
121 required: false
122 + - name: force_http2
123 + description: Forces the use of HTTP/2 protocol for all requests, even over plain TCP (h2c).
124 + default_value: no
125 + required: false
126 - name: tls_skip_verify
127 description: Server certificate chain and hostname validation policy. Controls whether the client performs this check.
128 default_value: no
src/go/plugin/go.d/modules/apache/testdata/config.json
+2 -1
@@ -16,5 +16,6 @@
16 "tls_ca": "ok",
17 "tls_cert": "ok",
18 "tls_key": "ok",
19 - "tls_skip_verify": true
19 + "tls_skip_verify": true,
20 + "force_http2": true
21 }
src/go/plugin/go.d/modules/apache/testdata/config.yaml
+1
@@ -15,3 +15,4 @@ tls_ca: "ok"
15 tls_cert: "ok"
16 tls_key: "ok"
17 tls_skip_verify: yes
18 +force_http2: yes
src/go/plugin/go.d/modules/bind/testdata/config.json
+1
@@ -17,5 +17,6 @@
17 "tls_cert": "ok",
18 "tls_key": "ok",
19 "tls_skip_verify": true,
20 + "force_http2": true,
21 "permit_view": "ok"
22 }
src/go/plugin/go.d/modules/bind/testdata/config.yaml
+1
@@ -15,4 +15,5 @@ tls_ca: "ok"
15 tls_cert: "ok"
16 tls_key: "ok"
17 tls_skip_verify: yes
18 +force_http2: yes
19 permit_view: "ok"
src/go/plugin/go.d/modules/cassandra/testdata/config.json
+2 -1
@@ -16,5 +16,6 @@
16 "tls_ca": "ok",
17 "tls_cert": "ok",
18 "tls_key": "ok",
19 - "tls_skip_verify": true
19 + "tls_skip_verify": true,
20 + "force_http2": true
21 }
src/go/plugin/go.d/modules/cassandra/testdata/config.yaml
+1
@@ -15,3 +15,4 @@ tls_ca: "ok"
15 tls_cert: "ok"
16 tls_key: "ok"
17 tls_skip_verify: yes
18 +force_http2: yes
src/go/plugin/go.d/modules/ceph/testdata/config.json
+2 -1
@@ -16,5 +16,6 @@
16 "tls_ca": "ok",
17 "tls_cert": "ok",
18 "tls_key": "ok",
19 - "tls_skip_verify": true
19 + "tls_skip_verify": true,
20 + "force_http2": true
21 }
src/go/plugin/go.d/modules/ceph/testdata/config.yaml
+1
@@ -15,3 +15,4 @@ tls_ca: "ok"
15 tls_cert: "ok"
16 tls_key: "ok"
17 tls_skip_verify: yes
18 +force_http2: yes
src/go/plugin/go.d/modules/clickhouse/testdata/config.json
+2 -1
@@ -16,5 +16,6 @@
16 "tls_ca": "ok",
17 "tls_cert": "ok",
18 "tls_key": "ok",
19 - "tls_skip_verify": true
19 + "tls_skip_verify": true,
20 + "force_http2": true
21 }
src/go/plugin/go.d/modules/clickhouse/testdata/config.yaml
+1
@@ -15,3 +15,4 @@ tls_ca: "ok"
15 tls_cert: "ok"
16 tls_key: "ok"
17 tls_skip_verify: yes
18 +force_http2: yes
src/go/plugin/go.d/modules/cockroachdb/testdata/config.json
+2 -1
@@ -16,5 +16,6 @@
16 "tls_ca": "ok",
17 "tls_cert": "ok",
18 "tls_key": "ok",
19 - "tls_skip_verify": true
19 + "tls_skip_verify": true,
20 + "force_http2": true
21 }
src/go/plugin/go.d/modules/cockroachdb/testdata/config.yaml
+1
@@ -15,3 +15,4 @@ tls_ca: "ok"
15 tls_cert: "ok"
16 tls_key: "ok"
17 tls_skip_verify: yes
18 +force_http2: yes
src/go/plugin/go.d/modules/consul/testdata/config.json
+2 -1
@@ -17,5 +17,6 @@
17 "tls_cert": "ok",
18 "tls_key": "ok",
19 "tls_skip_verify": true,
20 - "acl_token": "ok"
20 + "acl_token": "ok",
21 + "force_http2": true
22 }
src/go/plugin/go.d/modules/consul/testdata/config.yaml
+1
@@ -16,3 +16,4 @@ tls_cert: "ok"
16 tls_key: "ok"
17 tls_skip_verify: yes
18 acl_token: "ok"
19 +force_http2: yes
src/go/plugin/go.d/modules/coredns/testdata/config.json
+1
@@ -17,6 +17,7 @@
17 "tls_cert": "ok",
18 "tls_key": "ok",
19 "tls_skip_verify": true,
20 + "force_http2": true,
21 "per_server_stats": {
22 "includes": [
23 "ok"
src/go/plugin/go.d/modules/coredns/testdata/config.yaml
+1
@@ -15,6 +15,7 @@ tls_ca: "ok"
15 tls_cert: "ok"
16 tls_key: "ok"
17 tls_skip_verify: yes
18 +force_http2: yes
19 per_server_stats:
20 includes:
21 - "ok"
src/go/plugin/go.d/modules/couchbase/testdata/config.json
+2 -1
@@ -16,5 +16,6 @@
16 "tls_ca": "ok",
17 "tls_cert": "ok",
18 "tls_key": "ok",
19 - "tls_skip_verify": true
19 + "tls_skip_verify": true,
20 + "force_http2": true
21 }
src/go/plugin/go.d/modules/couchbase/testdata/config.yaml
+1
@@ -15,3 +15,4 @@ tls_ca: "ok"
15 tls_cert: "ok"
16 tls_key: "ok"
17 tls_skip_verify: yes
18 +force_http2: yes
src/go/plugin/go.d/modules/couchdb/testdata/config.json
+1
@@ -17,6 +17,7 @@
17 "tls_cert": "ok",
18 "tls_key": "ok",
19 "tls_skip_verify": true,
20 + "force_http2": true,
21 "node": "ok",
22 "databases": "ok"
23 }
src/go/plugin/go.d/modules/couchdb/testdata/config.yaml
+1
@@ -15,5 +15,6 @@ tls_ca: "ok"
15 tls_cert: "ok"
16 tls_key: "ok"
17 tls_skip_verify: yes
18 +force_http2: yes
19 node: "ok"
20 databases: "ok"
src/go/plugin/go.d/modules/dnsdist/testdata/config.json
+2 -1
@@ -16,5 +16,6 @@
16 "tls_ca": "ok",
17 "tls_cert": "ok",
18 "tls_key": "ok",
19 - "tls_skip_verify": true
19 + "tls_skip_verify": true,
20 + "force_http2": true
21 }
src/go/plugin/go.d/modules/dnsdist/testdata/config.yaml
+1
@@ -15,3 +15,4 @@ tls_ca: "ok"
15 tls_cert: "ok"
16 tls_key: "ok"
17 tls_skip_verify: yes
18 +force_http2: yes
src/go/plugin/go.d/modules/docker_engine/testdata/config.json
+2 -1
@@ -16,5 +16,6 @@
16 "tls_ca": "ok",
17 "tls_cert": "ok",
18 "tls_key": "ok",
19 - "tls_skip_verify": true
19 + "tls_skip_verify": true,
20 + "force_http2": true
21 }
src/go/plugin/go.d/modules/docker_engine/testdata/config.yaml
+1
@@ -15,3 +15,4 @@ tls_ca: "ok"
15 tls_cert: "ok"
16 tls_key: "ok"
17 tls_skip_verify: yes
18 +force_http2: yes
src/go/plugin/go.d/modules/dockerhub/testdata/config.json
+1
@@ -17,6 +17,7 @@
17 "tls_cert": "ok",
18 "tls_key": "ok",
19 "tls_skip_verify": true,
20 + "force_http2": true,
21 "repositories": [
22 "ok"
23 ]
src/go/plugin/go.d/modules/dockerhub/testdata/config.yaml
+1
@@ -15,5 +15,6 @@ tls_ca: "ok"
15 tls_cert: "ok"
16 tls_key: "ok"
17 tls_skip_verify: yes
18 +force_http2: yes
19 repositories:
20 - "ok"
src/go/plugin/go.d/modules/elasticsearch/testdata/config.json
+1
@@ -17,6 +17,7 @@
17 "tls_cert": "ok",
18 "tls_key": "ok",
19 "tls_skip_verify": true,
20 + "force_http2": true,
21 "cluster_mode": true,
22 "collect_node_stats": true,
23 "collect_cluster_health": true,
src/go/plugin/go.d/modules/elasticsearch/testdata/config.yaml
+1
@@ -15,6 +15,7 @@ tls_ca: "ok"
15 tls_cert: "ok"
16 tls_key: "ok"
17 tls_skip_verify: yes
18 +force_http2: yes
19 cluster_mode: yes
20 collect_node_stats: yes
21 collect_cluster_health: yes
src/go/plugin/go.d/modules/envoy/testdata/config.json
+2 -1
@@ -16,5 +16,6 @@
16 "tls_ca": "ok",
17 "tls_cert": "ok",
18 "tls_key": "ok",
19 - "tls_skip_verify": true
19 + "tls_skip_verify": true,
20 + "force_http2": true
21 }
src/go/plugin/go.d/modules/envoy/testdata/config.yaml
+1
@@ -15,3 +15,4 @@ tls_ca: "ok"
15 tls_cert: "ok"
16 tls_key: "ok"
17 tls_skip_verify: yes
18 +force_http2: yes
src/go/plugin/go.d/modules/fluentd/testdata/config.json
+1
@@ -17,5 +17,6 @@
17 "tls_cert": "ok",
18 "tls_key": "ok",
19 "tls_skip_verify": true,
20 + "force_http2": true,
21 "permit_plugin_id": "ok"
22 }
src/go/plugin/go.d/modules/fluentd/testdata/config.yaml
+1
@@ -15,4 +15,5 @@ tls_ca: "ok"
15 tls_cert: "ok"
16 tls_key: "ok"
17 tls_skip_verify: yes
18 +force_http2: yes
19 permit_plugin_id: "ok"
src/go/plugin/go.d/modules/geth/testdata/config.json
+2 -1
@@ -16,5 +16,6 @@
16 "tls_ca": "ok",
17 "tls_cert": "ok",
18 "tls_key": "ok",
19 - "tls_skip_verify": true
19 + "tls_skip_verify": true,
20 + "force_http2": true
21 }
src/go/plugin/go.d/modules/geth/testdata/config.yaml
+1
@@ -15,3 +15,4 @@ tls_ca: "ok"
15 tls_cert: "ok"
16 tls_key: "ok"
17 tls_skip_verify: yes
18 +force_http2: yes
src/go/plugin/go.d/modules/haproxy/testdata/config.json
+2 -1
@@ -16,5 +16,6 @@
16 "tls_ca": "ok",
17 "tls_cert": "ok",
18 "tls_key": "ok",
19 - "tls_skip_verify": true
19 + "tls_skip_verify": true,
20 + "force_http2": true
21 }
src/go/plugin/go.d/modules/haproxy/testdata/config.yaml
+1
@@ -15,3 +15,4 @@ tls_ca: "ok"
15 tls_cert: "ok"
16 tls_key: "ok"
17 tls_skip_verify: yes
18 +force_http2: yes
src/go/plugin/go.d/modules/hdfs/testdata/config.json
+2 -1
@@ -16,5 +16,6 @@
16 "tls_ca": "ok",
17 "tls_cert": "ok",
18 "tls_key": "ok",
19 - "tls_skip_verify": true
19 + "tls_skip_verify": true,
20 + "force_http2": true
21 }
src/go/plugin/go.d/modules/hdfs/testdata/config.yaml
+1
@@ -15,3 +15,4 @@ tls_ca: "ok"
15 tls_cert: "ok"
16 tls_key: "ok"
17 tls_skip_verify: yes
18 +force_http2: yes
src/go/plugin/go.d/modules/httpcheck/testdata/config.json
+1
@@ -17,6 +17,7 @@
17 "tls_cert": "ok",
18 "tls_key": "ok",
19 "tls_skip_verify": true,
20 + "force_http2": true,
21 "status_accepted": [
22 123
23 ],
src/go/plugin/go.d/modules/httpcheck/testdata/config.yaml
+1
@@ -15,6 +15,7 @@ tls_ca: "ok"
15 tls_cert: "ok"
16 tls_key: "ok"
17 tls_skip_verify: yes
18 +force_http2: yes
19 status_accepted:
20 - 123
21 response_match: "ok"
src/go/plugin/go.d/modules/icecast/testdata/config.json
+2 -1
@@ -16,5 +16,6 @@
16 "tls_ca": "ok",
17 "tls_cert": "ok",
18 "tls_key": "ok",
19 - "tls_skip_verify": true
19 + "tls_skip_verify": true,
20 + "force_http2": true
21 }
src/go/plugin/go.d/modules/icecast/testdata/config.yaml
+1
@@ -15,3 +15,4 @@ tls_ca: "ok"
15 tls_cert: "ok"
16 tls_key: "ok"
17 tls_skip_verify: yes
18 +force_http2: yes
src/go/plugin/go.d/modules/ipfs/testdata/config.json
+1
@@ -17,6 +17,7 @@
17 "tls_cert": "ok",
18 "tls_key": "ok",
19 "tls_skip_verify": true,
20 + "force_http2": true,
21 "pinapi": false,
22 "repoapi": false
23 }
src/go/plugin/go.d/modules/ipfs/testdata/config.yaml
+1
@@ -15,5 +15,6 @@ tls_ca: "ok"
15 tls_cert: "ok"
16 tls_key: "ok"
17 tls_skip_verify: yes
18 +force_http2: yes
19 pinapi: no
20 repoapi: no
src/go/plugin/go.d/modules/k8s_kubelet/testdata/config.json
+1
@@ -17,5 +17,6 @@
17 "tls_cert": "ok",
18 "tls_key": "ok",
19 "tls_skip_verify": true,
20 + "force_http2": true,
21 "token_path": "ok"
22 }
src/go/plugin/go.d/modules/k8s_kubelet/testdata/config.yaml
+1
@@ -15,4 +15,5 @@ tls_ca: "ok"
15 tls_cert: "ok"
16 tls_key: "ok"
17 tls_skip_verify: yes
18 +force_http2: yes
19 token_path: "ok"
src/go/plugin/go.d/modules/k8s_kubeproxy/testdata/config.json
+2 -1
@@ -16,5 +16,6 @@
16 "tls_ca": "ok",
17 "tls_cert": "ok",
18 "tls_key": "ok",
19 - "tls_skip_verify": true
19 + "tls_skip_verify": true,
20 + "force_http2": true
21 }
src/go/plugin/go.d/modules/k8s_kubeproxy/testdata/config.yaml
+1
@@ -15,3 +15,4 @@ tls_ca: "ok"
15 tls_cert: "ok"
16 tls_key: "ok"
17 tls_skip_verify: yes
18 +force_http2: yes
src/go/plugin/go.d/modules/lighttpd/testdata/config.json
+2 -1
@@ -16,5 +16,6 @@
16 "tls_ca": "ok",
17 "tls_cert": "ok",
18 "tls_key": "ok",
19 - "tls_skip_verify": true
19 + "tls_skip_verify": true,
20 + "force_http2": true
21 }
src/go/plugin/go.d/modules/lighttpd/testdata/config.yaml
+1
@@ -15,3 +15,4 @@ tls_ca: "ok"
15 tls_cert: "ok"
16 tls_key: "ok"
17 tls_skip_verify: yes
18 +force_http2: yes
src/go/plugin/go.d/modules/logstash/testdata/config.json
+2 -1
@@ -16,5 +16,6 @@
16 "tls_ca": "ok",
17 "tls_cert": "ok",
18 "tls_key": "ok",
19 - "tls_skip_verify": true
19 + "tls_skip_verify": true,
20 + "force_http2": true
21 }
src/go/plugin/go.d/modules/logstash/testdata/config.yaml
+1
@@ -15,3 +15,4 @@ tls_ca: "ok"
15 tls_cert: "ok"
16 tls_key: "ok"
17 tls_skip_verify: yes
18 +force_http2: yes
src/go/plugin/go.d/modules/maxscale/testdata/config.json
+2 -1
@@ -16,5 +16,6 @@
16 "tls_ca": "ok",
17 "tls_cert": "ok",
18 "tls_key": "ok",
19 - "tls_skip_verify": true
19 + "tls_skip_verify": true,
20 + "force_http2": true
21 }
src/go/plugin/go.d/modules/maxscale/testdata/config.yaml
+1
@@ -15,3 +15,4 @@ tls_ca: "ok"
15 tls_cert: "ok"
16 tls_key: "ok"
17 tls_skip_verify: yes
18 +force_http2: yes
src/go/plugin/go.d/modules/monit/testdata/config.json
+2 -1
@@ -16,5 +16,6 @@
16 "tls_ca": "ok",
17 "tls_cert": "ok",
18 "tls_key": "ok",
19 - "tls_skip_verify": true
19 + "tls_skip_verify": true,
20 + "force_http2": true
21 }
src/go/plugin/go.d/modules/monit/testdata/config.yaml
+1
@@ -15,3 +15,4 @@ tls_ca: "ok"
15 tls_cert: "ok"
16 tls_key: "ok"
17 tls_skip_verify: yes
18 +force_http2: yes
src/go/plugin/go.d/modules/nginx/testdata/config.json
+2 -1
@@ -16,5 +16,6 @@
16 "tls_ca": "ok",
17 "tls_cert": "ok",
18 "tls_key": "ok",
19 - "tls_skip_verify": true
19 + "tls_skip_verify": true,
20 + "force_http2": true
21 }
src/go/plugin/go.d/modules/nginx/testdata/config.yaml
+1
@@ -15,3 +15,4 @@ tls_ca: "ok"
15 tls_cert: "ok"
16 tls_key: "ok"
17 tls_skip_verify: yes
18 +force_http2: yes
src/go/plugin/go.d/modules/nginxplus/testdata/config.json
+2 -1
@@ -16,5 +16,6 @@
16 "tls_ca": "ok",
17 "tls_cert": "ok",
18 "tls_key": "ok",
19 - "tls_skip_verify": true
19 + "tls_skip_verify": true,
20 + "force_http2": true
21 }
src/go/plugin/go.d/modules/nginxplus/testdata/config.yaml
+1
@@ -15,3 +15,4 @@ tls_ca: "ok"
15 tls_cert: "ok"
16 tls_key: "ok"
17 tls_skip_verify: yes
18 +force_http2: yes
src/go/plugin/go.d/modules/nginxunit/testdata/config.json
+2 -1
@@ -16,5 +16,6 @@
16 "tls_ca": "ok",
17 "tls_cert": "ok",
18 "tls_key": "ok",
19 - "tls_skip_verify": true
19 + "tls_skip_verify": true,
20 + "force_http2": true
21 }
src/go/plugin/go.d/modules/nginxunit/testdata/config.yaml
+1
@@ -15,3 +15,4 @@ tls_ca: "ok"
15 tls_cert: "ok"
16 tls_key: "ok"
17 tls_skip_verify: yes
18 +force_http2: yes
src/go/plugin/go.d/modules/nginxvts/testdata/config.json
+2 -1
@@ -16,5 +16,6 @@
16 "tls_ca": "ok",
17 "tls_cert": "ok",
18 "tls_key": "ok",
19 - "tls_skip_verify": true
19 + "tls_skip_verify": true,
20 + "force_http2": true
21 }
src/go/plugin/go.d/modules/nginxvts/testdata/config.yaml
+1
@@ -15,3 +15,4 @@ tls_ca: "ok"
15 tls_cert: "ok"
16 tls_key: "ok"
17 tls_skip_verify: yes
18 +force_http2: yes
src/go/plugin/go.d/modules/phpdaemon/testdata/config.json
+2 -1
@@ -16,5 +16,6 @@
16 "tls_ca": "ok",
17 "tls_cert": "ok",
18 "tls_key": "ok",
19 - "tls_skip_verify": true
19 + "tls_skip_verify": true,
20 + "force_http2": true
21 }
src/go/plugin/go.d/modules/phpdaemon/testdata/config.yaml
+1
@@ -15,3 +15,4 @@ tls_ca: "ok"
15 tls_cert: "ok"
16 tls_key: "ok"
17 tls_skip_verify: yes
18 +force_http2: yes
src/go/plugin/go.d/modules/phpfpm/testdata/config.json
+1
@@ -17,6 +17,7 @@
17 "tls_cert": "ok",
18 "tls_key": "ok",
19 "tls_skip_verify": true,
20 + "force_http2": true,
21 "socket": "ok",
22 "address": "ok",
23 "fcgi_path": "ok"
src/go/plugin/go.d/modules/phpfpm/testdata/config.yaml
+1
@@ -15,6 +15,7 @@ tls_ca: "ok"
15 tls_cert: "ok"
16 tls_key: "ok"
17 tls_skip_verify: yes
18 +force_http2: yes
19 socket: "ok"
20 address: "ok"
21 fcgi_path: "ok"
src/go/plugin/go.d/modules/pihole/testdata/config.json
+1
@@ -17,5 +17,6 @@
17 "tls_cert": "ok",
18 "tls_key": "ok",
19 "tls_skip_verify": true,
20 + "force_http2": true,
21 "setup_vars_path": "ok"
22 }
src/go/plugin/go.d/modules/pihole/testdata/config.yaml
+1
@@ -15,4 +15,5 @@ tls_ca: "ok"
15 tls_cert: "ok"
16 tls_key: "ok"
17 tls_skip_verify: yes
18 +force_http2: yes
19 setup_vars_path: "ok"
src/go/plugin/go.d/modules/powerdns/testdata/config.json
+2 -1
@@ -16,5 +16,6 @@
16 "tls_ca": "ok",
17 "tls_cert": "ok",
18 "tls_key": "ok",
19 - "tls_skip_verify": true
19 + "tls_skip_verify": true,
20 + "force_http2": true
21 }
src/go/plugin/go.d/modules/powerdns/testdata/config.yaml
+1
@@ -15,3 +15,4 @@ tls_ca: "ok"
15 tls_cert: "ok"
16 tls_key: "ok"
17 tls_skip_verify: yes
18 +force_http2: yes
src/go/plugin/go.d/modules/powerdns_recursor/testdata/config.json
+2 -1
@@ -16,5 +16,6 @@
16 "tls_ca": "ok",
17 "tls_cert": "ok",
18 "tls_key": "ok",
19 - "tls_skip_verify": true
19 + "tls_skip_verify": true,
20 + "force_http2": true
21 }
src/go/plugin/go.d/modules/powerdns_recursor/testdata/config.yaml
+1
@@ -15,3 +15,4 @@ tls_ca: "ok"
15 tls_cert: "ok"
16 tls_key: "ok"
17 tls_skip_verify: yes
18 +force_http2: yes
src/go/plugin/go.d/modules/prometheus/testdata/config.json
+1
@@ -17,6 +17,7 @@
17 "tls_cert": "ok",
18 "tls_key": "ok",
19 "tls_skip_verify": true,
20 + "force_http2": true,
21 "name": "ok",
22 "app": "ok",
23 "label_prefix": "ok",
src/go/plugin/go.d/modules/prometheus/testdata/config.yaml
+1
@@ -15,6 +15,7 @@ tls_ca: "ok"
15 tls_cert: "ok"
16 tls_key: "ok"
17 tls_skip_verify: yes
18 +force_http2: yes
19 name: "ok"
20 app: "ok"
21 label_prefix: "ok"
src/go/plugin/go.d/modules/pulsar/testdata/config.json
+1
@@ -17,6 +17,7 @@
17 "tls_cert": "ok",
18 "tls_key": "ok",
19 "tls_skip_verify": true,
20 + "force_http2": true,
21 "topic_filter": {
22 "includes": [
23 "ok"
src/go/plugin/go.d/modules/pulsar/testdata/config.yaml
+1
@@ -15,6 +15,7 @@ tls_ca: "ok"
15 tls_cert: "ok"
16 tls_key: "ok"
17 tls_skip_verify: yes
18 +force_http2: yes
19 topic_filter:
20 includes:
21 - "ok"
src/go/plugin/go.d/modules/puppet/testdata/config.json
+2 -1
@@ -16,5 +16,6 @@
16 "tls_ca": "ok",
17 "tls_cert": "ok",
18 "tls_key": "ok",
19 - "tls_skip_verify": true
19 + "tls_skip_verify": true,
20 + "force_http2": true
21 }
src/go/plugin/go.d/modules/puppet/testdata/config.yaml
+1
@@ -15,3 +15,4 @@ tls_ca: "ok"
15 tls_cert: "ok"
16 tls_key: "ok"
17 tls_skip_verify: yes
18 +force_http2: yes
src/go/plugin/go.d/modules/rabbitmq/testdata/config.json
+1
@@ -17,5 +17,6 @@
17 "tls_cert": "ok",
18 "tls_key": "ok",
19 "tls_skip_verify": true,
20 + "force_http2": true,
21 "collect_queues_metrics": true
22 }
src/go/plugin/go.d/modules/rabbitmq/testdata/config.yaml
+1
@@ -15,4 +15,5 @@ tls_ca: "ok"
15 tls_cert: "ok"
16 tls_key: "ok"
17 tls_skip_verify: yes
18 +force_http2: yes
19 collect_queues_metrics: yes
src/go/plugin/go.d/modules/riakkv/testdata/config.json
+2 -1
@@ -16,5 +16,6 @@
16 "tls_ca": "ok",
17 "tls_cert": "ok",
18 "tls_key": "ok",
19 - "tls_skip_verify": true
19 + "tls_skip_verify": true,
20 + "force_http2": true
21 }
src/go/plugin/go.d/modules/riakkv/testdata/config.yaml
+1
@@ -15,3 +15,4 @@ tls_ca: "ok"
15 tls_cert: "ok"
16 tls_key: "ok"
17 tls_skip_verify: yes
18 +force_http2: yes
src/go/plugin/go.d/modules/rspamd/testdata/config.json
+2 -1
@@ -16,5 +16,6 @@
16 "tls_ca": "ok",
17 "tls_cert": "ok",
18 "tls_key": "ok",
19 - "tls_skip_verify": true
19 + "tls_skip_verify": true,
20 + "force_http2": true
21 }
src/go/plugin/go.d/modules/rspamd/testdata/config.yaml
+1
@@ -15,3 +15,4 @@ tls_ca: "ok"
15 tls_cert: "ok"
16 tls_key: "ok"
17 tls_skip_verify: yes
18 +force_http2: yes
src/go/plugin/go.d/modules/scaleio/testdata/config.json
+2 -1
@@ -16,5 +16,6 @@
16 "tls_ca": "ok",
17 "tls_cert": "ok",
18 "tls_key": "ok",
19 - "tls_skip_verify": true
19 + "tls_skip_verify": true,
20 + "force_http2": true
21 }
src/go/plugin/go.d/modules/scaleio/testdata/config.yaml
+1
@@ -15,3 +15,4 @@ tls_ca: "ok"
15 tls_cert: "ok"
16 tls_key: "ok"
17 tls_skip_verify: yes
18 +force_http2: yes
src/go/plugin/go.d/modules/squid/testdata/config.json
+2 -1
@@ -16,5 +16,6 @@
16 "tls_ca": "ok",
17 "tls_cert": "ok",
18 "tls_key": "ok",
19 - "tls_skip_verify": true
19 + "tls_skip_verify": true,
20 + "force_http2": true
21 }
src/go/plugin/go.d/modules/squid/testdata/config.yaml
+1
@@ -15,3 +15,4 @@ tls_ca: "ok"
15 tls_cert: "ok"
16 tls_key: "ok"
17 tls_skip_verify: yes
18 +force_http2: yes
src/go/plugin/go.d/modules/supervisord/testdata/config.json
+2 -1
@@ -7,5 +7,6 @@
7 "tls_ca": "ok",
8 "tls_cert": "ok",
9 "tls_key": "ok",
10 - "tls_skip_verify": true
10 + "tls_skip_verify": true,
11 + "force_http2": true
12 }
src/go/plugin/go.d/modules/supervisord/testdata/config.yaml
+1
@@ -7,3 +7,4 @@ tls_ca: "ok"
7 tls_cert: "ok"
8 tls_key: "ok"
9 tls_skip_verify: yes
10 +force_http2: yes
src/go/plugin/go.d/modules/tengine/testdata/config.json
+2 -1
@@ -16,5 +16,6 @@
16 "tls_ca": "ok",
17 "tls_cert": "ok",
18 "tls_key": "ok",
19 - "tls_skip_verify": true
19 + "tls_skip_verify": true,
20 + "force_http2": true
21 }
src/go/plugin/go.d/modules/tengine/testdata/config.yaml
+1
@@ -15,3 +15,4 @@ tls_ca: "ok"
15 tls_cert: "ok"
16 tls_key: "ok"
17 tls_skip_verify: yes
18 +force_http2: yes
src/go/plugin/go.d/modules/tomcat/testdata/config.json
+2 -1
@@ -16,5 +16,6 @@
16 "tls_ca": "ok",
17 "tls_cert": "ok",
18 "tls_key": "ok",
19 - "tls_skip_verify": true
19 + "tls_skip_verify": true,
20 + "force_http2": true
21 }
src/go/plugin/go.d/modules/tomcat/testdata/config.yaml
+1
@@ -15,3 +15,4 @@ tls_ca: "ok"
15 tls_cert: "ok"
16 tls_key: "ok"
17 tls_skip_verify: yes
18 +force_http2: yes
src/go/plugin/go.d/modules/traefik/testdata/config.json
+2 -1
@@ -16,5 +16,6 @@
16 "tls_ca": "ok",
17 "tls_cert": "ok",
18 "tls_key": "ok",
19 - "tls_skip_verify": true
19 + "tls_skip_verify": true,
20 + "force_http2": true
21 }
src/go/plugin/go.d/modules/traefik/testdata/config.yaml
+1
@@ -15,3 +15,4 @@ tls_ca: "ok"
15 tls_cert: "ok"
16 tls_key: "ok"
17 tls_skip_verify: yes
18 +force_http2: yes
src/go/plugin/go.d/modules/typesense/testdata/config.json
+2 -1
@@ -17,5 +17,6 @@
17 "tls_ca": "ok",
18 "tls_cert": "ok",
19 "tls_key": "ok",
20 - "tls_skip_verify": true
20 + "tls_skip_verify": true,
21 + "force_http2": true
22 }
src/go/plugin/go.d/modules/typesense/testdata/config.yaml
+1
@@ -16,3 +16,4 @@ tls_ca: "ok"
16 tls_cert: "ok"
17 tls_key: "ok"
18 tls_skip_verify: yes
19 +force_http2: yes
src/go/plugin/go.d/modules/vcsa/testdata/config.json
+2 -1
@@ -16,5 +16,6 @@
16 "tls_ca": "ok",
17 "tls_cert": "ok",
18 "tls_key": "ok",
19 - "tls_skip_verify": true
19 + "tls_skip_verify": true,
20 + "force_http2": true
21 }
src/go/plugin/go.d/modules/vcsa/testdata/config.yaml
+1
@@ -15,3 +15,4 @@ tls_ca: "ok"
15 tls_cert: "ok"
16 tls_key: "ok"
17 tls_skip_verify: yes
18 +force_http2: yes
src/go/plugin/go.d/modules/vernemq/testdata/config.json
+2 -1
@@ -16,5 +16,6 @@
16 "tls_ca": "ok",
17 "tls_cert": "ok",
18 "tls_key": "ok",
19 - "tls_skip_verify": true
19 + "tls_skip_verify": true,
20 + "force_http2": true
21 }
src/go/plugin/go.d/modules/vernemq/testdata/config.yaml
+1
@@ -15,3 +15,4 @@ tls_ca: "ok"
15 tls_cert: "ok"
16 tls_key: "ok"
17 tls_skip_verify: yes
18 +force_http2: yes
src/go/plugin/go.d/modules/vsphere/testdata/config.json
+1
@@ -17,6 +17,7 @@
17 "tls_cert": "ok",
18 "tls_key": "ok",
19 "tls_skip_verify": true,
20 + "force_http2": true,
21 "discovery_interval": 123.123,
22 "host_include": [
23 "ok"
src/go/plugin/go.d/modules/vsphere/testdata/config.yaml
+1
@@ -15,6 +15,7 @@ tls_ca: "ok"
15 tls_cert: "ok"
16 tls_key: "ok"
17 tls_skip_verify: yes
18 +force_http2: yes
19 discovery_interval: 123.123
20 host_include:
21 - "ok"
src/go/plugin/go.d/modules/windows/testdata/config.json
+2 -1
@@ -17,5 +17,6 @@
17 "tls_ca": "ok",
18 "tls_cert": "ok",
19 "tls_key": "ok",
20 - "tls_skip_verify": true
20 + "tls_skip_verify": true,
21 + "force_http2": true
22 }
src/go/plugin/go.d/modules/windows/testdata/config.yaml
+1
@@ -16,3 +16,4 @@ tls_ca: "ok"
16 tls_cert: "ok"
17 tls_key: "ok"
18 tls_skip_verify: yes
19 +force_http2: yes
src/go/plugin/go.d/pkg/web/client_config.go
+75 -10
@@ -3,12 +3,16 @@
3 package web
4
5 import (
6 + "context"
7 + "crypto/tls"
8 "errors"
9 "fmt"
10 "net"
11 "net/http"
12 "net/url"
13
14 + "golang.org/x/net/http2"
15 +
16 "github.com/netdata/netdata/go/plugins/plugin/go.d/pkg/confopt"
17 "github.com/netdata/netdata/go/plugins/plugin/go.d/pkg/tlscfg"
18 )
@@ -34,10 +38,34 @@ type ClientConfig struct {
38
39 // TLSConfig specifies the TLS configuration.
40 tlscfg.TLSConfig `yaml:",inline" json:""`
41 +
42 + ForceHTTP2 bool `yaml:"force_http2,omitempty" json:"force_http2"`
43 }
44
45 // NewHTTPClient returns a new *http.Client given a ClientConfig configuration and an error if any.
46 func NewHTTPClient(cfg ClientConfig) (*http.Client, error) {
47 + var transport http.RoundTripper
48 + var err error
49 +
50 + if cfg.ForceHTTP2 {
51 + transport, err = newHTTP2Transport(cfg)
52 + } else {
53 + transport, err = newHTTPTransport(cfg)
54 + }
55 + if err != nil {
56 + return nil, err
57 + }
58 +
59 + client := &http.Client{
60 + Timeout: cfg.Timeout.Duration(),
61 + Transport: transport,
62 + CheckRedirect: redirectFunc(cfg.NotFollowRedirect),
63 + }
64 +
65 + return client, nil
66 +}
67 +
68 +func newHTTPTransport(cfg ClientConfig) (*http.Transport, error) {
69 tlsConfig, err := tlscfg.NewTLSConfig(cfg.TLSConfig)
70 if err != nil {
71 return nil, fmt.Errorf("error on creating TLS config: %v", err)
@@ -52,24 +80,54 @@ func NewHTTPClient(cfg ClientConfig) (*http.Client, error) {
80 d := &net.Dialer{Timeout: cfg.Timeout.Duration()}
81
82 transport := &http.Transport{
55 - Proxy: proxyFunc(cfg.ProxyURL),
83 TLSClientConfig: tlsConfig,
84 DialContext: d.DialContext,
85 TLSHandshakeTimeout: cfg.Timeout.Duration(),
86 + Proxy: proxyFunc(cfg.ProxyURL),
87 }
88
61 - return &http.Client{
62 - Timeout: cfg.Timeout.Duration(),
63 - Transport: transport,
64 - CheckRedirect: redirectFunc(cfg.NotFollowRedirect),
65 - }, nil
89 + return transport, nil
90 }
91
68 -func redirectFunc(notFollowRedirect bool) func(req *http.Request, via []*http.Request) error {
69 - if follow := !notFollowRedirect; follow {
70 - return nil
92 +func newHTTP2Transport(cfg ClientConfig) (*http2Transport, error) {
93 + tlsConfig, err := tlscfg.NewTLSConfig(cfg.TLSConfig)
94 + if err != nil {
95 + return nil, fmt.Errorf("error on creating TLS config: %v", err)
96 + }
97 +
98 + d := &net.Dialer{Timeout: cfg.Timeout.Duration()}
99 +
100 + transport := &http2Transport{
101 + t2: &http2.Transport{
102 + TLSClientConfig: tlsConfig,
103 + },
104 + t2c: &http2.Transport{
105 + AllowHTTP: true,
106 + DialTLSContext: func(ctx context.Context, network, addr string, _ *tls.Config) (net.Conn, error) {
107 + return d.DialContext(ctx, network, addr)
108 + },
109 + TLSClientConfig: tlsConfig,
110 + },
111 + }
112 +
113 + return transport, nil
114 +}
115 +
116 +type http2Transport struct {
117 + t2 *http2.Transport
118 + t2c *http2.Transport
119 +}
120 +
121 +func (t *http2Transport) RoundTrip(req *http.Request) (resp *http.Response, err error) {
122 + if req.URL.Scheme == "https" {
123 + return t.t2.RoundTrip(req)
124 }
72 - return func(_ *http.Request, _ []*http.Request) error { return ErrRedirectAttempted }
125 + return t.t2c.RoundTrip(req)
126 +}
127 +
128 +func (t *http2Transport) CloseIdleConnection() {
129 + t.t2.CloseIdleConnections()
130 + t.t2c.CloseIdleConnections()
131 }
132
133 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) {
137 proxyURL, _ := url.Parse(rawProxyURL)
138 return http.ProxyURL(proxyURL)
139 }
140 +
141 +func redirectFunc(notFollow bool) func(req *http.Request, via []*http.Request) error {
142 + if notFollow {
143 + return func(_ *http.Request, _ []*http.Request) error { return ErrRedirectAttempted }
144 + }
145 + return nil
146 +}