chimera_http_client 1.1.2 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.markdown +21 -2
- data/TODO.markdown +13 -9
- data/lib/chimera_http_client/base.rb +1 -0
- data/lib/chimera_http_client/connection.rb +2 -1
- data/lib/chimera_http_client/queue.rb +4 -3
- data/lib/chimera_http_client/request.rb +11 -4
- data/lib/chimera_http_client/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5a1e1ddc7ca2263c940a81d57b6fbd4a94cb013ba040cf47a10e9428b4ad2fee
|
4
|
+
data.tar.gz: 2314f9fac4ec7b9514d19fe50d96051f47e9a9fce4cc588c3c2f5381bf53b8d2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3074c920d64e9b4ce923590c320e1db14ede59d63527bbf29070b8625edfc3738a9354fa00ca21dcf61635882f97d6a755be10fa0c0776e567c13264a5f7358c
|
7
|
+
data.tar.gz: 2530bee55981a60ce9beaf1959b8af1b7ca333f1d16655de7782bd994bf75d6aff094beced3a8ebe31ea8dc3c2109e1bc9159058bf45932cb006e305925f8567
|
data/README.markdown
CHANGED
@@ -83,12 +83,13 @@ Setting the `base_url` is meant to be a comfort feature, as you can then pass sh
|
|
83
83
|
|
84
84
|
The optional parameters are:
|
85
85
|
|
86
|
+
* `cache` - an instance of your cache solution, can be overwritten in any request
|
87
|
+
* `deserializers` - custom methods to deserialize the response body, below more details
|
86
88
|
* `logger` - an instance of a logger class that implements `#info` and `#warn` methods
|
89
|
+
* `monitor` - to collect metrics about requests, the basis for your instrumentation needs
|
87
90
|
* `timeout` - the timeout for all requests, can be overwritten in any request, the default are 3 seconds
|
88
91
|
* `user_agent` - if you would like your calls to identify with a specific user agent
|
89
92
|
* `verbose` - the default is `false`, set it to true while debugging issues
|
90
|
-
* `cache` - an instance of your cache solution, can be overwritten in any request
|
91
|
-
* `deserializers` - custom methods to deserialize the response body, below more details
|
92
93
|
|
93
94
|
##### Custom deserializers
|
94
95
|
|
@@ -102,6 +103,23 @@ A Deserializer has to be an object on which the method `call` with the parameter
|
|
102
103
|
|
103
104
|
where `body` is the response body (in the default case a JSON object). The class `Deserializer` contains the default objects that are used. They might help you creating your own. Don't forget to make requests with another header than the default `"Content-Type" => "application/json"`, when the API you connect to does not support JSON.
|
104
105
|
|
106
|
+
##### Monitoring, metrics, instrumentation
|
107
|
+
|
108
|
+
Pass an object as `:monitor` to a connection that defines the method `call` and accepts a hash as parameter.
|
109
|
+
|
110
|
+
monitor.call({...})
|
111
|
+
|
112
|
+
It will receive information about every request as soon as it finished. What you do with this information is up for you to implement.
|
113
|
+
|
114
|
+
| Field | Description |
|
115
|
+
|:---------------|:----------------------------------------------------------------------|
|
116
|
+
| `url` | URL of the endpoint that was called |
|
117
|
+
| `method` | HTTP method: get, post, ... |
|
118
|
+
| `status` | HTTP status code: 200, ... |
|
119
|
+
| `runtime` | the time in seconds it took the request to finish |
|
120
|
+
| `completed_at` | Time.now.utc.iso8601(3) |
|
121
|
+
| `context` | Whatever you pass as `monitoring_context` to the options of a request |
|
122
|
+
|
105
123
|
### Request methods
|
106
124
|
|
107
125
|
The available methods are:
|
@@ -142,6 +160,7 @@ All request methods expect a mandatory `endpoint` and an optional hash as parame
|
|
142
160
|
* `password` - used for a BasicAuth login
|
143
161
|
* `timeout` - set a custom timeout per request (the default is 3 seconds)
|
144
162
|
* `cache` - optionally overwrite the cache store set in `Connection` in any request
|
163
|
+
* `monitoring_context` - pass additional information you want to collect with your instrumentation `monitor`
|
145
164
|
|
146
165
|
Example:
|
147
166
|
|
data/TODO.markdown
CHANGED
@@ -14,8 +14,9 @@ _none known_
|
|
14
14
|
* [x] ~~include the total_time of the requests in the log~~
|
15
15
|
* [x] ~~add (example) to README~~
|
16
16
|
* [ ] add logger.warn / .error for error cases (?)
|
17
|
+
* [ ] streamline log message
|
17
18
|
|
18
|
-
### Custom De-serializer
|
19
|
+
### ~~Custom De-serializer~~
|
19
20
|
|
20
21
|
* [x] ~~allow to pass custom deserializer~~
|
21
22
|
* [x] ~~use custom deserializer in #parsed_body instead of default JSON parsing~~
|
@@ -40,15 +41,18 @@ _none known_
|
|
40
41
|
|
41
42
|
- [ ] Determine by parameter if 3xx Redirects should be handled as an Error or not
|
42
43
|
- [x] ~~Add a longer description to the gemspec file~~
|
44
|
+
- [ ] Refactor README to explain simple use case vs. all the powerful options?
|
43
45
|
|
44
|
-
### Instrumentation
|
46
|
+
### ~~Instrumentation~~
|
45
47
|
|
46
|
-
- [
|
47
|
-
- [
|
48
|
-
- [
|
49
|
-
- [
|
50
|
-
- [
|
51
|
-
- [
|
48
|
+
- [x] ~~allow to pass object to collect metrics for monitoring~~
|
49
|
+
- [x] ~~request URL~~
|
50
|
+
- [x] ~~request HTTP method~~
|
51
|
+
- [x] ~~request response code~~
|
52
|
+
- [x] ~~request datetime~~
|
53
|
+
- [x] ~~request runtime~~
|
54
|
+
- [x] ~~custom context information per request~~
|
55
|
+
- [x] ~~add example to README~~
|
52
56
|
|
53
57
|
### Enable more Typhoeus functionality
|
54
58
|
|
@@ -93,7 +97,7 @@ _none known_
|
|
93
97
|
* [x] ~~allow to set custom timeout per call~~
|
94
98
|
* [x] ~~add (example) to README~~
|
95
99
|
|
96
|
-
### Release
|
100
|
+
### ~~Release~~
|
97
101
|
|
98
102
|
* [x] ~~rename module to have unique namespace~~
|
99
103
|
* [x] ~~release to rubygems to add to the plethora of similar gems~~
|
@@ -8,6 +8,7 @@ module ChimeraHttpClient
|
|
8
8
|
@base_url = options.fetch(:base_url)
|
9
9
|
@deserializer = default_deserializer.merge(options.fetch(:deserializer, {}))
|
10
10
|
@logger = options[:logger]
|
11
|
+
@monitor = options[:monitor]
|
11
12
|
@timeout = options[:timeout]
|
12
13
|
|
13
14
|
Typhoeus::Config.cache = options[:cache]
|
@@ -38,12 +38,13 @@ module ChimeraHttpClient
|
|
38
38
|
private
|
39
39
|
|
40
40
|
def create_request(method:, url:, body:, headers:, options:)
|
41
|
-
|
42
|
-
logger: @logger,
|
41
|
+
instance_options = {
|
43
42
|
deserializer: @deserializer,
|
43
|
+
logger: @logger,
|
44
|
+
monitor: @monitor,
|
44
45
|
}
|
45
46
|
|
46
|
-
Request.new(
|
47
|
+
Request.new(instance_options).create(
|
47
48
|
method: method,
|
48
49
|
url: url,
|
49
50
|
body: body,
|
@@ -5,7 +5,6 @@ module ChimeraHttpClient
|
|
5
5
|
attr_reader :request, :result
|
6
6
|
|
7
7
|
def initialize(options = {})
|
8
|
-
@logger = options[:logger]
|
9
8
|
@options = options
|
10
9
|
end
|
11
10
|
|
@@ -37,13 +36,21 @@ module ChimeraHttpClient
|
|
37
36
|
|
38
37
|
@result = nil
|
39
38
|
@request.on_complete do |response|
|
40
|
-
|
41
|
-
|
39
|
+
runtime = response.total_time&.round(3)
|
40
|
+
|
41
|
+
@options[:monitor]&.call(
|
42
|
+
{
|
43
|
+
url: url, method: method, status: response.code, runtime: runtime,
|
44
|
+
completed_at: Time.now.utc.iso8601(3), context: options[:monitoring_context]
|
45
|
+
}
|
46
|
+
)
|
47
|
+
@options[:logger]&.info("Completed HTTP request: #{method.upcase} #{url} " \
|
48
|
+
"in #{runtime}sec with status code #{response.code}")
|
42
49
|
|
43
50
|
@result = on_complete_handler(response)
|
44
51
|
end
|
45
52
|
|
46
|
-
@logger&.info("Starting HTTP request: #{method.upcase} #{url}")
|
53
|
+
@options[:logger]&.info("Starting HTTP request: #{method.upcase} #{url}")
|
47
54
|
|
48
55
|
self
|
49
56
|
end
|