moesif_rack 1.0.3 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +51 -23
- data/lib/moesif_rack/moesif_middleware.rb +19 -21
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5ed5bc8ec291e937b9bcb0bcf51718eb50bb52e9
|
4
|
+
data.tar.gz: b1a58fcde2a75a2e66c98b880d7c11950c19ff38
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 78a04e6c691d1159e4663d40fbc56f1567c762ea850e3e36d6bd67996b361801bc8ab26556a1279d66f32497034d5f0be0ed1287ace7790bf521f901a8a1d5c6
|
7
|
+
data.tar.gz: 55cc196b84495efa264e3ade047ebe4ada5c1628cfebd1e2d14a7e01d53ea9aa86c87a3a8ae50257b82e26c2b5102104a936132efccfda8319d7ef7893ca5851
|
data/README.md
CHANGED
@@ -1,23 +1,27 @@
|
|
1
|
-
Moesif Middleware for Ruby on Rails and Rack
|
2
|
-
=============================================
|
1
|
+
# Moesif Middleware for Ruby on Rails and Rack
|
3
2
|
|
4
|
-
Middleware that logs
|
3
|
+
Rack Middleware that logs _incoming_ API calls to Moesif for advanced error analysis for apps built on Ruby on Rails / Rack.
|
5
4
|
|
6
5
|
[Source Code on GitHub](https://github.com/moesif/moesif-rack)
|
7
6
|
|
8
|
-
|
9
|
-
[Ruby developer documentation](https://www.moesif.com/developer-documentation/?ruby) to learn more__
|
7
|
+
[Ruby Gem](https://rubygems.org/gems/moesif_rack)
|
10
8
|
|
11
|
-
|
12
|
-
=====================
|
9
|
+
## How to install
|
13
10
|
|
14
11
|
```bash
|
15
12
|
gem install moesif_rack
|
16
13
|
```
|
17
|
-
How to use:
|
18
|
-
===========
|
19
14
|
|
20
|
-
|
15
|
+
and if you have a `Gemfile` in your project, please add this line to
|
16
|
+
|
17
|
+
```
|
18
|
+
gem 'moesif_rack', '~> 1.1.0'
|
19
|
+
|
20
|
+
```
|
21
|
+
|
22
|
+
## How to use
|
23
|
+
|
24
|
+
### Create the options
|
21
25
|
|
22
26
|
```ruby
|
23
27
|
moesif_options = {
|
@@ -25,8 +29,9 @@ moesif_options = {
|
|
25
29
|
}
|
26
30
|
```
|
27
31
|
|
28
|
-
|
32
|
+
You can find your Application Id from [_Moesif Dashboard_](https://www.moesif.com/) -> _Top Right Menu_ -> _App Setup_
|
29
33
|
|
34
|
+
### Add to middleware
|
30
35
|
|
31
36
|
within `config/application.rb`
|
32
37
|
|
@@ -43,24 +48,44 @@ within `config/application.rb`
|
|
43
48
|
|
44
49
|
```
|
45
50
|
|
51
|
+
#### Order of Middleware Matters
|
52
|
+
|
53
|
+
Since Moesif Rack is basically a logging middleware, the ordering of middleware matters for accuracy and completeness.
|
54
|
+
Many middleware are installed by default by rails.
|
55
|
+
|
56
|
+
To see the list of the middleware that your system already have, type this into the bash.
|
57
|
+
|
58
|
+
```bash
|
59
|
+
bin/rails middleware
|
60
|
+
```
|
61
|
+
|
62
|
+
The best place for MoesifMidleware is on top as possible (so it captures the data closest to the wire).
|
63
|
+
Typically, right above the default logger of Rails apps, "Rails::Rack::Logger" is a good spot.
|
64
|
+
|
65
|
+
You should use the following line of code to insert the middleware into the right spot.
|
66
|
+
|
67
|
+
```ruby
|
68
|
+
|
69
|
+
config.middleware.insert_before "Rails::Rack::Logger", "MoesifRack::MoesifMiddleware", moesif_options
|
46
70
|
|
47
|
-
|
48
|
-
=================
|
71
|
+
```
|
49
72
|
|
50
|
-
|
73
|
+
## Configuration options
|
51
74
|
|
52
|
-
|
75
|
+
The options is a hash with these possible key value pairs.
|
76
|
+
|
77
|
+
#### __`application_id`__
|
53
78
|
|
54
79
|
Required. String. This is the Moesif application_id under settings
|
55
80
|
from your [Moesif account.](https://www.moesif.com)
|
56
81
|
|
57
82
|
|
58
|
-
#### api_version
|
83
|
+
#### __`api_version`__
|
59
84
|
|
60
85
|
Optional. String. Tag requests with the version of your API.
|
61
86
|
|
62
87
|
|
63
|
-
#### identify_user
|
88
|
+
#### __`identify_user`__
|
64
89
|
|
65
90
|
Optional.
|
66
91
|
identify_user is a Proc that takes env, headers, and body as arguments and returns a user_id string. This helps us attribute requests to unique users. Even though Moesif can automatically retrieve the user_id without this, this is highly recommended to ensure accurate attribution.
|
@@ -76,7 +101,7 @@ moesif_options['identify_user'] = Proc.new { |env, headers, body|
|
|
76
101
|
|
77
102
|
```
|
78
103
|
|
79
|
-
#### identify_session
|
104
|
+
#### __`identify_session`__
|
80
105
|
|
81
106
|
Optional. A Proc that takes env, headers, body and returns a string.
|
82
107
|
|
@@ -91,7 +116,7 @@ moesif_options['identify_session'] = Proc.new { |env, headers, body|
|
|
91
116
|
|
92
117
|
```
|
93
118
|
|
94
|
-
#### mask_data
|
119
|
+
#### __`mask_data`__
|
95
120
|
|
96
121
|
Optional. A Proc that takes event_model as an argument and returns event_model.
|
97
122
|
With mask_data, you can make modifications to headers or body of the event before it is sent to Moesif.
|
@@ -109,7 +134,7 @@ moesif_options['mask_data'] = Proc.new { |event_model|
|
|
109
134
|
|
110
135
|
For details for the spec of event model, please see the [moesifapi-ruby git](https://github.com/Moesif/moesifapi-ruby)
|
111
136
|
|
112
|
-
#### skip
|
137
|
+
#### __`skip`__
|
113
138
|
|
114
139
|
Optional. A Proc that takes env, headers, body and returns a boolean.
|
115
140
|
|
@@ -124,11 +149,14 @@ moesif_options['skip'] = Proc.new { |env, headers, body|
|
|
124
149
|
|
125
150
|
```
|
126
151
|
|
127
|
-
For details for the spec of event model, please see the [
|
152
|
+
For details for the spec of event model, please see the [Moesif Ruby API Documentation](https://www.moesif.com/docs/api?ruby)
|
128
153
|
|
129
154
|
|
155
|
+
#### __`debug`__
|
130
156
|
|
157
|
+
Optional. Boolean. Default false. If true, it will print out debug messages. In debug mode, the processing is not done in backend thread.
|
131
158
|
|
132
|
-
#### debug
|
133
159
|
|
134
|
-
|
160
|
+
## Other integrations
|
161
|
+
|
162
|
+
To view more more documentation on integration options, please visit __[the Integration Options Documentation](https://www.moesif.com/docs/getting-started/integration-options/).__
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'moesif_api'
|
2
2
|
require 'json'
|
3
3
|
require 'time'
|
4
|
+
require 'base64'
|
4
5
|
|
5
6
|
module MoesifRack
|
6
7
|
|
@@ -42,40 +43,28 @@ module MoesifRack
|
|
42
43
|
|
43
44
|
req_body_string = req.body.read
|
44
45
|
req.body.rewind
|
46
|
+
req_body_transfer_encoding = nil
|
45
47
|
|
46
48
|
if req_body_string && req_body_string.length != 0
|
47
49
|
begin
|
48
50
|
req_body = JSON.parse(req_body_string)
|
49
51
|
rescue
|
50
|
-
req_body =
|
51
|
-
|
52
|
-
'code': 'json_parse_error',
|
53
|
-
'src': 'moesif-rack',
|
54
|
-
'msg' => ['Body is not a JSON Object or JSON Array'],
|
55
|
-
'args' => [req_body_string]
|
56
|
-
}
|
57
|
-
}
|
52
|
+
req_body = Base64.encode64(req_body_string)
|
53
|
+
req_body_transfer_encoding = 'base64'
|
58
54
|
end
|
59
55
|
end
|
60
56
|
|
61
57
|
rsp_headers = headers.dup
|
62
58
|
|
63
|
-
|
59
|
+
rsp_body_string = get_response_body(body);
|
60
|
+
rsp_body_transfer_encoding = nil
|
64
61
|
|
65
|
-
if
|
62
|
+
if rsp_body_string && rsp_body_string.length != 0
|
66
63
|
begin
|
67
|
-
rsp_body = JSON.parse(
|
64
|
+
rsp_body = JSON.parse(rsp_body_string)
|
68
65
|
rescue
|
69
|
-
|
70
|
-
|
71
|
-
'moesif_error' => {
|
72
|
-
'code': 'json_parse_error',
|
73
|
-
'src': 'moesif-rack',
|
74
|
-
'msg' => ['Body is not a JSON Object or JSON Array'],
|
75
|
-
'args' => [body.body]
|
76
|
-
}
|
77
|
-
}
|
78
|
-
end
|
66
|
+
rsp_body = Base64.encode64(rsp_body_string)
|
67
|
+
rsp_body_transfer_encoding = 'base64'
|
79
68
|
end
|
80
69
|
end
|
81
70
|
|
@@ -90,12 +79,14 @@ module MoesifRack
|
|
90
79
|
event_req.ip_address = req.ip
|
91
80
|
event_req.headers = req_headers
|
92
81
|
event_req.body = req_body
|
82
|
+
event_req.transfer_encoding = req_body_transfer_encoding
|
93
83
|
|
94
84
|
event_rsp = MoesifApi::EventResponseModel.new()
|
95
85
|
event_rsp.time = end_time
|
96
86
|
event_rsp.status = status
|
97
87
|
event_rsp.headers = rsp_headers
|
98
88
|
event_rsp.body = rsp_body
|
89
|
+
event_rsp.transfer_encoding = rsp_body_transfer_encoding
|
99
90
|
|
100
91
|
event_model = MoesifApi::EventModel.new()
|
101
92
|
event_model.request = event_req
|
@@ -146,5 +137,12 @@ module MoesifRack
|
|
146
137
|
|
147
138
|
[status, headers, body]
|
148
139
|
end
|
140
|
+
|
141
|
+
def get_response_body(response)
|
142
|
+
body = response.respond_to?(:body) ? response.body : response
|
143
|
+
body = body.inject("") { |i, a| i << a } if body.respond_to?(:each)
|
144
|
+
body.to_s
|
145
|
+
end
|
146
|
+
|
149
147
|
end
|
150
148
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: moesif_rack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Moesif, Inc
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-
|
12
|
+
date: 2017-03-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: test-unit
|
@@ -59,14 +59,14 @@ dependencies:
|
|
59
59
|
requirements:
|
60
60
|
- - "~>"
|
61
61
|
- !ruby/object:Gem::Version
|
62
|
-
version: 1.
|
62
|
+
version: 1.1.1
|
63
63
|
type: :runtime
|
64
64
|
prerelease: false
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
66
66
|
requirements:
|
67
67
|
- - "~>"
|
68
68
|
- !ruby/object:Gem::Version
|
69
|
-
version: 1.
|
69
|
+
version: 1.1.1
|
70
70
|
description: Collection/Data Ingestion SDK for Rack (also Rails) Middleware / RoR
|
71
71
|
email: xing@moesif.com
|
72
72
|
executables: []
|