From f8881b3c729b4397664f683c7d30fbdc0c44ecbc Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Thu, 2 Jul 2020 10:40:58 +0200 Subject: [PATCH] :sparkles: Adapt exporter app to deployment related chages. --- exporter/src/app/browser.cljs | 4 ++- exporter/src/app/config.cljs | 2 +- exporter/src/app/http.cljs | 6 +++-- exporter/src/app/http/screenshot.cljs | 35 ++++++++++++++++++++++----- 4 files changed, 37 insertions(+), 10 deletions(-) diff --git a/exporter/src/app/browser.cljs b/exporter/src/app/browser.cljs index 442c1e357a..2e22a30210 100644 --- a/exporter/src/app/browser.cljs +++ b/exporter/src/app/browser.cljs @@ -54,7 +54,9 @@ :incognito (.-CONCURRENCY_CONTEXT ^js ppc/Cluster) :page (.-CONCURRENCY_PAGE ^js ppc/Cluster)) opts #js {:concurrency ccst - :maxConcurrency concurrency}] + :maxConcurrency concurrency + :puppeteerOptions #js {:args #js ["--no-sandbox" + "--explicitly-allowed-ports=6000"]}}] (.launch ^js ppc/Cluster opts)))) (defn stop! diff --git a/exporter/src/app/config.cljs b/exporter/src/app/config.cljs index 20e139cb81..a4996917e0 100644 --- a/exporter/src/app/config.cljs +++ b/exporter/src/app/config.cljs @@ -17,4 +17,4 @@ (js/Object.keys env))))) (defonce config - {:domain (:app-domain env "localhost:3449")}) + {:public-uri (:app-public-uri env "http://localhost:3449")}) diff --git a/exporter/src/app/http.cljs b/exporter/src/app/http.cljs index ee6273342d..bd4add2a1d 100644 --- a/exporter/src/app/http.cljs +++ b/exporter/src/app/http.cljs @@ -3,7 +3,8 @@ [promesa.core :as p] [lambdaisland.glogi :as log] [app.browser :as bwr] - [app.http.screenshot :refer [bitmap-handler]] + [app.http.screenshot :refer [bitmap-handler + page-handler]] [app.util.transit :as t] [reitit.core :as r] [cuerdas.core :as str] @@ -90,7 +91,8 @@ (def routes [["/export" - ["/bitmap" {:handler bitmap-handler}]]]) + ["/bitmap" {:handler bitmap-handler}] + ["/page" {:handler page-handler}]]]) (defn- router-handler [router] diff --git a/exporter/src/app/http/screenshot.cljs b/exporter/src/app/http/screenshot.cljs index d8582f3ed9..feed7fe04c 100644 --- a/exporter/src/app/http/screenshot.cljs +++ b/exporter/src/app/http/screenshot.cljs @@ -2,10 +2,13 @@ (:require [app.browser :as bwr] [app.config :as cfg] + [lambdaisland.glogi :as log] [cljs.spec.alpha :as s] [promesa.core :as p] [uxbox.common.exceptions :as exc :include-macros true] - [uxbox.common.spec :as us])) + [uxbox.common.spec :as us]) + (:import + goog.Uri)) (defn- load-and-screenshot [page url cookie] @@ -15,19 +18,24 @@ (bwr/navigate! page url) (bwr/sleep page 500) (.evaluate page (js* "() => document.body.style.background = 'transparent'")) + ;; (.screenshot ^js page #js {:omitBackground true :fullPage true}) (p/let [dom (.$ page "#screenshot")] (.screenshot ^js dom #js {:omitBackground true})))) (defn- take-screenshot [browser {:keys [page-id object-id token]}] (letfn [(on-browser [page] - (let [url (str "http://" (:domain cfg/config) - "/#/render-object/" - page-id "/" object-id) - cookie {:domain (:domain cfg/config) + (let [path (str "/render-object/" page-id "/" object-id) + uri (doto (Uri. (:public-uri cfg/config)) + (.setPath "/") + (.setFragment path)) + cookie {:domain (str (.getDomain uri) + ":" + (.getPort uri)) :key "auth-token" :value token}] - (load-and-screenshot page url cookie)))] + (log/info :uri (.toString uri)) + (load-and-screenshot page (.toString uri) cookie)))] (bwr/exec! browser on-browser))) (s/def ::page-id ::us/uuid) @@ -48,3 +56,18 @@ :headers {"content-type" "image/png" "content-length" (alength result)}}))))) +(defn page-handler + [{:keys [params browser] :as request}] + (letfn [(screenshot [page uri] + (p/do! + (bwr/emulate! page {:viewport [1920 1080]}) + (bwr/navigate! page uri) + (bwr/sleep page 500) + ;; (.evaluate page (js* "() => document.body.style.background = 'transparent'")) + (.screenshot ^js page #js {:omitBackground false})))] + (p/let [uri (get-in params [:query :uri]) + sht (bwr/exec! browser #(screenshot % uri))] + {:status 200 + :body sht + :headers {"content-type" "image/png" + "content-length" (alength sht)}})))