diff --git a/src/clj/auto_ap/graphql.clj b/src/clj/auto_ap/graphql.clj index b5cfa55a..a99d207c 100644 --- a/src/clj/auto_ap/graphql.clj +++ b/src/clj/auto_ap/graphql.clj @@ -22,7 +22,7 @@ [auto-ap.graphql.vendors :as gq-vendors] [auto-ap.graphql.yodlee-merchants :as ym] [auto-ap.graphql.yodlee2 :as gq-yodlee2] - [auto-ap.logging :refer [error-event info-event warn-event]] + [auto-ap.logging :refer [error-event info-event warn-event] :as alog] [auto-ap.time :as time] [clj-time.coerce :as coerce] [clj-time.core :as t] @@ -36,7 +36,8 @@ [com.walmartlabs.lacinia.util :refer [attach-resolvers]] [datomic.api :as d] [unilog.context :as lc] - [yang.time :refer [time-it]]) + [yang.time :refer [time-it]] + [com.brunobonacci.mulog :as mu]) (:import (clojure.lang IPersistentMap))) @@ -834,27 +835,34 @@ ([id q v] (statsd/increment "query.graphql.count" {:tags #{(str "query:" (query-name q))}}) (statsd/time! [(str "query.graphql.time" ) {:tags #{(str "query:" (query-name q))}}] - (lc/with-context {:query q} - (log/info "executing query name" (query-name q)) - (try - (let [[result time] (time-it (simplify (execute schema q v {:id id})))] - (info-event "Query completed" - {:time (:time time) - :errors (seq (:errors result))}) - (when (seq (:errors result)) - (throw (ex-info "GraphQL error" {:result result}))) - result) + (mu/with-context {:query q + :user id} + (mu/trace ::graphql-query + (lc/with-context {:query q} + (log/info "executing query name" (query-name q)) + (try + (let [[result time] (time-it (simplify (execute schema q v {:id id})))] + (info-event "Query completed" + {:time (:time time) + :errors (seq (:errors result))}) + (when (seq (:errors result)) + (throw (ex-info "GraphQL error" {:result result}))) + result) - (catch Exception e - (if-let [v (or (:validation-error (ex-data e)) - (:validation-error (ex-data (.getCause e))))] - - (do - (warn-event "validation error" {:validation-error v - :data (ex-data e)}) - (throw e) - #_{:errors [{:message v}]}) - (do - (error-event "query error" {:error e}) + (catch Exception e + (if-let [v (or (:validation-error (ex-data e)) + (:validation-error (ex-data (.getCause e))))] + + (do + (alog/warn ::query-validation + :exception e) + (warn-event "validation error" {:validation-error v + :data (ex-data e)}) + (throw e) + #_{:errors [{:message v}]}) + (do + (error-event "query error" {:error e}) + (alog/error ::query-error + :exception e) - (throw e))))))))) + (throw e)))))))))))