Skip to content
Snippets Groups Projects
Unverified Commit bbfa31f4 authored by Cam Saul's avatar Cam Saul Committed by GitHub
Browse files

Merge pull request #9394 from metabase/more-duplicate-messages-fixes

More tweaks to prevent duplicate plugins dependency messages in logs
parents de28e238 b296498f
No related branches found
No related tags found
No related merge requests found
......@@ -112,7 +112,6 @@
[org.eclipse.jetty/jetty-server "9.4.14.v20181114"] ; We require JDK 8 which allows us to run Jetty 9.4, ring-jetty-adapter runs on 1.7 which forces an older version
[ring/ring-json "0.4.0"] ; Ring middleware for reading/writing JSON automatically
[stencil "0.5.0"] ; Mustache templates for Clojure
[expectations "2.2.0-beta2"]
[toucan "1.11.0-SNAPSHOT" :exclusions [org.clojure/java.jdbc honeysql]]] ; Model layer, hydration, and DB utilities
:main ^:skip-aot metabase.core
......
......@@ -19,23 +19,33 @@
(fn [_ _ dep] (dependency-type dep)))
(defmethod dependency-satisfied? :default [_ {{plugin-name :name} :info} dep]
(log/error (u/format-color 'red
(trs "Plugin {0} declares a dependency that Metabase does not understand: {1}" plugin-name dep))
(trs "Refer to the plugin manifest reference for a complete list of valid plugin dependencies:")
"https://github.com/metabase/metabase/wiki/Metabase-Plugin-Manifest-Reference")
(log/error
(u/format-color 'red
(trs "Plugin {0} declares a dependency that Metabase does not understand: {1}" plugin-name dep))
(trs "Refer to the plugin manifest reference for a complete list of valid plugin dependencies:")
"https://github.com/metabase/metabase/wiki/Metabase-Plugin-Manifest-Reference")
false)
(defonce ^:private ^{:arglists '([plugin-name message]), :doc "Warn that a plugin cannot be initialized because of
required dependencies. Subsequent calls with duplicate warnings are automatically ignored."}
warn-about-required-dependencies
(let [already-warned (atom #{})]
(fn [plugin-name message]
(let [k [plugin-name message]]
(when-not (contains? @already-warned k)
(swap! already-warned conj k)
(log/info (u/format-color 'red
(trs "Metabase cannot initialize plugin {0} due to required dependencies." plugin-name))
message))))))
(defonce ^:private already-logged (atom #{}))
(defn log-once
"Log a message a single time, such as warning that a plugin cannot be initialized because of required dependencies.
Subsequent calls with duplicate messages are automatically ignored."
{:style/indent 1}
([message]
(log-once nil message))
([plugin-name-or-nil message]
(let [k [plugin-name-or-nil message]]
(when-not (contains? @already-logged k)
(swap! already-logged conj k)
(log/info message)))))
(defn- warn-about-required-dependencies [plugin-name message]
(log-once plugin-name
(str (u/format-color 'red (trs "Metabase cannot initialize plugin {0} due to required dependencies." plugin-name))
" "
message)))
(defmethod dependency-satisfied? :class
[_ {{plugin-name :name} :info} {^String classname :class, message :message, :as dep}]
......@@ -47,15 +57,15 @@
(defmethod dependency-satisfied? :plugin
[initialized-plugin-names {{plugin-name :name} :info, :as info} {dep-plugin-name :plugin}]
(log/info (trs "Plugin ''{0}'' depends on plugin ''{1}''" plugin-name dep-plugin-name))
(log-once plugin-name (trs "Plugin ''{0}'' depends on plugin ''{1}''" plugin-name dep-plugin-name))
((set initialized-plugin-names) dep-plugin-name))
(defn- all-dependencies-satisfied?*
[initialized-plugin-names {:keys [dependencies], {plugin-name :name} :info, :as info}]
(let [dep-satisfied? (fn [dep]
(u/prog1 (dependency-satisfied? initialized-plugin-names info dep)
(log/debug
(trs "{0} dependency {1} satisfied? {2}" plugin-name (dissoc dep :message) (boolean <>)))))]
(log-once plugin-name
(trs "{0} dependency {1} satisfied? {2}" plugin-name (dissoc dep :message) (boolean <>)))))]
(every? dep-satisfied? dependencies)))
(defn all-dependencies-satisfied?
......@@ -69,8 +79,8 @@
(do
(swap! plugins-with-unsatisfied-deps conj info)
(log/debug (u/format-color 'yellow
(trs "Plugins with unsatisfied deps: {0}" (mapv (comp :name :info) @plugins-with-unsatisfied-deps))))
(log-once (u/format-color 'yellow
(trs "Plugins with unsatisfied deps: {0}" (mapv (comp :name :info) @plugins-with-unsatisfied-deps))))
false)))
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment