From 304affdeb4b4fa59bff48fea8bb0c10b2a2b4f2f Mon Sep 17 00:00:00 2001 From: Jan Triska Date: Wed, 15 Mar 2017 00:38:06 +0100 Subject: [PATCH 1/4] Notification of riemann on create, modify, or destroy session/node --- example-config.clj | 4 ++- project.clj | 3 +- src/clj/shale/core.clj | 6 ++-- src/clj/shale/nodes.clj | 29 ++++++++++++++++-- src/clj/shale/riemann.clj | 54 ++++++++++++++++++++++++++++++++ src/clj/shale/sessions.clj | 61 +++++++++++++++++++++++++++++++------ test-config.clj | 3 +- test/shale/test/client.clj | 9 ++++-- test/shale/test/handler.clj | 9 ++++-- test/shale/test/proxies.clj | 10 ++++-- test/shale/test/utils.clj | 24 +++++++++++++-- 11 files changed, 186 insertions(+), 26 deletions(-) create mode 100644 src/clj/shale/riemann.clj diff --git a/example-config.clj b/example-config.clj index 38e2976..fc7dc09 100644 --- a/example-config.clj +++ b/example-config.clj @@ -76,5 +76,7 @@ } - + ;; options for riemann client + :riemann {:host "localhost" + :port 6666} } diff --git a/project.clj b/project.clj index 5ad8bd6..253b78a 100644 --- a/project.clj +++ b/project.clj @@ -46,7 +46,8 @@ [secretary "1.2.3"] [slingshot "0.12.2"] [sonian/carica "1.1.0" :exclusions [cheshire]] - [venantius/accountant "0.1.7" :exclusions [org.clojure/tools.reader]]] + [venantius/accountant "0.1.7" :exclusions [org.clojure/tools.reader]] + [riemann "0.2.12" :exclusions [org.jsoup/jsoup io.netty/netty]]] :exclusions [cheshire] :scm {:name "git" :url "http://github.com/cardforcoin/shale"} diff --git a/src/clj/shale/core.clj b/src/clj/shale/core.clj index d75146e..8dfe1ef 100644 --- a/src/clj/shale/core.clj +++ b/src/clj/shale/core.clj @@ -12,6 +12,7 @@ [shale.proxies :as proxies] [shale.sessions :as sessions] [shale.utils :refer (maybe-resolve-env-keyword) ] + [shale.riemann :as riemann] [system.components.repl-server :refer [new-repl-server]] [ring.adapter.jetty :as jetty]) (:import clojure.lang.IPersistentMap @@ -59,11 +60,12 @@ (defn get-app-system-keyvals [conf] [:config conf :redis-conn (get-redis-config conf) + :riemann (riemann/new-riemann conf) :logger (component/using (logging/new-logger) [:config]) :node-pool (component/using (nodes/new-node-pool conf) - [:redis-conn :logger ]) + [:redis-conn :logger :riemann]) :session-pool (component/using (sessions/new-session-pool conf) - [:redis-conn :node-pool :proxy-pool :logger]) + [:redis-conn :node-pool :proxy-pool :logger :riemann]) :proxy-pool (component/using (proxies/new-proxy-pool) [:config :redis-conn :logger]) :app (component/using (handler/new-app) diff --git a/src/clj/shale/nodes.clj b/src/clj/shale/nodes.clj index b7dcc69..d5bf43e 100644 --- a/src/clj/shale/nodes.clj +++ b/src/clj/shale/nodes.clj @@ -8,7 +8,8 @@ [shale.logging :as logging] [shale.node-providers :as node-providers] [shale.redis :as redis] - [shale.utils :refer :all]) + [shale.utils :refer :all] + [shale.riemann :as riemann]) (:import java.util.UUID)) (deftype ConfigNodeProvider []) @@ -35,7 +36,7 @@ {:node-list nodes} (node-providers/new-default-node-provider nodes) _ (node-providers/new-default-node-provider ["http://localhost:5555/wd/hub"]))) -(s/defrecord NodePool +(defrecord NodePool [redis-conn logger node-provider @@ -97,6 +98,11 @@ id :- s/Str] (redis/model-exists? (:redis-conn pool) redis/NodeInRedis id)) +(riemann/defriemann-sender notify-node-modify pool + [id max-sessions] + {:state "ok" + :tags (into [] tags)}) + (s/defn modify-node :- NodeView "Modify a node's url or tags in Redis." [pool :- NodePool @@ -115,8 +121,14 @@ (if url {:url (str url)}) (if max-sessions {:max-sessions max-sessions}))) (when tags (redis/sset-all node-tags-key tags)) + (notify-node-modify) (car/return (view-model pool id)))))) +(riemann/defriemann-sender notify-node-create pool + [id max-sessions] + {:state "ok" + :tags (into [] tags)}) + (s/defn ^:always-validate create-node :- NodeView "Create a node in a given pool." [pool :- NodePool @@ -128,10 +140,16 @@ (let [id (gen-uuid) node-key (redis/model-key redis/NodeInRedis id)] (car/sadd (redis/model-ids-key redis/NodeInRedis) id) + (let [tags (into [] tags)] + (notify-node-create)) (car/return (modify-node pool id {:url url :tags tags :max-sessions max-sessions})))))) +(riemann/defriemann-sender notify-node-destroy pool + [id] + {:state "expired"}) + (s/defn ^:always-validate destroy-node [pool :- NodePool id :- s/Str] @@ -143,7 +161,8 @@ (node-providers/remove-node (:node-provider pool) url))) (finally (redis/delete-model! (:redis-conn pool) redis/NodeInRedis id) - (car/del (redis/node-tags-key id))))) + (car/del (redis/node-tags-key id)) + (notify-node-destroy)))) true) (defn ^:private to-set [s] @@ -151,6 +170,10 @@ (def ^:private refresh-nodes-lock {}) +;; TODO +;; - How should refresh riemann event look like? +;; - Should it send also destroy and create event? + (s/defn refresh-nodes "Syncs the node list with the backing node provider." [pool :- NodePool] diff --git a/src/clj/shale/riemann.clj b/src/clj/shale/riemann.clj new file mode 100644 index 0000000..50fc564 --- /dev/null +++ b/src/clj/shale/riemann.clj @@ -0,0 +1,54 @@ +(ns shale.riemann + (require [riemann.client :as riemann] + [shale.logging :as logging] + [com.stuartsierra.component :as component])) + +(defrecord Riemann [config client] + component/Lifecycle + (start [cmp] + (logging/info "Starting the riemann client...") + (assoc cmp :client (riemann/tcp-client (:riemann config)))) + (stop [cmp] + (logging/info "Stopping the riemann client...") + (assoc cmp :client nil))) + +(defn new-riemann [config] + (map->Riemann {:config config})) + +(defn send-event [riemann m] + (let [cl (:client riemann) + ev (assoc m :service "shale")] + (logging/debug (str "Sended to riemann: " ev)) + @(riemann/send-event cl ev))) + +;; Macro for defining riemann sender where symbs are symbols that +;; represent keys appended to event where values are taken as their +;; lexical bindings. +;; +;; If we have +;; +;; (defriemann-sender notify [obj id name] +;; {:state "ok" +;; :metric (/ time 1000) +;; :number 1}) +;; +;; Then +;; +;; (let [id 13 +;; time 2000] +;; (notify)) +;; +;; sends {:service "shale" +;; :id "13" +;; :state "ok" +;; :metric 2 +;; :number "1"} + +(defmacro defriemann-sender [name riemann-container [& symbs] & [mapping]] + (let [maybe-pair (fn [symb] `(when ~symb {~(keyword symb) ~symb})) + event (if (empty? symbs) + mapping + `(merge ~@(map maybe-pair symbs) + ~mapping))] + `(defmacro ~name [] + `(send-event (:riemann ~'~riemann-container) ~'~event)))) diff --git a/src/clj/shale/sessions.clj b/src/clj/shale/sessions.clj index d022fee..9318d93 100644 --- a/src/clj/shale/sessions.clj +++ b/src/clj/shale/sessions.clj @@ -24,7 +24,8 @@ resume-webdriver maybe-add-no-sandbox to-async - webdriver-capabilities]]) + webdriver-capabilities]] + [shale.riemann :as riemann]) (:import org.openqa.selenium.WebDriverException org.openqa.selenium.remote.UnreachableBrowserException org.xbill.DNS.Type @@ -128,11 +129,15 @@ (declare view-model view-model-exists? view-models view-model-ids resume-webdriver-from-id destroy-session) +(riemann/defriemann-sender notify-session-create-error pool + [] + {:state "error"}) + (defn start-webdriver! "Create a webdriver. Optionally specify a timeout in milliseconds. Throws an exception on timeout, but blocks forever by default." - [node capabilities & {:keys [timeout]}] + [pool node capabilities & {:keys [timeout]}] (logging/infof "start-webdriver! %s" node) (let [future-wd (future (new-webdriver node capabilities)) wd (if (or (nil? timeout) (= 0 timeout)) @@ -141,7 +146,7 @@ (if (= wd ::timeout) (do (future-cancel future-wd) - ;; TODO send to riemann + (notify-session-create-error) (logging/warn (format "Timeout starting new webdriver on node %s" node)) @@ -151,6 +156,10 @@ :node-url node}))) wd))) +(riemann/defriemann-sender notify-session-resume-error pool + [id] + {:state "error"}) + (defn resume-webdriver-from-id "Resume and return a web driver from a session id (versus a webdriver id). Optionally include a timeout, in milliseconds. @@ -172,7 +181,7 @@ (if (= wd ::timeout) (do (future-cancel future-wd) - ;; TODO send to riemann + (notify-session-resume-error) (logging/warn (format "Timeout resuming session %s after %d ms against node %s" webdriver-id @@ -184,6 +193,7 @@ :timeout timeout :node-url node-url}))) wd)) + ;; TODO Send riemann event for this? (throw (ex-info "Unknown session id." {:session-id id})))) @@ -257,6 +267,10 @@ :add (clojure.set/union #{tag} tags) :remove (disj tags tag)))) +(riemann/defriemann-sender notify-session-modify pool + [id tags reserved] + {:state "ok"}) + (s/defn ^:always-validate modify-session :- (s/maybe SessionView) "Modify an existing session." [pool :- SessionPool @@ -284,7 +298,9 @@ {:tags new-tags}))] (if (or (not go-to-url) (session-go-to-url-or-destroy-session id go-to-url)) - (save-session-diff-to-redis pool id session-diff))) + (save-session-diff-to-redis pool id session-diff)) + (let [{:keys [tags reserved]} session-diff] + (notify-session-modify))) (view-model pool id))) (s/defn ^:always-validate get-node-or-err :- nodes/NodeView @@ -292,6 +308,7 @@ node-req :- (s/maybe nodes/NodeRequirement)] (let [node (nodes/get-node pool node-req)] (when (nil? node) + (notify-session-create-error) (throw (ex-info "No suitable node found!" {:user-visible true :status 503}))) @@ -312,16 +329,20 @@ :reserved false :proxy-id nil}) +(riemann/defriemann-sender notify-session-create pool + [id tags reserved browser-name node-id] + {:state "ok"}) + (s/defn ^:always-validate create-session :- SessionView [pool :- SessionPool options :- CreateArg] (logging/info (format "Creating a new session.\nOptions: %s" (pretty options))) - - (if (= 0 (count (nodes/nodes-under-capacity (:node-pool pool)))) + (when (= 0 (count (nodes/nodes-under-capacity (:node-pool pool)))) + (notify-session-create-error) (throw - (ex-info "All nodes are over capacity!" - {:user-visible true :status 503}))) + (ex-info "All nodes are over capacity!" + {:user-visible true :status 503}))) (let [{:keys [browser-name capabilities node-require @@ -356,11 +377,17 @@ requested-capabilities) id (gen-uuid) wd (start-webdriver! + pool (:url node) requested-capabilities :timeout (:start-webdriver-timeout pool)) webdriver-id (remote-webdriver/session-id wd) actual-capabilities (webdriver-capabilities wd)] +<<<<<<< HEAD +======= + (let [node-id (:id node)] + (notify-session-create)) +>>>>>>> 1a7f91d... Notification of riemann on create, modify, or destroy session/node (last (car/wcar (:redis-conn pool) (car/sadd (redis/model-ids-key redis/SessionInRedis) id) @@ -451,6 +478,9 @@ modifications) candidate))))) +;; TODO +;; - Send riemann error event for following catches? + (s/defn ^:always-validate destroy-webdriver! [pool :- SessionPool webdriver-id :- s/Str @@ -504,6 +534,10 @@ (when immediately (deref deferred)))) +(riemann/defriemann-sender notify-session-destroy pool + [id] + {:state "expired"}) + (defn destroy-session [pool id & {:keys [immediately] :or {immediately true}}] (s/validate SessionPool pool) @@ -526,7 +560,12 @@ webdriver-id node-url (boolean immediately) +<<<<<<< HEAD hard-delete)))) +======= + hard-delete) + (notify-session-destroy)))) +>>>>>>> 1a7f91d... Notification of riemann on create, modify, or destroy session/node true) (def view-model-defaults {:current-url nil @@ -579,6 +618,10 @@ (filter #(= (:webdriver-id %) webdriver-id)) first)) +;; TODO +;; - How should refresh riemann event look like? +;; - Should it send also destroy and create event? + (s/defn ^:always-validate refresh-session [pool :- SessionPool id :- s/Str] diff --git a/test-config.clj b/test-config.clj index b94a7b4..919a7ca 100644 --- a/test-config.clj +++ b/test-config.clj @@ -2,4 +2,5 @@ :node-max-sessions 6 :port 5000 :webdriver-timeout 3000 - :start-webdriver-timeout 5000} + :start-webdriver-timeout 5000 + :riemann {:host "localhost" :port 6666}} diff --git a/test/shale/test/client.clj b/test/shale/test/client.clj index 51b6a44..52850d9 100644 --- a/test/shale/test/client.clj +++ b/test/shale/test/client.clj @@ -4,8 +4,10 @@ [clj-webdriver.taxi :refer [execute-script]] [shale.client :refer :all] [shale.test.utils :refer [with-selenium-servers + with-riemann-server local-port-available? - clear-redis]] + clear-redis] + :as utils] [shale.nodes :refer [refresh-nodes]] [shale.configurer :refer [get-config]] [shale.core :refer [get-shale-system init-cheshire]] @@ -59,7 +61,10 @@ (finally (shale.client/destroy-sessions!)))) -(use-fixtures :once (with-selenium-servers [4443 4444]) server-fixture) +(use-fixtures :once + (with-selenium-servers [4443 4444]) + (with-riemann-server) + server-fixture) (use-fixtures :each delete-sessions-fixture) (defn session-count [] diff --git a/test/shale/test/handler.clj b/test/shale/test/handler.clj index 4a84996..c4376b0 100644 --- a/test/shale/test/handler.clj +++ b/test/shale/test/handler.clj @@ -5,12 +5,16 @@ [com.stuartsierra.component :as component] [shale.utils :refer [gen-uuid]] [shale.test.utils :refer [with-selenium-servers - with-clean-redis]] + with-clean-redis + with-riemann-server] + :as utils] [shale.core :refer [get-app-system]])) ; the config we'll be testing + (def system - (get-app-system {:node-list ["http://localhost:4444/wd/hub"]})) + (get-app-system {:node-list ["http://localhost:4444/wd/hub"] + :riemann utils/riemann-test-conf})) (defn start-stop-system [test-fn] (alter-var-root #'system component/start) @@ -21,6 +25,7 @@ (def once-fixtures [(with-selenium-servers [4444]) + (with-riemann-server) start-stop-system]) (def each-fixtures diff --git a/test/shale/test/proxies.clj b/test/shale/test/proxies.clj index 5ead8ab..7668266 100644 --- a/test/shale/test/proxies.clj +++ b/test/shale/test/proxies.clj @@ -3,14 +3,18 @@ [shale.utils :refer [gen-uuid]] [shale.proxies :as proxies] [shale.test.utils :refer [with-clean-redis - with-system-from-config]])) + with-system-from-config + with-riemann-server] + :as utils])) (def system (atom nil)) (def once-fixtures - [(with-system-from-config + [with-riemann-server + (with-system-from-config system - {:node-list ["http://localhost:4444/wd/hub"]})]) + {:node-list ["http://localhost:4444/wd/hub"] + :riemann utils/riemann-test-conf})]) (def each-fixtures [(with-clean-redis system)]) diff --git a/test/shale/test/utils.clj b/test/shale/test/utils.clj index 902fc65..f23709e 100644 --- a/test/shale/test/utils.clj +++ b/test/shale/test/utils.clj @@ -2,14 +2,17 @@ (:require [clojure.java.io :refer [writer]] [taoensso.carmine :as car] [com.stuartsierra.component :as component] - [shale.core :refer [get-app-system]]) + [shale.core :refer [get-app-system]] + [riemann.core :as rc] + [riemann.transport.tcp :as rt]) (:import [org.openqa.selenium.server SeleniumServer RemoteControlConfiguration] [java.io IOException PrintStream] - java.net.Socket)) + java.net.Socket + com.aphyr.riemann.client.IRiemannClient)) (defn local-port-available? [port] (try @@ -88,3 +91,20 @@ (test-fn) (finally (clear-redis redis)))))) + +(def riemann-test-conf {:host "localhost" :port 6666}) + +(defn with-riemann-server + ([] (with-riemann-server (constantly nil))) + ([test-events] + (fn [test-fn] + (let [stream (atom []) + s (riemann.streams/append stream) + server (rt/tcp-server riemann-test-conf) + core (rc/transition! (rc/core) {:services [server] :streams [s]})] + (try + (test-fn) + (finally + (test-events @stream) + (shale.logging/debug (str "Riemann recieved: " @stream)) + (rc/stop! core))))))) From afea419dc2cc6970ec7e3ac3b4c1afd4ffde9f1f Mon Sep 17 00:00:00 2001 From: Jan Triska Date: Wed, 15 Mar 2017 01:27:16 +0100 Subject: [PATCH 2/4] Removed leftovers from merging --- src/clj/shale/sessions.clj | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/clj/shale/sessions.clj b/src/clj/shale/sessions.clj index 9318d93..8de67fb 100644 --- a/src/clj/shale/sessions.clj +++ b/src/clj/shale/sessions.clj @@ -383,11 +383,8 @@ :timeout (:start-webdriver-timeout pool)) webdriver-id (remote-webdriver/session-id wd) actual-capabilities (webdriver-capabilities wd)] -<<<<<<< HEAD -======= (let [node-id (:id node)] (notify-session-create)) ->>>>>>> 1a7f91d... Notification of riemann on create, modify, or destroy session/node (last (car/wcar (:redis-conn pool) (car/sadd (redis/model-ids-key redis/SessionInRedis) id) @@ -560,12 +557,8 @@ webdriver-id node-url (boolean immediately) -<<<<<<< HEAD - hard-delete)))) -======= hard-delete) (notify-session-destroy)))) ->>>>>>> 1a7f91d... Notification of riemann on create, modify, or destroy session/node true) (def view-model-defaults {:current-url nil From de41028b5a99bc40f44658a0d12ed0a63c14bfdb Mon Sep 17 00:00:00 2001 From: Jan Triska Date: Fri, 17 Mar 2017 16:56:31 +0100 Subject: [PATCH 3/4] defriemann-sender macro replaced with fns --- src/clj/shale/nodes.clj | 36 +++++++++++--------- src/clj/shale/riemann.clj | 31 ----------------- src/clj/shale/sessions.clj | 68 ++++++++++++++++++++++++-------------- test/shale/test/utils.clj | 2 +- 4 files changed, 66 insertions(+), 71 deletions(-) diff --git a/src/clj/shale/nodes.clj b/src/clj/shale/nodes.clj index d5bf43e..ce82764 100644 --- a/src/clj/shale/nodes.clj +++ b/src/clj/shale/nodes.clj @@ -38,6 +38,7 @@ (defrecord NodePool [redis-conn + riemann logger node-provider default-session-limit @@ -98,10 +99,13 @@ id :- s/Str] (redis/model-exists? (:redis-conn pool) redis/NodeInRedis id)) -(riemann/defriemann-sender notify-node-modify pool - [id max-sessions] - {:state "ok" - :tags (into [] tags)}) +(defn notify-node-modify [pool id tags max-sessions] + (riemann/send-event + (:riemann pool) + {:id id + :max-sessions max-sessions + :state "ok" + :tags tags})) (s/defn modify-node :- NodeView "Modify a node's url or tags in Redis." @@ -121,13 +125,14 @@ (if url {:url (str url)}) (if max-sessions {:max-sessions max-sessions}))) (when tags (redis/sset-all node-tags-key tags)) - (notify-node-modify) + (notify-node-modify pool id (into [] tags) max-sessions) (car/return (view-model pool id)))))) -(riemann/defriemann-sender notify-node-create pool - [id max-sessions] - {:state "ok" - :tags (into [] tags)}) +(defn notify-node-create [pool id tags max-sessions] + {:id id + :state "ok" + :max-sessions max-sessions + :tags tags}) (s/defn ^:always-validate create-node :- NodeView "Create a node in a given pool." @@ -140,15 +145,16 @@ (let [id (gen-uuid) node-key (redis/model-key redis/NodeInRedis id)] (car/sadd (redis/model-ids-key redis/NodeInRedis) id) - (let [tags (into [] tags)] - (notify-node-create)) + (notify-node-create pool id (into [] tags) max-sessions) (car/return (modify-node pool id {:url url :tags tags :max-sessions max-sessions})))))) -(riemann/defriemann-sender notify-node-destroy pool - [id] - {:state "expired"}) +(defn notify-node-destroy [pool id] + (riemann/send-event + (:riemann pool) + {:id id + :state "expired"})) (s/defn ^:always-validate destroy-node [pool :- NodePool @@ -162,7 +168,7 @@ (finally (redis/delete-model! (:redis-conn pool) redis/NodeInRedis id) (car/del (redis/node-tags-key id)) - (notify-node-destroy)))) + (notify-node-destroy pool id)))) true) (defn ^:private to-set [s] diff --git a/src/clj/shale/riemann.clj b/src/clj/shale/riemann.clj index 50fc564..a2d9754 100644 --- a/src/clj/shale/riemann.clj +++ b/src/clj/shale/riemann.clj @@ -21,34 +21,3 @@ (logging/debug (str "Sended to riemann: " ev)) @(riemann/send-event cl ev))) -;; Macro for defining riemann sender where symbs are symbols that -;; represent keys appended to event where values are taken as their -;; lexical bindings. -;; -;; If we have -;; -;; (defriemann-sender notify [obj id name] -;; {:state "ok" -;; :metric (/ time 1000) -;; :number 1}) -;; -;; Then -;; -;; (let [id 13 -;; time 2000] -;; (notify)) -;; -;; sends {:service "shale" -;; :id "13" -;; :state "ok" -;; :metric 2 -;; :number "1"} - -(defmacro defriemann-sender [name riemann-container [& symbs] & [mapping]] - (let [maybe-pair (fn [symb] `(when ~symb {~(keyword symb) ~symb})) - event (if (empty? symbs) - mapping - `(merge ~@(map maybe-pair symbs) - ~mapping))] - `(defmacro ~name [] - `(send-event (:riemann ~'~riemann-container) ~'~event)))) diff --git a/src/clj/shale/sessions.clj b/src/clj/shale/sessions.clj index 8de67fb..7cb4d6c 100644 --- a/src/clj/shale/sessions.clj +++ b/src/clj/shale/sessions.clj @@ -37,6 +37,7 @@ (s/defrecord SessionPool [redis-conn + riemann node-pool proxy-pool logger @@ -129,9 +130,10 @@ (declare view-model view-model-exists? view-models view-model-ids resume-webdriver-from-id destroy-session) -(riemann/defriemann-sender notify-session-create-error pool - [] - {:state "error"}) +(defn notify-session-create-error [pool] + (riemann/send-event + (:riemann pool) + {:state "error"})) (defn start-webdriver! "Create a webdriver. Optionally specify a timeout in milliseconds. @@ -146,7 +148,7 @@ (if (= wd ::timeout) (do (future-cancel future-wd) - (notify-session-create-error) + (notify-session-create-error pool) (logging/warn (format "Timeout starting new webdriver on node %s" node)) @@ -156,9 +158,11 @@ :node-url node}))) wd))) -(riemann/defriemann-sender notify-session-resume-error pool - [id] - {:state "error"}) +(defn notify-session-resume-error [pool id] + (riemann/send-event + (:riemann pool) + {:id id + :state "error"})) (defn resume-webdriver-from-id "Resume and return a web driver from a session id (versus a webdriver id). @@ -181,7 +185,7 @@ (if (= wd ::timeout) (do (future-cancel future-wd) - (notify-session-resume-error) + (notify-session-resume-error pool id) (logging/warn (format "Timeout resuming session %s after %d ms against node %s" webdriver-id @@ -267,9 +271,14 @@ :add (clojure.set/union #{tag} tags) :remove (disj tags tag)))) -(riemann/defriemann-sender notify-session-modify pool - [id tags reserved] - {:state "ok"}) + +(defn notify-session-modify [pool id tags reserved] + (riemann/send-event + (:riemann pool) + {:id id + :tags tags + :reserved reserved + :state "ok"})) (s/defn ^:always-validate modify-session :- (s/maybe SessionView) "Modify an existing session." @@ -299,8 +308,9 @@ (if (or (not go-to-url) (session-go-to-url-or-destroy-session id go-to-url)) (save-session-diff-to-redis pool id session-diff)) - (let [{:keys [tags reserved]} session-diff] - (notify-session-modify))) + (let [{:keys [tags reserved]} session-diff + tags (into [] (map name tags))] + (notify-session-modify pool id tags reserved))) (view-model pool id))) (s/defn ^:always-validate get-node-or-err :- nodes/NodeView @@ -308,7 +318,7 @@ node-req :- (s/maybe nodes/NodeRequirement)] (let [node (nodes/get-node pool node-req)] (when (nil? node) - (notify-session-create-error) + (notify-session-create-error pool) (throw (ex-info "No suitable node found!" {:user-visible true :status 503}))) @@ -329,9 +339,15 @@ :reserved false :proxy-id nil}) -(riemann/defriemann-sender notify-session-create pool - [id tags reserved browser-name node-id] - {:state "ok"}) +(defn notify-session-create [pool id tags reserved browser-name node-id] + (riemann/send-event + (:riemann pool) + {:id id + :tags tags + :reserved reserved + :browser-name browser-name + :node-id node-id + :state "ok"})) (s/defn ^:always-validate create-session :- SessionView [pool :- SessionPool @@ -339,7 +355,7 @@ (logging/info (format "Creating a new session.\nOptions: %s" (pretty options))) (when (= 0 (count (nodes/nodes-under-capacity (:node-pool pool)))) - (notify-session-create-error) + (notify-session-create-error pool) (throw (ex-info "All nodes are over capacity!" {:user-visible true :status 503}))) @@ -383,8 +399,10 @@ :timeout (:start-webdriver-timeout pool)) webdriver-id (remote-webdriver/session-id wd) actual-capabilities (webdriver-capabilities wd)] - (let [node-id (:id node)] - (notify-session-create)) + + (let [tags (into [] (map name tags)) + node-id (:id node)] + (notify-session-create pool id tags reserved browser-name node-id)) (last (car/wcar (:redis-conn pool) (car/sadd (redis/model-ids-key redis/SessionInRedis) id) @@ -531,9 +549,11 @@ (when immediately (deref deferred)))) -(riemann/defriemann-sender notify-session-destroy pool - [id] - {:state "expired"}) +(defn notify-session-destroy [pool id] + (riemann/send-event + (:riemann pool) + {:id id + :state "expired"})) (defn destroy-session [pool id & {:keys [immediately] :or {immediately true}}] @@ -558,7 +578,7 @@ node-url (boolean immediately) hard-delete) - (notify-session-destroy)))) + (notify-session-destroy pool id)))) true) (def view-model-defaults {:current-url nil diff --git a/test/shale/test/utils.clj b/test/shale/test/utils.clj index f23709e..0df4cdf 100644 --- a/test/shale/test/utils.clj +++ b/test/shale/test/utils.clj @@ -92,7 +92,7 @@ (finally (clear-redis redis)))))) -(def riemann-test-conf {:host "localhost" :port 6666}) +(def riemann-test-conf {:host "127.0.0.1" :port 6666}) (defn with-riemann-server ([] (with-riemann-server (constantly nil))) From ac3a37edbe607c968bb30b972ffe7d5928e1e4ba Mon Sep 17 00:00:00 2001 From: Jan Triska Date: Fri, 17 Mar 2017 16:58:39 +0100 Subject: [PATCH 4/4] Changed version of amazonaws deps because of error. --- project.clj | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/project.clj b/project.clj index 253b78a..d46f890 100644 --- a/project.clj +++ b/project.clj @@ -11,8 +11,8 @@ [clj-wallhack "1.0.1"] [clj-webdriver "0.6.1" :exclusions [org.clojure/core.cache]] [cljs-ajax "0.5.3"] - [com.amazonaws/aws-java-sdk-core "1.11.63"] - [com.amazonaws/aws-java-sdk-ec2 "1.11.63"] + [com.amazonaws/aws-java-sdk-core "1.11.77"] + [com.amazonaws/aws-java-sdk-ec2 "1.11.77"] [com.brweber2/clj-dns "0.0.2"] [com.cemerick/url "0.1.1"] [com.fzakaria/slf4j-timbre "0.3.4"] @@ -47,6 +47,7 @@ [slingshot "0.12.2"] [sonian/carica "1.1.0" :exclusions [cheshire]] [venantius/accountant "0.1.7" :exclusions [org.clojure/tools.reader]] + [com.google.protobuf/protobuf-java "2.6.1"] [riemann "0.2.12" :exclusions [org.jsoup/jsoup io.netty/netty]]] :exclusions [cheshire] :scm {:name "git"