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

More tweaks to prevent duplicate plugins dependency messages in logs

parent 8993c554
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