1
+ package com .m3 .play2 .sentry
2
+
3
+ import java .io .IOException
4
+
5
+ import com .fasterxml .jackson .core .JsonGenerator
6
+ import io .sentry .marshaller .json .InterfaceBinding
7
+
8
+ object PlayHttpInterfaceBinding {
9
+ private val URL = " url"
10
+ private val METHOD = " method"
11
+ private val DATA = " data"
12
+ private val QUERY_STRING = " query_string"
13
+ private val COOKIES = " cookies"
14
+ private val HEADERS = " headers"
15
+ private val ENVIRONMENT = " env"
16
+ private val ENV_REMOTE_ADDR = " REMOTE_ADDR"
17
+ private val ENV_SERVER_NAME = " SERVER_NAME"
18
+ private val ENV_LOCAL_ADDR = " LOCAL_ADDR"
19
+ private val ENV_LOCAL_NAME = " LOCAL_NAME"
20
+ private val ENV_REQUEST_SECURE = " REQUEST_SECURE"
21
+ }
22
+
23
+ class PlayHttpInterfaceBinding extends InterfaceBinding [PlayHttpInterface ] {
24
+ import PlayHttpInterfaceBinding ._
25
+
26
+ @ throws[IOException ]
27
+ override def writeInterface (generator : JsonGenerator , playHttpInterface : PlayHttpInterface ): Unit = {
28
+ generator.writeStartObject()
29
+ generator.writeStringField(URL , playHttpInterface.requestUrl)
30
+ generator.writeStringField(METHOD , playHttpInterface.method)
31
+
32
+ generator.writeFieldName(DATA )
33
+ writeParameters(generator, playHttpInterface.parameters)
34
+
35
+ generator.writeStringField(QUERY_STRING , playHttpInterface.queryString)
36
+
37
+ generator.writeFieldName(COOKIES )
38
+ writeCookies(generator, playHttpInterface.cookies)
39
+
40
+ generator.writeFieldName(HEADERS )
41
+ writeHeaders(generator, playHttpInterface.headers)
42
+
43
+ generator.writeFieldName(ENVIRONMENT )
44
+ writeEnvironment(generator, playHttpInterface)
45
+
46
+ generator.writeEndObject()
47
+ }
48
+
49
+ @ throws[IOException ]
50
+ private def writeEnvironment (generator : JsonGenerator , playHttpInterface : PlayHttpInterface ): Unit = {
51
+ generator.writeStartObject()
52
+ generator.writeStringField(ENV_REMOTE_ADDR , playHttpInterface.remoteAddr)
53
+ generator.writeStringField(ENV_SERVER_NAME , playHttpInterface.serverName)
54
+ generator.writeStringField(ENV_LOCAL_ADDR , playHttpInterface.localAddr)
55
+ generator.writeStringField(ENV_LOCAL_NAME , playHttpInterface.localName)
56
+ generator.writeBooleanField(ENV_REQUEST_SECURE , playHttpInterface.secure)
57
+ generator.writeEndObject()
58
+ }
59
+
60
+ @ throws[IOException ]
61
+ private def writeHeaders (generator : JsonGenerator , headers : Map [String , Seq [String ]]): Unit = {
62
+ generator.writeStartObject()
63
+ headers.foreach {case (key, values) =>
64
+ generator.writeStringField(key, values.mkString(" ," ))
65
+ }
66
+ generator.writeEndObject()
67
+ }
68
+
69
+ @ throws[IOException ]
70
+ private def writeCookies (generator : JsonGenerator , cookies : Seq [(String , String )]): Unit = {
71
+ if (cookies.isEmpty) {
72
+ generator.writeNull()
73
+
74
+ } else {
75
+ generator.writeStartObject()
76
+ cookies.foreach { case (key, value) =>
77
+ generator.writeStringField(key, value)
78
+ }
79
+ generator.writeEndObject()
80
+ }
81
+ }
82
+
83
+ @ throws[IOException ]
84
+ private def writeParameters (generator : JsonGenerator , parameterMap : Map [String , Seq [String ]]): Unit = {
85
+ if (parameterMap.isEmpty) {
86
+ generator.writeNull()
87
+
88
+ } else {
89
+ generator.writeStartObject()
90
+
91
+ parameterMap.foreach { case (key, values) =>
92
+ generator.writeArrayFieldStart(key)
93
+ values.foreach { value => generator.writeString(value) }
94
+ generator.writeEndArray()
95
+ }
96
+
97
+ generator.writeEndObject()
98
+ }
99
+ }
100
+ }
0 commit comments