Skip to content

Commit 7b0199a

Browse files
Oana Tanasoiurbrw
authored andcommitted
(PDB-5168) Log PQL long parsing time
1 parent 436f4be commit 7b0199a

File tree

1 file changed

+15
-1
lines changed

1 file changed

+15
-1
lines changed

src/puppetlabs/puppetdb/http/query.clj

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
(:require [puppetlabs.puppetdb.cheshire :as json]
77
[clojure.java.io]
88
[clojure.core.match :as cm]
9+
[clojure.tools.logging :as log]
910
[clojure.walk :refer [keywordize-keys stringify-keys]]
1011
[puppetlabs.puppetdb.query-eng :as qeng]
1112
[clojure.set :as set]
@@ -304,13 +305,26 @@
304305
others parsed))))
305306
parsed)))
306307

308+
(defn time-and-parse-pql
309+
"Time how long it takes to transform a PQL query to AST, if the time
310+
is greater than 1s, a warning is logged. Returns the transformed
311+
query."
312+
[query]
313+
(let [start (System/nanoTime)
314+
result (pql/parse-pql-query query)
315+
elapsed (/ (- (System/nanoTime) start) 1000000.0)
316+
max-pql-limit 1000]
317+
(when (> elapsed max-pql-limit)
318+
(log/warn (trs "Parsing PQL took {0} ms: {1}" elapsed (pr-str query))))
319+
result))
320+
307321
(defn parse-json-or-pql-to-ast
308322
"Parse a query string either as JSON or PQL to transform it to AST"
309323
[query]
310324
(when query
311325
(if (re-find #"^\s*\[" query)
312326
(parse-json-query query)
313-
(pql/parse-pql-query query))))
327+
(time-and-parse-pql query))))
314328

315329
(defn get-req->query
316330
"Converts parameters of a GET request to a pdb query map"

0 commit comments

Comments
 (0)