further cleanup and lock-down of required deps for views

This commit is contained in:
Jaromil 2018-10-14 13:26:50 +02:00
parent 687dec948e
commit f28dcb2888
2 changed files with 49 additions and 50 deletions

View File

@ -71,6 +71,8 @@
(= tclass "is-success") (log/info msg) (= tclass "is-success") (log/info msg)
(= tclass "is-primary") (log/debug msg)) (= tclass "is-primary") (log/debug msg))
[:div {:class (str "notification " tclass " has-text-centered")} msg]))) [:div {:class (str "notification " tclass " has-text-centered")} msg])))
;; shortcut
(defn error [msg fail] (notify (str msg " :: " (f/message fail)) "is-danger"))
(defn render (defn render
"render a full webpage using headers, navbar, body and footer" "render a full webpage using headers, navbar, body and footer"
@ -82,4 +84,4 @@
(resource head) (resource head)
(conj body (resource footer)))})) (conj body (resource footer)))}))
(defn render-error [err] (->> "is-danger" (notify (log/spy :error err)) render)) (defn render-error [err] (->> "is-danger" (notify err) render))

View File

@ -23,20 +23,17 @@
[clojure.contrib.humanize :as humanize :refer [datetime]] [clojure.contrib.humanize :as humanize :refer [datetime]]
;; [clojure.data.json :as json :refer [read-str]] ;; [clojure.data.json :as json :refer [read-str]]
[toaster.bulma :as web :refer [button render-yaml]] [toaster.bulma :as web :refer [button render-yaml]]
[toaster.session :as s] [toaster.session :as s :refer [notify resource param]]
[toaster.ring :as ring] [toaster.ring :as ring :refer [jobs]]
[toaster.jobs :as job] [toaster.jobs :as job :refer [add sync_jobs]]
[failjure.core :as f] [failjure.core :as f :refer [attempt-all when-failed if-let-ok?]]
[auxiliary.string :refer [strcasecmp]] [auxiliary.string :refer [strcasecmp]]
[toaster.config :as conf] [toaster.config :refer [q]]
[taoensso.timbre :as log :refer [debug]] [taoensso.timbre :as log]
[me.raynes.conch :as sh :refer [with-programs]] ;; [clj-time.core :as time]
[clj-time.core :as time]
[clj-time.coerce :as tc] [clj-time.coerce :as tc]
[clj-time.local :as tl]
[clj-storage.core :as db] [clj-storage.core :as db]
[hiccup.form :as hf] [hiccup.form :as hf]))
[clostache.parser :refer [render-resource]]))
;; TODO: templated ;; TODO: templated
(defn- box-list [account joblist] (defn- box-list [account joblist]
@ -64,45 +61,45 @@
))]]]) ))]]])
(defn dockerfile-upload-post [request config account] (defn dockerfile-upload-post [request config account]
(let (f/attempt-all
[tempfile (get-in request [:params :file :tempfile]) [tempfile (s/param request [:file :tempfile])
filename (get-in request [:params :file :filename]) filename (s/param request [:file :filename])
params (:params request)] filesize (s/param request [:file :size])]
(cond (cond
(> (get-in params [:file :size]) 64000) (> filesize 64000)
;; max upload size in bytes ;; TODO: put filesize limit in config
;; TODO: put in config (s/notify "File too big in upload (64KB limit)" "is-danger")
(f/fail "File too big in upload (64KB limit).") :else
:else (let [file (io/copy tempfile (io/file "/tmp" filename))
(let [file (io/copy tempfile (io/file "/tmp" filename)) path (str "/tmp/" filename)]
path (str "/tmp/" filename)] (io/delete-file tempfile)
(io/delete-file tempfile) (if (not (.exists (io/file path)))
(if (not (.exists (io/file path))) (s/notify (str "Uploaded file not found: " filename) "is-danger")
(f/fail ;; file is now in 'tmp' var
(str "Uploaded file not found: " filename)) (f/if-let-ok? [newjob (job/add path config account)]
;; file is now in 'tmp' var [:div {:class "container"}
(f/if-let-ok? [newjob (job/add path config account)] [:h1 {:class "title"} "Job uploaded and added"]
[:div {:class "container"} [:p "Log messages:"]
[:h1 {:class "title"} "Job uploaded and added"] (web/render-yaml newjob)]
[:p "Log messages:"] ;; else when job/add is not-ok
(web/render-yaml newjob)] (s/error "Error adding job" newjob)))))
(s/notify (f/message newjob) "is-error"))))))) (f/when-failed [e]
(s/error "Upload file error" e))))
(defn dashboard (defn dashboard
([account] (dashboard {} {} account)) ([account] (dashboard {} {} account))
([request config account] ([request config account]
(f/attempt-all (f/attempt-all
[joblist (db/query @ring/jobs {:email (:email account)})] [joblist (db/query @ring/jobs {:email (:email account)})]
[:div {:class "container has-text-centered"} [:div {:class "container has-text-centered"}
[:span [:span
;(if (> 0 (count joblist)) ;(if (> 0 (count joblist))
(box-list account joblist) (box-list account joblist)
;) ;)
(s/resource "templates/body_addjob.html") ]] (s/resource "templates/body_addjob.html") ]]
(f/when-failed [e] (f/when-failed [e]
(s/notify (s/error "Job list failure" e)))))
(str "Job list failure: " (f/message e)) "is-error")))))
(defn remove-job [request config account] (defn remove-job [request config account]
(f/attempt-all (f/attempt-all
@ -112,7 +109,7 @@
r_sync (job/sync_jobs config "-d" jobid)] r_sync (job/sync_jobs config "-d" jobid)]
(s/notify (str "Job removed: " jobid) "is-primary") (s/notify (str "Job removed: " jobid) "is-primary")
(f/when-failed [e] (f/when-failed [e]
(s/notify (str "Failure removing job: " (f/message e)) "is-error")))) (s/error "Failure removing job" e))))
(defn start-job [request config account] (defn start-job [request config account]
(f/attempt-all (f/attempt-all
@ -121,7 +118,7 @@
r_sync (job/sync_jobs config "-r" jobid)] r_sync (job/sync_jobs config "-r" jobid)]
(s/notify (str "Job started: " jobid) "is-success") (s/notify (str "Job started: " jobid) "is-success")
(f/when-failed [e] (f/when-failed [e]
(s/notify (str "Failure starting job: " (f/message e)) "is-error")))) (s/error "Failure starting job" e))))
(defn view-job [request config account] (defn view-job [request config account]
(f/attempt-all (f/attempt-all
@ -133,5 +130,5 @@
[:form [:textarea {:id "code" :name "code" } dockerfile]] [:form [:textarea {:id "code" :name "code" } dockerfile]]
[:script "var editor = CodeMirror.fromTextArea(document.getElementById(\"code\"), [:script "var editor = CodeMirror.fromTextArea(document.getElementById(\"code\"),
{ lineNumbers: true, mode: \"dockerfile\" });"]] { lineNumbers: true, mode: \"dockerfile\" });"]]
(f/when-failed [e] (f/when-failed [e]
(s/notify (str "Failure viewing job: " (f/message e)) "is-error")))) (s/error "Failure viewing job" e))))