File: 0002_Remove_Jolokia.patch

package info (click to toggle)
trapperkeeper-metrics-clojure 1.3.1-2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 416 kB
  • sloc: java: 221; xml: 38; makefile: 25; sh: 19
file content (310 lines) | stat: -rw-r--r-- 14,879 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
Patch out jolokia support, as it's a very large java package, it's not in the
archive and it's very unlikely to make it in Bullseye.
Index: trapperkeeper-metrics-clojure/src/clj/puppetlabs/trapperkeeper/services/metrics/jolokia.clj
===================================================================
--- trapperkeeper-metrics-clojure.orig/src/clj/puppetlabs/trapperkeeper/services/metrics/jolokia.clj
+++ /dev/null
@@ -1,103 +0,0 @@
-(ns puppetlabs.trapperkeeper.services.metrics.jolokia
-  "Clojure helpers for constructing and configuring Jolokia servlets."
-  (:require [clojure.tools.logging :as log]
-            [clojure.walk :as walk]
-            [ring.util.servlet :as ring-servlet]
-            [schema.core :as schema])
-  (:import [javax.servlet.http HttpServletRequest]
-           [org.jolokia.config ConfigKey]
-           [org.jolokia.util LogHandler]
-           [org.jolokia.http AgentServlet]))
-
-
-(def config-mapping
-  "Inspects the Jolokia ConfigKey Enum and generates a mapping that associates
-  a Clojure keyword with each configuration parameter. The keyword used is the
-  camel-cased identifier that would be used to configure a servlet via a
-  web.xml file. For example, `ConfigKey/AGENT_ID` is associated with the
-  keyword `:agentId`.
-
-  For a complete list of configuration options, see:
-
-    https://jolokia.org/reference/html/agents.html#agent-war-init-params"
-  (->> (ConfigKey/values)
-       (map (juxt
-              #(-> % .getKeyValue keyword)
-              identity))
-       (into {})))
-
-(schema/defschema JolokiaConfig
-  "Schema for validating Clojure maps containing Jolokia configuration.
-
-  Creates a map of optional keys which have string values using the
-  config-mapping extracted from the ConfigKey enum."
-  (->> (keys config-mapping)
-       (map #(vector (schema/optional-key %) schema/Str))
-       (into {})))
-
-(def config-defaults
-  "Default configuration values for Jolokia."
-  {;; When set to "false", no debug-level messages are produced by the Jolokia
-   ;; namespace. This is unfortunate for debuggability, but having debug set to
-   ;; "true" causes a lot of useless error messages and backtraces to flood the
-   ;; logs when 404 results are generated by requests for JMX items that
-   ;; do not exist.
-   :debug "false"
-   ;; Don't include backtraces in error results returned by the API.
-   :allowErrorDetails "false"
-   ;; Used by jolokia-access to match IPv4 and IPv6 to "localhost"
-   :allowDnsReverseLookup "true"
-   ;; Load access policy from: resources/jolokia-access.xml
-   :policyLocation "classpath:/jolokia-access.xml"
-   :mimeType "application/json"})
-
-
-(defn create-servlet-config
-  "Generate Jolokia AgentServlet configuration from a Clojure map"
-  ([]
-   (create-servlet-config {}))
-  ([config]
-   (->> config
-        (merge config-defaults)
-        ;; Validate here to ensure defaults are also valid.
-        (schema/validate JolokiaConfig)
-        walk/stringify-keys)))
-
-(defn create-logger
-  "Return an object that implements the Jolokia logging interface using the
-  logger from clojure.tools.logging"
-  []
-  (reify
-    LogHandler
-    (debug [this message] (log/debug message))
-    (info [this message] (log/info message))
-    (error [this message throwable] (log/error throwable message))))
-
-(defn create-servlet
-  "Builds a Jolokia Servlet that uses Clojure logging."
-  [auth-check-fn]
-  (let [check-auth (if auth-check-fn
-                     (fn [^HttpServletRequest request]
-                      (auth-check-fn
-                       (ring-servlet/build-request-map request)))
-                     (fn [^HttpServletRequest request]
-                       {:authorized true :message ""}))]
-    (if auth-check-fn
-      (log/info "Metrics access control using trapperkeeper-authorization is enabled.")
-      (log/warn "Metrics access control using trapperkeeper-authorization is disabled. Add the authorization service to the trapperkeeper bootstrap configuration file to enable it."))
-    (proxy [AgentServlet] []
-     ;; NOTE: An alternative to this method override would be to use defrecord
-     ;; to create a class that can be set as `:logHandlerClass` in the servlet
-     ;; configuration. This requires AOT compilation for the namespace defining
-     ;; the record so that Jolokia can find the resulting class.
-     (createLogHandler [_ _]
-       (create-logger))
-     (service [request response]
-       (let [{:keys [authorized message]} (check-auth request)]
-          (if-not authorized
-            (ring-servlet/update-servlet-response
-             response
-             {:status 403
-              :headers {}
-              :body message})
-            (proxy-super service request response)))))))
Index: trapperkeeper-metrics-clojure/src/clj/puppetlabs/trapperkeeper/services/metrics/metrics_core.clj
===================================================================
--- trapperkeeper-metrics-clojure.orig/src/clj/puppetlabs/trapperkeeper/services/metrics/metrics_core.clj
+++ trapperkeeper-metrics-clojure/src/clj/puppetlabs/trapperkeeper/services/metrics/metrics_core.clj
@@ -14,8 +14,6 @@
             [puppetlabs.ring-middleware.utils :as ringutils]
             [puppetlabs.trapperkeeper.services.metrics.metrics-utils
              :as metrics-utils]
-            [puppetlabs.trapperkeeper.services.metrics.jolokia
-             :as jolokia]
             [puppetlabs.kitchensink.core :as ks]
             [puppetlabs.i18n.core :as i18n :refer [trs tru]]))
 
@@ -25,16 +23,11 @@
 (def JmxReporterConfig
   {:enabled schema/Bool})
 
-(def JolokiaApiConfig
-  {(schema/optional-key :enabled) schema/Bool
-   (schema/optional-key :servlet-init-params) jolokia/JolokiaConfig})
-
 (def MbeansApiConfig
   {(schema/optional-key :enabled) schema/Bool})
 
 (def WebserviceConfig
-  {(schema/optional-key :mbeans) MbeansApiConfig
-   (schema/optional-key :jolokia) JolokiaApiConfig})
+  {(schema/optional-key :mbeans) MbeansApiConfig})
 
 (def BaseGraphiteReporterConfig
   {:host schema/Str
Index: trapperkeeper-metrics-clojure/src/clj/puppetlabs/trapperkeeper/services/metrics/metrics_service.clj
===================================================================
--- trapperkeeper-metrics-clojure.orig/src/clj/puppetlabs/trapperkeeper/services/metrics/metrics_service.clj
+++ trapperkeeper-metrics-clojure/src/clj/puppetlabs/trapperkeeper/services/metrics/metrics_service.clj
@@ -3,7 +3,6 @@
             [puppetlabs.trapperkeeper.services.authorization.authorization-service :as tk-auth]
             [puppetlabs.trapperkeeper.services.protocols.metrics :as metrics]
             [puppetlabs.trapperkeeper.services.metrics.metrics-core :as core]
-            [puppetlabs.trapperkeeper.services.metrics.jolokia :as jolokia]
             [puppetlabs.trapperkeeper.services :as tk-services]
             [clojure.tools.logging :as log]
             [schema.core :as schema]
@@ -69,25 +68,6 @@
       (add-ring-handler this
                         (core/build-handler (get-route this))))
 
-    (when (get-in-config [:metrics :metrics-webservice :jolokia :enabled] true)
-      (let [config (->> (get-in-config [:metrics :metrics-webservice :jolokia :servlet-init-params] {})
-                        jolokia/create-servlet-config)
-            ;; NOTE: Normally, these route and server lookups would be done by
-            ;; WebroutingService/add-servlet-handler, but that doesn't properly
-            ;; mount sub-paths at the moment (TK-420). So we explicitly compute
-            ;; these items and use WebserverService/add-servlet-handler instead.
-            route (str (get-route this) "/v2")
-            server (get-server this)
-            options (if (nil? server)
-                      {:servlet-init-params config}
-                      {:servlet-init-params config :server-id (keyword server)})
-            auth-service (tk-services/maybe-get-service this :AuthorizationService)
-            auth-check-fn (if auth-service (partial tk-auth/authorization-check auth-service))]
-        (add-servlet-handler
-         (jolokia/create-servlet auth-check-fn)
-         route
-         options)))
-
     context)
 
   (stop [this context] context))
Index: trapperkeeper-metrics-clojure/test/puppetlabs/trapperkeeper/services/metrics/metrics_service_test.clj
===================================================================
--- trapperkeeper-metrics-clojure.orig/test/puppetlabs/trapperkeeper/services/metrics/metrics_service_test.clj
+++ trapperkeeper-metrics-clojure/test/puppetlabs/trapperkeeper/services/metrics/metrics_service_test.clj
@@ -120,24 +120,7 @@
          (is (= 200 (:status resp)))
          (doseq [[metric path] body
                  :let [resp (http-client/get (str "http://localhost:8180/metrics/v1" path))]]
-           (is (= 200 (:status resp)))))
-
-       (let [resp (http-client/get "http://localhost:8180/metrics/v2/list")
-             body (parse-response resp)]
-         (is (= 200 (:status  resp)))
-         (doseq [[namesp mbeans] (get body "value") mbean (keys mbeans)
-                 :let [url (str "http://localhost:8180/metrics/v2/read/"
-                                (jolokia-encode (str namesp ":" mbean))
-                                ;; NOTE: Some memory pools intentionally don't
-                                ;; implement MBean attributes. This results
-                                ;; in an error being thrown when those
-                                ;; attributes are read and is expected.
-                                "?ignoreErrors=true")
-                       resp (http-client/get url)
-                       body (parse-response resp)]]
-           ;; NOTE: Jolokia returns 200 OK for most responses. The actual
-           ;; status code is in the JSON payload that makes up the body.
-           (is (= 200 (get body "status"))))))
+           (is (= 200 (:status resp))))))
 
       (testing "register should add a metric to the registry with a keyword domain"
         (let [svc (app/get-service app :MetricsService)
@@ -196,34 +179,7 @@
                       {:body "{\"malformed json"})
                 body (slurp (:body resp))]
             (is (= 400 (:status resp)))
-            (is (re-find #"Unexpected end-of-input" body)))
-
-          (let [resp (http-client/post
-                      "http://localhost:8180/metrics/v2"
-                      {:body (json/generate-string
-                               [{:type "read" :mbean "pl.other.reg:name=puppetlabs.localhost.foo"}
-                                {:type "read" :mbean "pl.other.reg:name=puppetlabs.localhost.bar"}])})
-                body (parse-response resp true)]
-            (is (= [200 200] (map :status body)))
-            (is (= [{:Value 2} {:Value 500}] (map :value body))))))
-
-      (testing "metrics/v2 should deny write requests"
-        (with-test-logging
-          (let [resp (http-client/get
-                       (str "http://localhost:8180/metrics/v2/write/"
-                            (jolokia-encode "java.lang:type=Memory")
-                            "/Verbose/true"))
-                body (parse-response resp)]
-            (is (= 403 (get body "status"))))))
-
-      (testing "metrics/v2 should deny exec requests"
-        (with-test-logging
-          (let [resp (http-client/get
-                       (str "http://localhost:8180/metrics/v2/exec/"
-                            (jolokia-encode "java.util.logging:type=Logging")
-                            "/getLoggerLevel/root"))
-                body (parse-response resp)]
-            (is (= 403 (get body "status")))))))))
+            (is (re-find #"Unexpected end-of-input" body))))))))
 
 (deftest metrics-service-with-tk-auth
   (testing "tk-auth works when included in bootstrap"
@@ -232,9 +188,11 @@
       (conj services authorization-service/authorization-service)
       (merge metrics-service-config auth-config ssl-webserver-config)
       (let [resp (http-client/get "https://localhost:8180/metrics/v2/list" ssl-opts)]
-        (is (= 200 (:status resp))))
+        ; 404 since jolokia support is disabled
+        (is (= 404 (:status resp))))
       (let [resp (http-client/get "https://localhost:8180/metrics/v2" ssl-opts)]
-        (is (= 403 (:status resp)))))))
+        ; 404 since jolokia support is disabled
+        (is (= 404 (:status resp)))))))
 
 (deftest metrics-v1-endpoint-disabled-by-default
   (testing "metrics/v1 is disabled by default, returns 404"
@@ -248,38 +206,6 @@
         (let [resp (http-client/get "http://localhost:8180/metrics/v1/mbeans")]
           (is (= 404 (:status resp)))))))
 
-(deftest metrics-endpoint-with-jolokia-disabled-test
-  (testing "metrics/v2 returns 404 when Jolokia is not enabled"
-    (let [config (assoc-in metrics-service-config [:metrics :metrics-webservice :jolokia :enabled] false)]
-      (with-app-with-config
-       app
-       [jetty9-service/jetty9-service
-        webrouting-service/webrouting-service
-        metrics-service
-        metrics-webservice]
-       config
-        (let [resp (http-client/get "http://localhost:8180/metrics/v2/version")]
-          (is (= 404 (:status resp))))))))
-
-(deftest metrics-endpoint-with-permissive-jolokia-policy
-  (testing "metrics/v2 allows exec requests when configured with a permissive policy"
-    (let [config (assoc-in metrics-service-config
-                           [:metrics :metrics-webservice :jolokia :servlet-init-params :policyLocation]
-                           (str "file://" test-resources-dir "/jolokia-access-permissive.xml"))]
-      (with-app-with-config
-       app
-       [jetty9-service/jetty9-service
-        webrouting-service/webrouting-service
-        metrics-service
-        metrics-webservice]
-       config
-        (let [resp (http-client/get
-                     (str "http://localhost:8180/metrics/v2/exec/"
-                          (jolokia-encode "java.util.logging:type=Logging")
-                          "/getLoggerLevel/root"))
-              body (parse-response resp)]
-          (is (= 200 (get body "status"))))))))
-
 (deftest metrics-endpoint-with-jmx-disabled-test
   (testing "returns data for jvm even when jmx is not enabled"
     (let [config (-> metrics-service-config
Index: trapperkeeper-metrics-clojure/project.clj
===================================================================
--- trapperkeeper-metrics-clojure.orig/project.clj
+++ trapperkeeper-metrics-clojure/project.clj
@@ -21,7 +21,6 @@
                  [org.clojure/tools.logging "debian"]
                  [io.dropwizard.metrics/metrics-core "debian"]
                  [io.dropwizard.metrics/metrics-graphite "debian"]
-                 [org.jolokia/jolokia-core "1.6.2"]
                  [puppetlabs/comidi "debian"]
                  [puppetlabs/i18n "debian"]