mirror of
https://github.com/penpot/penpot.git
synced 2025-07-29 20:17:31 +02:00
♻️ Refactor error handling on exporter browser module.
This commit is contained in:
parent
bf51e3db60
commit
0be2b2791f
9 changed files with 106 additions and 64 deletions
|
@ -6,14 +6,17 @@
|
|||
|
||||
(ns app.browser
|
||||
(:require
|
||||
["puppeteer-core" :as pp]
|
||||
["generic-pool" :as gp]
|
||||
["puppeteer-core" :as pp]
|
||||
[app.common.data :as d]
|
||||
[app.common.logging :as l]
|
||||
[app.common.uuid :as uuid]
|
||||
[app.config :as cf]
|
||||
[lambdaisland.glogi :as log]
|
||||
[promesa.core :as p]))
|
||||
|
||||
|
||||
(l/set-level! :trace)
|
||||
|
||||
;; --- BROWSER API
|
||||
|
||||
(def default-timeout 30000)
|
||||
|
@ -107,18 +110,18 @@
|
|||
(-> (pp/launch #js {:executablePath path :args #js ["--no-sandbox" "--font-render-hinting=none"]})
|
||||
(p/then (fn [browser]
|
||||
(let [id (deref pool-browser-id)]
|
||||
(log/info :origin "factory" :action "create" :browser-id id)
|
||||
(l/info :origin "factory" :action "create" :browser-id id)
|
||||
(unchecked-set browser "__id" id)
|
||||
(swap! pool-browser-id inc)
|
||||
browser))))))
|
||||
(destroy [obj]
|
||||
(let [id (unchecked-get obj "__id")]
|
||||
(log/info :origin "factory" :action "destroy" :browser-id id)
|
||||
(l/info :origin "factory" :action "destroy" :browser-id id)
|
||||
(.close ^js obj)))
|
||||
|
||||
(validate [obj]
|
||||
(let [id (unchecked-get obj "__id")]
|
||||
(log/info :origin "factory" :action "validate" :browser-id id :obj obj)
|
||||
(l/info :origin "factory" :action "validate" :browser-id id :obj obj)
|
||||
(p/resolved (.isConnected ^js obj))))]
|
||||
|
||||
#js {:create create
|
||||
|
@ -127,7 +130,7 @@
|
|||
|
||||
(defn init
|
||||
[]
|
||||
(log/info :msg "initializing browser pool")
|
||||
(l/info :msg "initializing browser pool")
|
||||
(let [opts #js {:max (cf/get :browser-pool-max 3)
|
||||
:min (cf/get :browser-pool-min 0)
|
||||
:testOnBorrow true
|
||||
|
@ -142,34 +145,74 @@
|
|||
(defn stop
|
||||
[]
|
||||
(when-let [pool (deref pool)]
|
||||
(log/info :msg "finalizing browser pool")
|
||||
(l/info :msg "finalizing browser pool")
|
||||
(-> (.drain ^js pool)
|
||||
(p/then (fn [] (.clear ^js pool))))))
|
||||
|
||||
(defn exec!
|
||||
[callback]
|
||||
(letfn [(on-release [pool browser ctx result error]
|
||||
(-> (p/do! (.close ^js ctx))
|
||||
(p/handle
|
||||
(fn [_ _]
|
||||
(.release ^js pool browser)))
|
||||
(p/handle
|
||||
(fn [_ _]
|
||||
(let [id (unchecked-get browser "__id")]
|
||||
(log/info :origin "exec" :action "release" :browser-id id))
|
||||
(if result
|
||||
(p/resolved result)
|
||||
(p/rejected error))))))
|
||||
(letfn [(release-browser [pool browser]
|
||||
(let [id (unchecked-get browser "__id")]
|
||||
(-> (p/do! (.release ^js pool browser))
|
||||
(p/handle (fn [res err]
|
||||
(l/trace :action "exec:release-browser" :browser-id id)
|
||||
(when err (js/console.log err))
|
||||
(if err
|
||||
(p/rejected err)
|
||||
(p/resolved res)))))))
|
||||
|
||||
(destroy-browser [pool browser]
|
||||
(let [id (unchecked-get browser "__id")]
|
||||
(-> (p/do! (.destroy ^js pool browser))
|
||||
(p/handle (fn [res err]
|
||||
(l/trace :action "exec:destroy-browser" :browser-id id)
|
||||
(when err (js/console.log err))
|
||||
(if err
|
||||
(p/rejected err)
|
||||
(p/resolved res)))))))
|
||||
|
||||
(handle-error [pool browser obj err]
|
||||
(let [id (unchecked-get browser "__id")]
|
||||
(if err
|
||||
(do
|
||||
(l/trace :action "exec:handle-error" :browser-id id)
|
||||
(-> (p/do! (destroy-browser pool browser))
|
||||
(p/handle #(p/rejected err))))
|
||||
(p/resolved obj))))
|
||||
|
||||
(on-result [pool browser context result]
|
||||
(let [id (unchecked-get browser "__id")]
|
||||
(l/trace :action "exec:on-result" :browser-id id)
|
||||
(-> (p/do! (.close ^js context))
|
||||
(p/handle (fn [_ err]
|
||||
(if err
|
||||
(destroy-browser pool browser)
|
||||
(release-browser pool browser))))
|
||||
(p/handle #(p/resolved result)))))
|
||||
|
||||
(on-page [pool browser context page]
|
||||
(let [id (unchecked-get browser "__id")]
|
||||
(l/trace :action "exec:on-page" :browser-id id)
|
||||
(-> (p/do! (callback page))
|
||||
(p/handle (partial handle-error pool browser))
|
||||
(p/then (partial on-result pool browser context)))))
|
||||
|
||||
(on-context [pool browser ctx]
|
||||
(-> (p/do! (.newPage ^js ctx))
|
||||
(p/then callback)
|
||||
(p/handle #(on-release pool browser ctx %1 %2))))
|
||||
(let [id (unchecked-get browser "__id")]
|
||||
(l/trace :action "exec:on-context" :browser-id id)
|
||||
(-> (p/do! (.newPage ^js ctx))
|
||||
(p/handle (partial handle-error pool browser))
|
||||
(p/then (partial on-page pool browser ctx)))))
|
||||
|
||||
(on-acquire [pool browser]
|
||||
(-> (.createIncognitoBrowserContext ^js browser)
|
||||
(p/then #(on-context pool browser %))))]
|
||||
(on-acquire [pool browser err]
|
||||
(let [id (unchecked-get browser "__id")]
|
||||
(l/trace :action "exec:on-acquire" :browser-id id)
|
||||
(if err
|
||||
(js/console.log err)
|
||||
(-> (p/do! (.createIncognitoBrowserContext ^js browser))
|
||||
(p/handle (partial handle-error pool browser))
|
||||
(p/then (partial on-context pool browser))))))]
|
||||
|
||||
(when-let [pool (deref pool)]
|
||||
(-> (p/do! (.acquire ^js pool))
|
||||
(p/then (partial on-acquire pool))))))
|
||||
(p/handle (partial on-acquire pool))))))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue