Skip to content

Commit e02a572

Browse files
committed
add sentry instrumentation package
1 parent c8a539a commit e02a572

File tree

2 files changed

+71
-0
lines changed

2 files changed

+71
-0
lines changed
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
#lang racket/base
2+
3+
(require json
4+
net/http-easy
5+
net/uri-codec
6+
net/url
7+
sentry
8+
sentry/tracing)
9+
10+
(provide
11+
make-tracing-middleware)
12+
13+
(define (make-tracing-middleware sentry)
14+
(make-keyword-procedure
15+
(lambda (kws kw-args u k . args)
16+
(parameterize ([current-sentry sentry])
17+
(define method (kw-ref kws kw-args '#:method))
18+
(define params (kw-ref kws kw-args '#:params))
19+
(define method-str (string-upcase (symbol->string method)))
20+
;; https://develop.sentry.dev/sdk/telemetry/traces/span-data-conventions/
21+
(define data
22+
(hasheq
23+
'http.request.method
24+
method-str
25+
'http.query
26+
(format
27+
"?~a"
28+
(alist->form-urlencoded
29+
(append
30+
(or (url-query u) null)
31+
(or params null))))
32+
'server.address
33+
(or (url-host u)
34+
(json-null))
35+
'server.port
36+
(or (url-port u)
37+
(case (url-scheme u)
38+
[("https") 443]
39+
[else 80]))))
40+
(call-with-span
41+
#:origin 'auto.http.easy
42+
#:operation 'http.client
43+
#:description (format "~a ~a" method-str (url->string u))
44+
#:data data
45+
(lambda (s)
46+
(define res (keyword-apply k kws kw-args u args))
47+
(span-set! s 'http.response.status_code (response-status-code res))
48+
(cond
49+
[(response-headers-ref res 'content-length)
50+
=> (λ (len) (span-set! s 'http.response_content_length len))]
51+
[(response-closed? res)
52+
(define len (bytes-length (response-body res)))
53+
(span-set! s 'http.response_content_length len)]
54+
[else (void)])
55+
res))))))
56+
57+
(define (kw-ref kws kw-args needle)
58+
(for/first ([kw (in-list kws)]
59+
[kw-arg (in-list kw-args)]
60+
#:when (equal? kw needle))
61+
kw-arg))

http-easy-sentry-lib/info.rkt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#lang info
2+
3+
(define license 'BSD-3-Clause)
4+
(define version "0.1")
5+
(define collection "net")
6+
(define deps
7+
'("base"
8+
"http-easy-lib"
9+
"net-lib"
10+
"sentry-lib"))

0 commit comments

Comments
 (0)