mirror of
https://github.com/penpot/penpot.git
synced 2025-05-15 00:56:38 +02:00
✨ Ensure valid messages on zmq listener.
This commit is contained in:
parent
0bf883d5b2
commit
634ec1b113
1 changed files with 40 additions and 16 deletions
|
@ -7,6 +7,7 @@
|
||||||
(ns app.loggers.zmq
|
(ns app.loggers.zmq
|
||||||
"A generic ZMQ listener."
|
"A generic ZMQ listener."
|
||||||
(:require
|
(:require
|
||||||
|
[app.common.exceptions :as ex]
|
||||||
[app.common.logging :as l]
|
[app.common.logging :as l]
|
||||||
[app.common.spec :as us]
|
[app.common.spec :as us]
|
||||||
[app.util.json :as json]
|
[app.util.json :as json]
|
||||||
|
@ -14,7 +15,8 @@
|
||||||
[clojure.core.async :as a]
|
[clojure.core.async :as a]
|
||||||
[clojure.spec.alpha :as s]
|
[clojure.spec.alpha :as s]
|
||||||
[cuerdas.core :as str]
|
[cuerdas.core :as str]
|
||||||
[integrant.core :as ig])
|
[integrant.core :as ig]
|
||||||
|
[jsonista.core :as j])
|
||||||
(:import
|
(:import
|
||||||
org.zeromq.SocketType
|
org.zeromq.SocketType
|
||||||
org.zeromq.ZMQ$Socket
|
org.zeromq.ZMQ$Socket
|
||||||
|
@ -33,7 +35,7 @@
|
||||||
(l/info :msg "intializing ZMQ receiver" :bind endpoint)
|
(l/info :msg "intializing ZMQ receiver" :bind endpoint)
|
||||||
(let [buffer (a/chan 1)
|
(let [buffer (a/chan 1)
|
||||||
output (a/chan 1 (comp (filter map?)
|
output (a/chan 1 (comp (filter map?)
|
||||||
(map prepare)))
|
(keep prepare)))
|
||||||
mult (a/mult output)]
|
mult (a/mult output)]
|
||||||
(when endpoint
|
(when endpoint
|
||||||
(a/thread (start-rcv-loop {:out buffer :endpoint endpoint})))
|
(a/thread (start-rcv-loop {:out buffer :endpoint endpoint})))
|
||||||
|
@ -52,6 +54,11 @@
|
||||||
[_ f]
|
[_ f]
|
||||||
(a/close! (::buffer (meta f))))
|
(a/close! (::buffer (meta f))))
|
||||||
|
|
||||||
|
(def json-mapper
|
||||||
|
(j/object-mapper
|
||||||
|
{:encode-key-fn str/camel
|
||||||
|
:decode-key-fn (comp keyword str/kebab)}))
|
||||||
|
|
||||||
(defn- start-rcv-loop
|
(defn- start-rcv-loop
|
||||||
([] (start-rcv-loop nil))
|
([] (start-rcv-loop nil))
|
||||||
([{:keys [out endpoint] :or {endpoint "tcp://localhost:5556"}}]
|
([{:keys [out endpoint] :or {endpoint "tcp://localhost:5556"}}]
|
||||||
|
@ -63,7 +70,7 @@
|
||||||
(.. socket (setReceiveTimeOut 5000))
|
(.. socket (setReceiveTimeOut 5000))
|
||||||
(loop []
|
(loop []
|
||||||
(let [msg (.recv ^ZMQ$Socket socket)
|
(let [msg (.recv ^ZMQ$Socket socket)
|
||||||
msg (json/decode msg)
|
msg (ex/ignoring (j/read-value msg json-mapper))
|
||||||
msg (if (nil? msg) :empty msg)]
|
msg (if (nil? msg) :empty msg)]
|
||||||
(if (a/>!! out msg)
|
(if (a/>!! out msg)
|
||||||
(recur)
|
(recur)
|
||||||
|
@ -71,18 +78,35 @@
|
||||||
(.close ^java.lang.AutoCloseable socket)
|
(.close ^java.lang.AutoCloseable socket)
|
||||||
(.close ^java.lang.AutoCloseable zctx))))))))
|
(.close ^java.lang.AutoCloseable zctx))))))))
|
||||||
|
|
||||||
|
|
||||||
|
(s/def ::logger-name string?)
|
||||||
|
(s/def ::level string?)
|
||||||
|
(s/def ::thread string?)
|
||||||
|
(s/def ::time-millis integer?)
|
||||||
|
(s/def ::message string?)
|
||||||
|
(s/def ::context-map map?)
|
||||||
|
(s/def ::throw map?)
|
||||||
|
|
||||||
|
(s/def ::log4j-event
|
||||||
|
(s/keys :req-un [::logger-name ::level ::thread ::time-millis ::message]
|
||||||
|
:opt-un [::context-map ::thrown]))
|
||||||
|
|
||||||
(defn- prepare
|
(defn- prepare
|
||||||
[event]
|
[event]
|
||||||
(merge
|
(if (s/valid? ::log4j-event event)
|
||||||
{:logger (:loggerName event)
|
(merge
|
||||||
:level (str/lower (:level event))
|
{:logger (:logger-name event)
|
||||||
:thread (:thread event)
|
:level (str/lower (:level event))
|
||||||
:created-at (dt/instant (:timeMillis event))
|
:thread (:thread event)
|
||||||
:message (:message event)}
|
:created-at (dt/instant (:time-millis event))
|
||||||
(when-let [ctx (:contextMap event)]
|
:message (:message event)}
|
||||||
{:context ctx})
|
(when-let [ctx (:context-map event)]
|
||||||
(when-let [thrown (:thrown event)]
|
{:context ctx})
|
||||||
{:error
|
(when-let [thrown (:thrown event)]
|
||||||
{:class (:name thrown)
|
{:error
|
||||||
:message (:message thrown)
|
{:class (:name thrown)
|
||||||
:trace (:extendedStackTrace thrown)}})))
|
:message (:message thrown)
|
||||||
|
:trace (:extended-stack-trace thrown)}}))
|
||||||
|
(do
|
||||||
|
(l/warn :hint "invalid event" :event event)
|
||||||
|
nil)))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue