Skip to content

Commit

Permalink
sentry: allow passing base tags (#67)
Browse files Browse the repository at this point in the history
The java sdk seems to set `isEnableExternalConfiguration` by default (reading from env vars), or at the very least allows setting that option, while the clj sdk does not. The sentry-clj library is initiated without this option; it's also not possible to set it to `true`, hence we need a way to forwared some options to the sentry library.

This commit forwards the `tags`; `environment` and `release` could already be passed down
  • Loading branch information
mping-exo committed Mar 20, 2024
1 parent a8ea989 commit 26003a9
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 24 deletions.
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,15 @@ Reporter provides a [component](https://github.com/stuartsierra/component) in or

### Changelog

#### 1.0.2

- Reporter's `sentry` config supports the following keys `:dsn, :environment, :release, :tags`
- `sentry-options` are deprecated

#### 1.0.0

- Migrating from `exoscale/raven` to `io.sentry/sentry-clj`
- `SENTRY_` env vars are no longer automatically forwarded
- `raven-options` renamed to `sentry-options` within `spootnik.reporter.impl/Reporter` signature

#### 0.2.0
Expand Down
2 changes: 1 addition & 1 deletion src/spootnik/reporter/impl.clj
Original file line number Diff line number Diff line change
Expand Up @@ -523,7 +523,7 @@
(capture! [this e]
(capture! this e {}))
(capture! [_this e tags]
(rs/send-event! (:dsn sentry) sentry-options e tags))
(rs/send-event! sentry sentry-options e tags))
RiemannSink
(send! [_this ev]
(when rclient
Expand Down
46 changes: 23 additions & 23 deletions src/spootnik/reporter/sentry.clj
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
(ns spootnik.reporter.sentry
(:require
[sentry-clj.core :as sentry-io]
[manifold.deferred :as d]
[clojure.string :as str]
[clojure.tools.logging :refer [error]]
[clojure.java.shell :as sh]))
[sentry-clj.core :as sentry]
[manifold.deferred :as d]
[clojure.string :as str]
[clojure.tools.logging :refer [error]]
[clojure.java.shell :as sh]))

(def http-requests-payload-stub
"Storage for stubbed http sentry events "
Expand Down Expand Up @@ -59,31 +59,32 @@
Supported event keys:
https://github.com/getsentry/sentry-clj/tree/master?tab=readme-ov-file#supported-event-keys
"

[e options tags]
(let [{:keys [message extra throwable]} e
(let [{:keys [message extra throwable fingerprint]} e
message (or message (ex-message e))
user (some-> extra :org/uuid str)
fingerprints (some-> options :fingerpint seq)
request (some-> extra :payload payload->sentry-request)]
fingerprints (some-> fingerprint seq)
request (some-> extra :payload payload->sentry-request)
;; override "base" tags with params
merged-tags (merge (:tags options) tags)]

(cond-> {:message message
:level :error
:platform "java"
:server-name (localhost)}

throwable (assoc :throwable throwable)
extra (assoc :extra extra)
(seq tags) (assoc :tags tags)
user (assoc :user user)
fingerprints (assoc :fingerprints fingerprints)
request (assoc :request request))))
throwable (assoc :throwable throwable)
extra (assoc :extra extra)
(seq merged-tags) (assoc :tags merged-tags)
user (assoc :user user)
fingerprints (assoc :fingerprints fingerprints)
request (assoc :request request))))

(defn send-event! [dsn options e tags]
(let [event (e->sentry-event e options tags)]
(defn send-event! [{:keys [dsn] :as sentry} legacy-options e tags]
(let [event (e->sentry-event e (merge legacy-options sentry) tags)]
(if-not (in-memory? dsn)
(-> (try
(sentry-io/send-event event)
(sentry/send-event event)
(catch Exception e
(d/error-deferred e)))

Expand All @@ -93,8 +94,8 @@
event-id))

(d/catch (fn [e']
(error e "Failed to capture exception" {:tags tags :capture-exception e'})
(send-event! dsn options e' tags))))
(error e "Failed to capture exception" {:tags tags :throwable e'})
(send-event! sentry legacy-options e' tags))))

(swap! http-requests-payload-stub conj event))))

Expand All @@ -103,13 +104,12 @@
Additional options can be found here:
https://github.com/getsentry/sentry-clj/tree/master?tab=readme-ov-file#additional-initialisation-options
"

[{:keys [dsn] :as sentry}]
(if-not (in-memory? dsn)
(sentry-io/init! dsn sentry)
(sentry/init! dsn sentry)
(reset! http-requests-payload-stub [])))

(defn close! [{:keys [dsn]}]
(if-not (in-memory? dsn)
(sentry-io/close!)
(sentry/close!)
(reset! http-requests-payload-stub nil)))

0 comments on commit 26003a9

Please sign in to comment.