honeycomb-beeline 2.3.0 → 2.5.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/.circleci/bundler_version.sh +4 -0
- data/.circleci/config.yml +102 -43
- data/.github/CODEOWNERS +1 -1
- data/.github/dependabot.yml +15 -0
- data/.github/workflows/add-to-project.yml +14 -0
- data/.github/workflows/apply-labels.yml +10 -0
- data/.gitignore +1 -0
- data/.rspec +4 -0
- data/.tool-versions +1 -0
- data/CHANGELOG.md +116 -0
- data/Gemfile.lock +10 -5
- data/UPGRADING.md +10 -0
- data/honeycomb-beeline.gemspec +1 -0
- data/lib/honeycomb-beeline.rb +2 -1
- data/lib/honeycomb/beeline/version.rb +1 -1
- data/lib/honeycomb/client.rb +46 -13
- data/lib/honeycomb/configuration.rb +6 -0
- data/lib/honeycomb/integrations/rack.rb +13 -5
- data/lib/honeycomb/integrations/rails.rb +10 -0
- data/lib/honeycomb/integrations/redis.rb +103 -94
- metadata +22 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 8dfad7bddebd49b8645b61389e74035626a0cc817d5fc7ea9e51ab17cb571584
|
|
4
|
+
data.tar.gz: eadf7a28b41ddb6437e0e5a2c0824c2a2cf67fbf36a95bc18f77ad03b4f74306
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 7c6204f46a27e4a3af3bf5d2d173fdb4d06f820ecf76dd2ed84d0de52aca83fb155190075b244ee6ab7e811c93927874ae51d36cc117b018de995ad5aeb76f40
|
|
7
|
+
data.tar.gz: 175c355b5a5833bfd68b17a281fc2d71f0321f7c708e339b03090b367d64d7a6c9294ed8afcc84d5f538b6c80644f9c26488475962903a2364bb6ab0e7ee93f8
|
|
@@ -3,6 +3,10 @@
|
|
|
3
3
|
set -ux
|
|
4
4
|
|
|
5
5
|
if [[ "$BUNDLE_GEMFILE" =~ (rails_41.gemfile|rails_42.gemfile)$ ]]; then
|
|
6
|
+
echo "Rails 4.1 and 4.2 require an old Bundler"
|
|
6
7
|
gem uninstall -v '>= 2' -ax bundler
|
|
7
8
|
gem install bundler -v '< 2'
|
|
9
|
+
else
|
|
10
|
+
echo "Get the latest Bundler"
|
|
11
|
+
gem update bundler
|
|
8
12
|
fi
|
data/.circleci/config.yml
CHANGED
|
@@ -6,7 +6,6 @@ commands:
|
|
|
6
6
|
type: string
|
|
7
7
|
gemfile:
|
|
8
8
|
type: string
|
|
9
|
-
default: Gemfile
|
|
10
9
|
command:
|
|
11
10
|
type: string
|
|
12
11
|
default: bundle exec rake test
|
|
@@ -14,28 +13,68 @@ commands:
|
|
|
14
13
|
- checkout
|
|
15
14
|
- restore_cache:
|
|
16
15
|
keys:
|
|
17
|
-
- gems-v1-<< parameters.ruby-version >>-{{ checksum "Gemfile.lock" }}
|
|
16
|
+
- gems-v1-<< parameters.ruby-version >>-<< parameters.gemfile >>-{{ checksum "Gemfile.lock" }}
|
|
17
|
+
- gems-v1-<< parameters.ruby-version >>-<< parameters.gemfile >>
|
|
18
18
|
- gems-v1-<< parameters.ruby-version >>
|
|
19
|
-
- run:
|
|
20
|
-
- run:
|
|
21
|
-
- run:
|
|
19
|
+
- run: .circleci/bundler_version.sh
|
|
20
|
+
- run: bundle config set --local path $HOME/project/vendor/bundle
|
|
21
|
+
- run: bundle install --jobs=4 --retry=3
|
|
22
|
+
- run: bundle clean --force
|
|
23
|
+
- run: bundle env
|
|
22
24
|
- save_cache:
|
|
23
25
|
paths:
|
|
24
26
|
- ./vendor/bundle
|
|
25
|
-
key: gems-v1-<< parameters.ruby-version >>-{{ checksum "Gemfile.lock" }}
|
|
26
|
-
- run:
|
|
27
|
+
key: gems-v1-<< parameters.ruby-version >>-<< parameters.gemfile >>-{{ checksum "Gemfile.lock" }}
|
|
28
|
+
- run: << parameters.command >>
|
|
27
29
|
|
|
28
30
|
jobs:
|
|
29
|
-
|
|
31
|
+
build_artifacts:
|
|
30
32
|
docker:
|
|
31
|
-
|
|
33
|
+
- image: circleci/ruby:2.6
|
|
32
34
|
steps:
|
|
33
35
|
- checkout
|
|
36
|
+
- run: mkdir -p ~/artifacts
|
|
37
|
+
- run: gem build honeycomb-beeline.gemspec
|
|
38
|
+
- run: cp honeycomb-beeline-*.gem ~/artifacts/
|
|
39
|
+
- persist_to_workspace:
|
|
40
|
+
root: ~/
|
|
41
|
+
paths:
|
|
42
|
+
- artifacts
|
|
43
|
+
- store_artifacts:
|
|
44
|
+
path: ~/artifacts
|
|
45
|
+
|
|
46
|
+
publish_rubygems:
|
|
47
|
+
docker:
|
|
48
|
+
- image: circleci/ruby:2.6
|
|
49
|
+
steps:
|
|
50
|
+
- attach_workspace:
|
|
51
|
+
at: ~/
|
|
52
|
+
- run:
|
|
53
|
+
name: "Artifacts being published"
|
|
54
|
+
command: |
|
|
55
|
+
echo "about to publish to tag ${CIRCLE_TAG}"
|
|
56
|
+
ls -l ~/artifacts/*
|
|
57
|
+
- checkout
|
|
34
58
|
- run:
|
|
35
59
|
name: Setup Rubygems
|
|
36
60
|
command: bash .circleci/setup-rubygems.sh
|
|
37
|
-
- run: gem
|
|
38
|
-
|
|
61
|
+
- run: gem push ~/artifacts/honeycomb-beeline-*.gem
|
|
62
|
+
|
|
63
|
+
publish_github:
|
|
64
|
+
docker:
|
|
65
|
+
- image: cibuilds/github:0.13.0
|
|
66
|
+
steps:
|
|
67
|
+
- attach_workspace:
|
|
68
|
+
at: ~/
|
|
69
|
+
- run:
|
|
70
|
+
name: "Artifacts being published"
|
|
71
|
+
command: |
|
|
72
|
+
echo "about to publish to tag ${CIRCLE_TAG}"
|
|
73
|
+
ls -l ~/artifacts/*
|
|
74
|
+
- run:
|
|
75
|
+
name: "GHR Draft"
|
|
76
|
+
command: ghr -draft -n ${CIRCLE_TAG} -t ${GITHUB_TOKEN} -u ${CIRCLE_PROJECT_USERNAME} -r ${CIRCLE_PROJECT_REPONAME} -c ${CIRCLE_SHA1} ${CIRCLE_TAG} ~/artifacts
|
|
77
|
+
|
|
39
78
|
lint:
|
|
40
79
|
parameters:
|
|
41
80
|
ruby-version:
|
|
@@ -43,9 +82,12 @@ jobs:
|
|
|
43
82
|
default: "2.6"
|
|
44
83
|
docker:
|
|
45
84
|
- image: circleci/ruby:<< parameters.ruby-version >>
|
|
85
|
+
environment:
|
|
86
|
+
BUNDLE_GEMFILE: ./Gemfile
|
|
46
87
|
steps:
|
|
47
88
|
- ruby:
|
|
48
89
|
ruby-version: << parameters.ruby-version >>
|
|
90
|
+
gemfile: root
|
|
49
91
|
command: bundle exec rake rubocop
|
|
50
92
|
test:
|
|
51
93
|
parameters:
|
|
@@ -55,11 +97,15 @@ jobs:
|
|
|
55
97
|
type: string
|
|
56
98
|
docker:
|
|
57
99
|
- image: circleci/ruby:<< parameters.ruby-version >>
|
|
100
|
+
environment:
|
|
101
|
+
BUNDLE_GEMFILE: gemfiles/<< parameters.gemfile >>.gemfile
|
|
58
102
|
steps:
|
|
59
103
|
- ruby:
|
|
60
104
|
ruby-version: << parameters.ruby-version >>
|
|
61
105
|
gemfile: << parameters.gemfile >>
|
|
62
106
|
command: bundle exec rake test
|
|
107
|
+
- store_test_results:
|
|
108
|
+
path: test/reports
|
|
63
109
|
|
|
64
110
|
workflows:
|
|
65
111
|
nightly:
|
|
@@ -73,62 +119,68 @@ workflows:
|
|
|
73
119
|
jobs:
|
|
74
120
|
- lint
|
|
75
121
|
- test: &test
|
|
122
|
+
name: test-<< matrix.gemfile >>-ruby_<< matrix.ruby-version >>
|
|
76
123
|
requires:
|
|
77
124
|
- lint
|
|
78
125
|
matrix:
|
|
79
126
|
parameters:
|
|
80
127
|
ruby-version: ["2.2", "2.3", "2.4", "2.5", "2.6", "2.7"]
|
|
81
128
|
gemfile:
|
|
82
|
-
-
|
|
83
|
-
-
|
|
84
|
-
-
|
|
85
|
-
-
|
|
86
|
-
-
|
|
87
|
-
-
|
|
88
|
-
-
|
|
89
|
-
-
|
|
90
|
-
-
|
|
91
|
-
-
|
|
92
|
-
-
|
|
93
|
-
-
|
|
94
|
-
-
|
|
95
|
-
-
|
|
96
|
-
-
|
|
97
|
-
-
|
|
129
|
+
- aws_2
|
|
130
|
+
- aws_3
|
|
131
|
+
- faraday_0
|
|
132
|
+
- faraday_1
|
|
133
|
+
- sequel4
|
|
134
|
+
- sequel5
|
|
135
|
+
- sinatra
|
|
136
|
+
- rack
|
|
137
|
+
- rails_41
|
|
138
|
+
- rails_42
|
|
139
|
+
- rails_5
|
|
140
|
+
- rails_51
|
|
141
|
+
- rails_52
|
|
142
|
+
- rails_6
|
|
143
|
+
- rails_61
|
|
144
|
+
- redis_3
|
|
145
|
+
- redis_4
|
|
98
146
|
exclude:
|
|
99
147
|
- ruby-version: "2.2"
|
|
100
|
-
gemfile:
|
|
148
|
+
gemfile: faraday_1
|
|
149
|
+
- ruby-version: "2.2"
|
|
150
|
+
gemfile: rails_52
|
|
101
151
|
- ruby-version: "2.2"
|
|
102
|
-
gemfile:
|
|
152
|
+
gemfile: rails_6
|
|
153
|
+
- ruby-version: "2.3"
|
|
154
|
+
gemfile: rails_6
|
|
155
|
+
- ruby-version: "2.4"
|
|
156
|
+
gemfile: rails_6
|
|
103
157
|
- ruby-version: "2.2"
|
|
104
|
-
gemfile:
|
|
158
|
+
gemfile: rails_61
|
|
105
159
|
- ruby-version: "2.3"
|
|
106
|
-
gemfile:
|
|
160
|
+
gemfile: rails_61
|
|
107
161
|
- ruby-version: "2.4"
|
|
108
|
-
gemfile:
|
|
162
|
+
gemfile: rails_61
|
|
109
163
|
- ruby-version: "2.4"
|
|
110
|
-
gemfile:
|
|
164
|
+
gemfile: rails_41
|
|
111
165
|
- ruby-version: "2.5"
|
|
112
|
-
gemfile:
|
|
166
|
+
gemfile: rails_41
|
|
113
167
|
- ruby-version: "2.6"
|
|
114
|
-
gemfile:
|
|
168
|
+
gemfile: rails_41
|
|
115
169
|
- ruby-version: "2.7"
|
|
116
|
-
gemfile:
|
|
170
|
+
gemfile: rails_41
|
|
117
171
|
- ruby-version: "2.7"
|
|
118
|
-
gemfile:
|
|
172
|
+
gemfile: rails_42
|
|
119
173
|
beeline:
|
|
120
174
|
jobs:
|
|
121
175
|
- lint:
|
|
122
|
-
filters:
|
|
176
|
+
filters: ®ular_filters
|
|
123
177
|
tags:
|
|
124
178
|
only: /.*/
|
|
125
179
|
- test:
|
|
126
180
|
<<: *test
|
|
127
|
-
filters:
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
- publish:
|
|
131
|
-
filters:
|
|
181
|
+
filters: *regular_filters
|
|
182
|
+
- build_artifacts:
|
|
183
|
+
filters: &tag_filters
|
|
132
184
|
tags:
|
|
133
185
|
only: /^v.*/
|
|
134
186
|
branches:
|
|
@@ -136,3 +188,10 @@ workflows:
|
|
|
136
188
|
requires:
|
|
137
189
|
- lint
|
|
138
190
|
- test
|
|
191
|
+
- publish_rubygems: &publish
|
|
192
|
+
filters: *tag_filters
|
|
193
|
+
requires:
|
|
194
|
+
- build_artifacts
|
|
195
|
+
- publish_github:
|
|
196
|
+
<<: *publish
|
|
197
|
+
context: Honeycomb Secrets for Public Repos
|
data/.github/CODEOWNERS
CHANGED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# To get started with Dependabot version updates, you'll need to specify which
|
|
2
|
+
# package ecosystems to update and where the package manifests are located.
|
|
3
|
+
# Please see the documentation for all configuration options:
|
|
4
|
+
# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
|
|
5
|
+
|
|
6
|
+
version: 2
|
|
7
|
+
updates:
|
|
8
|
+
- package-ecosystem: "bundler" # See documentation for possible values
|
|
9
|
+
directory: "/gemfiles/" # Location of package manifests
|
|
10
|
+
schedule:
|
|
11
|
+
interval: "weekly"
|
|
12
|
+
labels:
|
|
13
|
+
- "type: dependencies"
|
|
14
|
+
reviewers:
|
|
15
|
+
- "honeycombio/telemetry-team"
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
name: Apply project management flow
|
|
2
|
+
on:
|
|
3
|
+
issues:
|
|
4
|
+
types: [opened]
|
|
5
|
+
pull_request_target:
|
|
6
|
+
types: [opened]
|
|
7
|
+
jobs:
|
|
8
|
+
project-management:
|
|
9
|
+
runs-on: ubuntu-latest
|
|
10
|
+
name: Apply project management flow
|
|
11
|
+
steps:
|
|
12
|
+
- uses: honeycombio/oss-management-actions/projects@v1
|
|
13
|
+
with:
|
|
14
|
+
ghprojects-token: ${{ secrets.GHPROJECTS_TOKEN }}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
name: Apply project labels
|
|
2
|
+
on: [issues, pull_request, label]
|
|
3
|
+
jobs:
|
|
4
|
+
apply-labels:
|
|
5
|
+
runs-on: ubuntu-latest
|
|
6
|
+
name: Apply common project labels
|
|
7
|
+
steps:
|
|
8
|
+
- uses: honeycombio/oss-management-actions/labels@v1
|
|
9
|
+
with:
|
|
10
|
+
github-token: ${{ secrets.GITHUB_TOKEN }}
|
data/.gitignore
CHANGED
data/.rspec
CHANGED
data/.tool-versions
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ruby 2.7.2
|
data/CHANGELOG.md
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# beeline-ruby changelog
|
|
2
|
+
|
|
3
|
+
## 2.5.0 2021-07-16
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- Allow backtrace to be sent with errors (#160) | [@lirossarvet](https://github.com/lirossarvet)
|
|
8
|
+
|
|
9
|
+
### Maintenance
|
|
10
|
+
|
|
11
|
+
- Updates Github Action Workflows (#159) | [@bdarfler](https://github.com/bdarfler)
|
|
12
|
+
- Adds dependabot label (#158) | [@bdarfler](https://github.com/bdarfler)
|
|
13
|
+
- Switches CODEOWNERS to telemetry-team (#157) | [@bdarfler](https://github.com/bdarfler)
|
|
14
|
+
|
|
15
|
+
## 2.4.2 2021-06-25
|
|
16
|
+
|
|
17
|
+
### Fixes
|
|
18
|
+
|
|
19
|
+
- Update Rails middleware to get status code even on raised error. (#153) [@lirossarvet](https://github.com/lirossarvet)
|
|
20
|
+
- Make Rails spec consistent with Honeycomb Railtie Initialization. (#154) [@robbkidd](https://github.com/robbkidd)
|
|
21
|
+
- CI Improvements (#155) [@robbkidd](https://github.com/robbkidd)
|
|
22
|
+
- Improve performance of Redis command serialization. (#146) [@ajvondrak](https://github.com/ajvondrak)
|
|
23
|
+
|
|
24
|
+
## 2.4.1 2021-06-01
|
|
25
|
+
|
|
26
|
+
### Fixes
|
|
27
|
+
|
|
28
|
+
- Updates Redis event-field filter to handle string keys in options in
|
|
29
|
+
addition to symbol keys. (#147) [@cupakromer](https://github.com/cupakromer)
|
|
30
|
+
|
|
31
|
+
### Maintenance
|
|
32
|
+
|
|
33
|
+
- Expanded on the Rails 5.2 example. (#141) [@robbkidd](https://github.com/robbkidd)
|
|
34
|
+
- Added a test case for current behavior of event emitted for an
|
|
35
|
+
exception raised in Rails. (@132) [@vreynolds](https://github.com/vreynolds)
|
|
36
|
+
|
|
37
|
+
## 2.4.0 2021-01-07
|
|
38
|
+
### Added
|
|
39
|
+
- Add support for HTTP Accept-Encoding header (#125) [@irvingreid](https://github.com/irvingreid)
|
|
40
|
+
- Add with_field, with_trace_field wrapper methods (#51) [@ajvondrak](https://github.com/ajvondrak)
|
|
41
|
+
|
|
42
|
+
## 2.3.0 2020-11-06
|
|
43
|
+
### Improvements
|
|
44
|
+
- Custom trace header hooks (#117)
|
|
45
|
+
- Add rspec filter :focus for assisting with debugging tests (#120)
|
|
46
|
+
- Be more lenient in expected output from AWS gem (#119)
|
|
47
|
+
|
|
48
|
+
## 2.2.0 2020-09-02
|
|
49
|
+
### New things
|
|
50
|
+
- refactor parsers/propagators, add w3c and aws parsers and propagators (#104) [@katiebayes](https://github.com/katiebayes)
|
|
51
|
+
|
|
52
|
+
### Tiny fix
|
|
53
|
+
- Adjusted a threshold that should resolve the occasional build failures (#107) [@katiebayes](https://github.com/katiebayes)
|
|
54
|
+
|
|
55
|
+
## 2.1.2 2020-08-26
|
|
56
|
+
### Improvements
|
|
57
|
+
- reference current span in start_span (#105) [@rintaun](https://github.com/rintaun)
|
|
58
|
+
- switch trace and span ids over to w3c-supported formats (#100) [@katiebayes](https://github.com/katiebayes)
|
|
59
|
+
|
|
60
|
+
## 2.1.1 2020-07-28
|
|
61
|
+
### Fixes
|
|
62
|
+
- Remove children after sending | #98 | [@martin308](https://github.com/martin308)
|
|
63
|
+
|
|
64
|
+
## 2.1.0 2020-06-10
|
|
65
|
+
### Features
|
|
66
|
+
- Adding X-Forwarded-For to instrumented fields | #91 | [@paulosman](https://github.com/paulosman)
|
|
67
|
+
- Add request.header.accept_language field | #94 | [@timcraft](https://github.com/timcraft)
|
|
68
|
+
- Support custom notifications based on a regular expression | #92 | [@mrchucho](https://github.com/mrchucho)
|
|
69
|
+
|
|
70
|
+
### Fixes
|
|
71
|
+
- Properly pass options for Ruby 2.7 | #85 | [@terracatta](https://github.com/terracatta)
|
|
72
|
+
- Fix regex substitution for warden and empty? errors for Rack | #88 | [@irvingreid](https://github.com/irvingreid)
|
|
73
|
+
|
|
74
|
+
## 2.0.0 2020-03-10
|
|
75
|
+
See [release notes](https://github.com/honeycombio/beeline-ruby/releases/tag/v2.0.0)
|
|
76
|
+
|
|
77
|
+
## 1.3.0 2019-11-20
|
|
78
|
+
### Features
|
|
79
|
+
- redis integration | #42 | [@ajvondrak](https://github.com/ajvondrak)
|
|
80
|
+
|
|
81
|
+
## 1.2.0 2019-11-04
|
|
82
|
+
### Features
|
|
83
|
+
- aws-sdk v2 & v3 integration | #40 | [@ajvondrak](https://github.com/ajvondrak)
|
|
84
|
+
|
|
85
|
+
## 1.1.1 2019-10-10
|
|
86
|
+
### Fixes
|
|
87
|
+
- Skip params when unavailable | #39 | [@martin308](https://github.com/martin308)
|
|
88
|
+
|
|
89
|
+
## 1.1.0 2019-10-07
|
|
90
|
+
### Features
|
|
91
|
+
- Split rails and railtie integrations | #35 | [@martin308](https://github.com/martin308)
|
|
92
|
+
|
|
93
|
+
## 1.0.1 2019-09-03
|
|
94
|
+
### Fixes
|
|
95
|
+
- Set sample_hook and presend_hook on child spans | #26 | [@orangejulius](https://github.com/orangejulius)
|
|
96
|
+
- No-op if no client found in Faraday integration | #27 | [@Sergio-Mira](https://github.com/Sergio-Mira)
|
|
97
|
+
|
|
98
|
+
## 1.0.0 2019-07-23
|
|
99
|
+
Version 1 is a milestone release. A complete re-write and modernization of Honeycomb's Ruby support.
|
|
100
|
+
See UPGRADING.md for migrating from v0.8.0 and see https://docs.honeycomb.io for full documentation.
|
|
101
|
+
|
|
102
|
+
## 0.8.0 2019-05-06
|
|
103
|
+
### Enhancements
|
|
104
|
+
- Expose event to #span block | #17 | [@eternal44](https://github.com/eternal44)
|
|
105
|
+
|
|
106
|
+
## 0.7.0 2019-03-13
|
|
107
|
+
### Enhancements
|
|
108
|
+
- Remove default inclusion of Sequel instrumentation | #12 | [@martin308](https://github.com/martin308)
|
|
109
|
+
|
|
110
|
+
## 0.6.0 2018-11-29
|
|
111
|
+
### Enhancements
|
|
112
|
+
- Tracing API and cross-process tracing | #4 | [@samstokes](https://github.com/samstokes)
|
|
113
|
+
|
|
114
|
+
## 0.5.0 2018-11-29
|
|
115
|
+
### Enhancements
|
|
116
|
+
- Improved rails support | #3 | [@samstokes](https://github.com/samstokes)
|
data/Gemfile.lock
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
honeycomb-beeline (2.
|
|
4
|
+
honeycomb-beeline (2.5.0)
|
|
5
5
|
libhoney (~> 1.14, >= 1.14.2)
|
|
6
6
|
|
|
7
7
|
GEM
|
|
@@ -29,6 +29,7 @@ GEM
|
|
|
29
29
|
docile (1.3.2)
|
|
30
30
|
domain_name (0.5.20190701)
|
|
31
31
|
unf (>= 0.0.5, < 1.0.0)
|
|
32
|
+
excon (0.82.0)
|
|
32
33
|
ffi (1.12.2)
|
|
33
34
|
ffi-compiler (1.0.1)
|
|
34
35
|
ffi (>= 1.0.0)
|
|
@@ -39,16 +40,17 @@ GEM
|
|
|
39
40
|
http-cookie (~> 1.0)
|
|
40
41
|
http-form_data (~> 2.2)
|
|
41
42
|
http-parser (~> 1.2.0)
|
|
42
|
-
http-cookie (1.0.
|
|
43
|
+
http-cookie (1.0.4)
|
|
43
44
|
domain_name (~> 0.5)
|
|
44
45
|
http-form_data (2.3.0)
|
|
45
|
-
http-parser (1.2.
|
|
46
|
+
http-parser (1.2.3)
|
|
46
47
|
ffi-compiler (>= 1.0, < 2.0)
|
|
47
48
|
iniparse (1.5.0)
|
|
48
49
|
jaro_winkler (1.5.4)
|
|
49
50
|
json (2.3.1)
|
|
50
|
-
libhoney (1.
|
|
51
|
+
libhoney (1.18.0)
|
|
51
52
|
addressable (~> 2.0)
|
|
53
|
+
excon
|
|
52
54
|
http (>= 2.0, < 5.0)
|
|
53
55
|
method_source (0.9.2)
|
|
54
56
|
overcommit (0.46.0)
|
|
@@ -79,6 +81,8 @@ GEM
|
|
|
79
81
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
80
82
|
rspec-support (~> 3.9.0)
|
|
81
83
|
rspec-support (3.9.3)
|
|
84
|
+
rspec_junit_formatter (0.4.1)
|
|
85
|
+
rspec-core (>= 2, < 4, != 2.12.0)
|
|
82
86
|
rubocop (0.68.1)
|
|
83
87
|
jaro_winkler (~> 1.5.1)
|
|
84
88
|
parallel (~> 1.10)
|
|
@@ -124,6 +128,7 @@ DEPENDENCIES
|
|
|
124
128
|
pry-byebug (~> 3.6.0)
|
|
125
129
|
rake
|
|
126
130
|
rspec (~> 3.0)
|
|
131
|
+
rspec_junit_formatter
|
|
127
132
|
rubocop (< 0.69)
|
|
128
133
|
rubocop-performance (< 1.3.0)
|
|
129
134
|
simplecov
|
|
@@ -131,4 +136,4 @@ DEPENDENCIES
|
|
|
131
136
|
webmock
|
|
132
137
|
|
|
133
138
|
BUNDLED WITH
|
|
134
|
-
2.
|
|
139
|
+
2.2.21
|
data/UPGRADING.md
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# Upgrade Guide
|
|
2
2
|
|
|
3
|
+
## 1.0.0 - 2.0.0
|
|
4
|
+
|
|
5
|
+
1. See release notes: https://github.com/honeycombio/beeline-ruby/releases/tag/v2.0.0
|
|
6
|
+
1. This update requires no code changes, but you must be aware of certain instrumentation changes. New fields will be added to your dataset and other fields will be removed.
|
|
7
|
+
1. ActionController::Parameters will now result in extra fields, or nested json, depending on your unfurl settings.
|
|
8
|
+
1. aws.params are now exploded into separate fields.
|
|
9
|
+
1. request.error becomes error.
|
|
10
|
+
1. request.error_detail becomes error_detail
|
|
11
|
+
1. request.protocol becomes request.scheme
|
|
12
|
+
|
|
3
13
|
## 0.8.0 - 1.0.0
|
|
4
14
|
|
|
5
15
|
1. If you have a web application, remove beeline configuration from the `config.ru` file
|
data/honeycomb-beeline.gemspec
CHANGED
|
@@ -48,6 +48,7 @@ Gem::Specification.new do |spec|
|
|
|
48
48
|
spec.add_development_dependency "pry-byebug", "~> 3.6.0"
|
|
49
49
|
spec.add_development_dependency "rake"
|
|
50
50
|
spec.add_development_dependency "rspec", "~> 3.0"
|
|
51
|
+
spec.add_development_dependency "rspec_junit_formatter"
|
|
51
52
|
spec.add_development_dependency "rubocop", "< 0.69"
|
|
52
53
|
spec.add_development_dependency "rubocop-performance", "< 1.3.0"
|
|
53
54
|
spec.add_development_dependency "simplecov"
|
data/lib/honeycomb-beeline.rb
CHANGED
|
@@ -26,7 +26,8 @@ module Honeycomb
|
|
|
26
26
|
attr_reader :client
|
|
27
27
|
|
|
28
28
|
def_delegators :@client, :libhoney, :start_span, :add_field,
|
|
29
|
-
:add_field_to_trace, :current_span, :current_trace
|
|
29
|
+
:add_field_to_trace, :current_span, :current_trace,
|
|
30
|
+
:with_field, :with_trace_field
|
|
30
31
|
|
|
31
32
|
def configure
|
|
32
33
|
Configuration.new.tap do |config|
|
data/lib/honeycomb/client.rb
CHANGED
|
@@ -38,6 +38,7 @@ module Honeycomb
|
|
|
38
38
|
parser_hook: configuration.http_trace_parser_hook,
|
|
39
39
|
propagation_hook: configuration.http_trace_propagation_hook,
|
|
40
40
|
}
|
|
41
|
+
@error_backtrace_limit = configuration.error_backtrace_limit.to_i
|
|
41
42
|
|
|
42
43
|
configuration.after_initialize(self)
|
|
43
44
|
|
|
@@ -47,16 +48,7 @@ module Honeycomb
|
|
|
47
48
|
end
|
|
48
49
|
|
|
49
50
|
def start_span(name:, serialized_trace: nil, **fields)
|
|
50
|
-
|
|
51
|
-
Trace.new(serialized_trace: serialized_trace,
|
|
52
|
-
builder: libhoney.builder,
|
|
53
|
-
context: context,
|
|
54
|
-
**@additional_trace_options)
|
|
55
|
-
else
|
|
56
|
-
context.current_span.create_child
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
current_span = context.current_span
|
|
51
|
+
current_span = new_span_for_context(serialized_trace: serialized_trace)
|
|
60
52
|
|
|
61
53
|
fields.each do |key, value|
|
|
62
54
|
current_span.add_field(key, value)
|
|
@@ -69,8 +61,8 @@ module Honeycomb
|
|
|
69
61
|
begin
|
|
70
62
|
yield current_span
|
|
71
63
|
rescue StandardError => e
|
|
72
|
-
current_span
|
|
73
|
-
|
|
64
|
+
add_exception_data(current_span, e)
|
|
65
|
+
|
|
74
66
|
raise e
|
|
75
67
|
ensure
|
|
76
68
|
current_span.send
|
|
@@ -89,8 +81,49 @@ module Honeycomb
|
|
|
89
81
|
context.current_span.trace.add_field("app.#{key}", value)
|
|
90
82
|
end
|
|
91
83
|
|
|
84
|
+
def with_field(key)
|
|
85
|
+
yield.tap { |value| add_field(key, value) }
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def with_trace_field(key)
|
|
89
|
+
yield.tap { |value| add_field_to_trace(key, value) }
|
|
90
|
+
end
|
|
91
|
+
|
|
92
92
|
private
|
|
93
93
|
|
|
94
|
-
attr_reader :context
|
|
94
|
+
attr_reader :context, :error_backtrace_limit
|
|
95
|
+
|
|
96
|
+
def new_span_for_context(serialized_trace:)
|
|
97
|
+
if context.current_trace.nil?
|
|
98
|
+
Trace.new(
|
|
99
|
+
serialized_trace: serialized_trace,
|
|
100
|
+
builder: libhoney.builder,
|
|
101
|
+
context: context,
|
|
102
|
+
**@additional_trace_options,
|
|
103
|
+
)
|
|
104
|
+
else
|
|
105
|
+
context.current_span.create_child
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
context.current_span
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def add_exception_data(span, exception)
|
|
112
|
+
span.add_field("error", exception.class.name)
|
|
113
|
+
span.add_field("error_detail", exception.message)
|
|
114
|
+
|
|
115
|
+
return if error_backtrace_limit <= 0
|
|
116
|
+
|
|
117
|
+
span.add_field(
|
|
118
|
+
"error_backtrace",
|
|
119
|
+
exception
|
|
120
|
+
.backtrace
|
|
121
|
+
.take(error_backtrace_limit)
|
|
122
|
+
.join("\n")
|
|
123
|
+
.encode("UTF-8", invalid: :replace, undef: :replace, replace: "�"),
|
|
124
|
+
)
|
|
125
|
+
span.add_field("error_backtrace_limit", error_backtrace_limit)
|
|
126
|
+
span.add_field("error_backtrace_total_length", exception.backtrace.length)
|
|
127
|
+
end
|
|
95
128
|
end
|
|
96
129
|
end
|
|
@@ -12,12 +12,14 @@ module Honeycomb
|
|
|
12
12
|
:debug
|
|
13
13
|
|
|
14
14
|
attr_writer :service_name, :client, :host_name
|
|
15
|
+
attr_reader :error_backtrace_limit
|
|
15
16
|
|
|
16
17
|
def initialize
|
|
17
18
|
@write_key = ENV["HONEYCOMB_WRITEKEY"]
|
|
18
19
|
@dataset = ENV["HONEYCOMB_DATASET"]
|
|
19
20
|
@service_name = ENV["HONEYCOMB_SERVICE"]
|
|
20
21
|
@debug = ENV.key?("HONEYCOMB_DEBUG")
|
|
22
|
+
@error_backtrace_limit = 0
|
|
21
23
|
@client = nil
|
|
22
24
|
end
|
|
23
25
|
|
|
@@ -25,6 +27,10 @@ module Honeycomb
|
|
|
25
27
|
@service_name || dataset
|
|
26
28
|
end
|
|
27
29
|
|
|
30
|
+
def error_backtrace_limit=(val)
|
|
31
|
+
@error_backtrace_limit = Integer(val)
|
|
32
|
+
end
|
|
33
|
+
|
|
28
34
|
def client
|
|
29
35
|
options = {}.tap do |o|
|
|
30
36
|
o[:writekey] = write_key
|
|
@@ -17,6 +17,7 @@ module Honeycomb
|
|
|
17
17
|
["HTTP_X_FORWARDED_PROTO", "request.header.x_forwarded_proto"],
|
|
18
18
|
["HTTP_X_FORWARDED_PORT", "request.header.x_forwarded_port"],
|
|
19
19
|
["HTTP_ACCEPT", "request.header.accept"],
|
|
20
|
+
["HTTP_ACCEPT_ENCODING", "request.header.accept_encoding"],
|
|
20
21
|
["HTTP_ACCEPT_LANGUAGE", "request.header.accept_language"],
|
|
21
22
|
["CONTENT_TYPE", "request.header.content_type"],
|
|
22
23
|
["HTTP_USER_AGENT", "request.header.user_agent"],
|
|
@@ -47,11 +48,12 @@ module Honeycomb
|
|
|
47
48
|
span.add_field("request.secure", req.ssl?)
|
|
48
49
|
span.add_field("request.xhr", req.xhr?)
|
|
49
50
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
51
|
+
begin
|
|
52
|
+
status, headers, body = call_with_hook(env, span, &add_field)
|
|
53
|
+
ensure
|
|
54
|
+
add_package_information(env, &add_field)
|
|
55
|
+
extract_user_information(env, &add_field)
|
|
56
|
+
end
|
|
55
57
|
|
|
56
58
|
span.add_field("response.status_code", status)
|
|
57
59
|
span.add_field("response.content_type", headers["Content-Type"])
|
|
@@ -71,6 +73,12 @@ module Honeycomb
|
|
|
71
73
|
end
|
|
72
74
|
end
|
|
73
75
|
|
|
76
|
+
private
|
|
77
|
+
|
|
78
|
+
def call_with_hook(env, _span, &_add_field)
|
|
79
|
+
app.call(env)
|
|
80
|
+
end
|
|
81
|
+
|
|
74
82
|
# Rack middleware
|
|
75
83
|
class Middleware
|
|
76
84
|
include Rack
|
|
@@ -89,6 +89,16 @@ module Honeycomb
|
|
|
89
89
|
include Rack
|
|
90
90
|
include Warden
|
|
91
91
|
include Rails
|
|
92
|
+
|
|
93
|
+
def call_with_hook(env, span, &_add_field)
|
|
94
|
+
super
|
|
95
|
+
rescue StandardError => e
|
|
96
|
+
wrapped = ActionDispatch::ExceptionWrapper.new(nil, e)
|
|
97
|
+
|
|
98
|
+
span.add_field "response.status_code", wrapped.status_code
|
|
99
|
+
|
|
100
|
+
raise e
|
|
101
|
+
end
|
|
92
102
|
end
|
|
93
103
|
end
|
|
94
104
|
end
|
|
@@ -159,7 +159,17 @@ module Honeycomb
|
|
|
159
159
|
# * :logger - just some Ruby object, not useful
|
|
160
160
|
# * :_parsed - implementation detail
|
|
161
161
|
def ignore?(option)
|
|
162
|
-
|
|
162
|
+
# Redis options may be symbol or string keys.
|
|
163
|
+
#
|
|
164
|
+
# This normalizes `option` using `to_sym` as benchmarking on Ruby MRI
|
|
165
|
+
# v2.6.6 and v2.7.3 has shown that was faster compared to `to_s`.
|
|
166
|
+
# However, `nil` does not support `to_sym`. This uses a guard clause to
|
|
167
|
+
# handle the `nil` case because this is still faster than safe
|
|
168
|
+
# navigation. Also this lib still supports Ruby 2.2.0; which does not
|
|
169
|
+
# include safe navigation.
|
|
170
|
+
return true unless option
|
|
171
|
+
|
|
172
|
+
%i[url password logger _parsed].include?(option.to_sym)
|
|
163
173
|
end
|
|
164
174
|
|
|
165
175
|
def format(cmd)
|
|
@@ -177,16 +187,6 @@ module Honeycomb
|
|
|
177
187
|
args.map! { "[sanitized]" }
|
|
178
188
|
end
|
|
179
189
|
|
|
180
|
-
def prettify(arg)
|
|
181
|
-
quotes = false
|
|
182
|
-
pretty = "".dup
|
|
183
|
-
arg.to_s.each_char do |c|
|
|
184
|
-
quotes ||= needs_quotes?(c)
|
|
185
|
-
pretty << escape(c)
|
|
186
|
-
end
|
|
187
|
-
quotes ? "\"#{pretty}\"" : pretty
|
|
188
|
-
end
|
|
189
|
-
|
|
190
190
|
# This aims to replicate the algorithms used by redis-cli.
|
|
191
191
|
#
|
|
192
192
|
# @see https://github.com/antirez/redis/blob/0f026af185e918a9773148f6ceaa1b084662be88/src/sds.c#L940-L1067
|
|
@@ -194,54 +194,15 @@ module Honeycomb
|
|
|
194
194
|
#
|
|
195
195
|
# @see https://github.com/antirez/redis/blob/0f026af185e918a9773148f6ceaa1b084662be88/src/sds.c#L878-L907
|
|
196
196
|
# The redis-cli printing algorithm
|
|
197
|
-
def
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
# A lookup table for backslash-escaped characters.
|
|
205
|
-
#
|
|
206
|
-
# This is used by {#escape_with_backslash?} and {#escape_with_backslash}
|
|
207
|
-
# to replicate the hard-coded `case` statements in redis-cli. As of this
|
|
208
|
-
# writing, Redis recognizes a handful of standard C escape sequences,
|
|
209
|
-
# like "\n" for newlines.
|
|
210
|
-
#
|
|
211
|
-
# Because {#prettify} will output double quoted strings if any escaping
|
|
212
|
-
# is needed, this table must additionally consider the double-quote to be
|
|
213
|
-
# a backslash-escaped character. For example, instead of generating
|
|
214
|
-
#
|
|
215
|
-
# '"hello"'
|
|
216
|
-
#
|
|
217
|
-
# we'll generate
|
|
218
|
-
#
|
|
219
|
-
# "\"hello\""
|
|
220
|
-
#
|
|
221
|
-
# even though redis-cli would technically recognize the single-quoted
|
|
222
|
-
# version.
|
|
223
|
-
#
|
|
224
|
-
# @see https://github.com/antirez/redis/blob/0f026af185e918a9773148f6ceaa1b084662be88/src/sds.c#L888-L896
|
|
225
|
-
# The redis-cli algorithm for outputting standard escape sequences
|
|
226
|
-
BACKSLASHES = {
|
|
227
|
-
"\\" => "\\\\",
|
|
228
|
-
'"' => '\\"',
|
|
229
|
-
"\n" => "\\n",
|
|
230
|
-
"\r" => "\\r",
|
|
231
|
-
"\t" => "\\t",
|
|
232
|
-
"\a" => "\\a",
|
|
233
|
-
"\b" => "\\b",
|
|
234
|
-
}.freeze
|
|
235
|
-
|
|
236
|
-
def escape_with_backslash?(char)
|
|
237
|
-
BACKSLASHES.key?(char)
|
|
238
|
-
end
|
|
239
|
-
|
|
240
|
-
def escape_with_backslash(char)
|
|
241
|
-
BACKSLASHES.fetch(char, char)
|
|
197
|
+
def prettify(arg)
|
|
198
|
+
pretty = arg.to_s.dup
|
|
199
|
+
pretty.encode!("UTF-8", "binary", fallback: ->(c) { hex(c) })
|
|
200
|
+
pretty.gsub!(NEEDS_BACKSLASH, BACKSLASH)
|
|
201
|
+
pretty.gsub!(NEEDS_HEX) { |c| hex(c) }
|
|
202
|
+
pretty =~ NEEDS_QUOTES ? "\"#{pretty}\"" : pretty
|
|
242
203
|
end
|
|
243
204
|
|
|
244
|
-
#
|
|
205
|
+
# A regular expression matching characters that need to be hex-encoded.
|
|
245
206
|
#
|
|
246
207
|
# This replicates the C isprint() function that redis-cli uses to decide
|
|
247
208
|
# whether to escape a character in hexadecimal notation, "\xhh". Any
|
|
@@ -277,18 +238,95 @@ module Honeycomb
|
|
|
277
238
|
# escape it.
|
|
278
239
|
#
|
|
279
240
|
# What's more, Ruby's Regexp#=~ method will blow up if the string does
|
|
280
|
-
# not have a valid encoding (e.g., in UTF-8).
|
|
281
|
-
#
|
|
282
|
-
# invalid
|
|
283
|
-
# invalidly-encoded characters before testing the above match.
|
|
241
|
+
# not have a valid encoding (e.g., in UTF-8). We handle this case
|
|
242
|
+
# separately, though, using String#encode! with a :fallback option to
|
|
243
|
+
# hex-encode invalid UTF-8 byte sequences with {#hex}.
|
|
284
244
|
#
|
|
285
245
|
# @see https://ruby-doc.org/core-2.6.5/Regexp.html
|
|
286
246
|
# @see https://github.com/antirez/redis/blob/0f026af185e918a9773148f6ceaa1b084662be88/src/sds.c#L878-L880
|
|
287
247
|
# @see https://github.com/antirez/redis/blob/0f026af185e918a9773148f6ceaa1b084662be88/src/sds.c#L898-L901
|
|
288
248
|
# @see https://www.justinweiss.com/articles/3-steps-to-fix-encoding-problems-in-ruby/
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
249
|
+
NEEDS_HEX = /[^[:print:]&&[:ascii:]]/.freeze
|
|
250
|
+
|
|
251
|
+
# A regular expression for characters that need to be backslash-escaped.
|
|
252
|
+
#
|
|
253
|
+
# Any match of this regexp will be substituted according to the
|
|
254
|
+
# {BACKSLASH} table. This includes standard C escape sequences (newlines,
|
|
255
|
+
# tabs, etc) as well as a couple special considerations:
|
|
256
|
+
#
|
|
257
|
+
# 1. Because {#prettify} will output double quoted strings if any
|
|
258
|
+
# escaping is needed, we must match double quotes (") so they'll be
|
|
259
|
+
# replaced by escaped quotes (\").
|
|
260
|
+
#
|
|
261
|
+
# 2. Backslashes themselves get backslash-escaped, so \ becomes \\.
|
|
262
|
+
# However, strings with invalid UTF-8 encoding will blow up when we
|
|
263
|
+
# try to use String#gsub!, so {#prettify} must first use
|
|
264
|
+
# String#encode! to scrub out invalid characters. It does this by
|
|
265
|
+
# replacing invalid bytes with hex-encoded escape sequences using
|
|
266
|
+
# {#hex}. This will insert sequences like \xhh, which contains a
|
|
267
|
+
# backslash that we *don't* want to escape.
|
|
268
|
+
#
|
|
269
|
+
# Unfortunately, this regexp can't really distinguish between
|
|
270
|
+
# backslashes in the original input vs backslashes resulting from the
|
|
271
|
+
# UTF-8 fallback. We make an effort by using a negative lookahead.
|
|
272
|
+
# That way, only backslashes that *aren't* followed by x + hex digit +
|
|
273
|
+
# hex digit will be escaped.
|
|
274
|
+
NEEDS_BACKSLASH = /["\n\r\t\a\b]|\\(?!x\h\h)/.freeze
|
|
275
|
+
|
|
276
|
+
# A lookup table for backslash-escaped characters.
|
|
277
|
+
#
|
|
278
|
+
# This is used by {#prettify} to replicate the hard-coded `case`
|
|
279
|
+
# statements in redis-cli. As of this writing, Redis recognizes a handful
|
|
280
|
+
# of standard C escape sequences, like "\n" for newlines.
|
|
281
|
+
#
|
|
282
|
+
# Because {#prettify} will output double quoted strings if any escaping
|
|
283
|
+
# is needed, this table must additionally consider the double-quote to be
|
|
284
|
+
# a backslash-escaped character. For example, instead of generating
|
|
285
|
+
#
|
|
286
|
+
# '"hello"'
|
|
287
|
+
#
|
|
288
|
+
# we'll generate
|
|
289
|
+
#
|
|
290
|
+
# "\"hello\""
|
|
291
|
+
#
|
|
292
|
+
# even though redis-cli would technically recognize the single-quoted
|
|
293
|
+
# version.
|
|
294
|
+
#
|
|
295
|
+
# @see https://github.com/antirez/redis/blob/0f026af185e918a9773148f6ceaa1b084662be88/src/sds.c#L888-L896
|
|
296
|
+
# The redis-cli algorithm for outputting standard escape sequences
|
|
297
|
+
BACKSLASH = {
|
|
298
|
+
"\\" => "\\\\",
|
|
299
|
+
'"' => '\\"',
|
|
300
|
+
"\n" => "\\n",
|
|
301
|
+
"\r" => "\\r",
|
|
302
|
+
"\t" => "\\t",
|
|
303
|
+
"\a" => "\\a",
|
|
304
|
+
"\b" => "\\b",
|
|
305
|
+
}.freeze
|
|
306
|
+
|
|
307
|
+
# If the final escaped string needs quotes, it will match this regexp.
|
|
308
|
+
#
|
|
309
|
+
# The overall string returned by {#prettify} should only be quoted if at
|
|
310
|
+
# least one of the following holds:
|
|
311
|
+
#
|
|
312
|
+
# 1. The string contains an escape sequence, broadly demarcated by a
|
|
313
|
+
# backslash. This includes standard escape sequences like "\n" and
|
|
314
|
+
# "\t" as well as hex-encoded bytes using the "\x" escape sequence.
|
|
315
|
+
# Since {#prettify} uses double quotes on its output string, we must
|
|
316
|
+
# also force quotes if the string itself contains a literal
|
|
317
|
+
# double quote. This double quote behavior is handled tacitly by the
|
|
318
|
+
# {NEEDS_BACKSLASH} + {BACKSLASH} replacement.
|
|
319
|
+
#
|
|
320
|
+
# 2. The string contains a single quote. Since redis-cli recognizes
|
|
321
|
+
# single-quoted strings, we want to wrap the {#prettify} output in
|
|
322
|
+
# double quotes so that the literal single quote character isn't
|
|
323
|
+
# mistaken as the delimiter of a new string.
|
|
324
|
+
#
|
|
325
|
+
# 3. The string contains any whitespace characters. If the {#prettify}
|
|
326
|
+
# output weren't wrapped in quotes, whitespace would act as a
|
|
327
|
+
# separator between arguments to the Redis command. To group things
|
|
328
|
+
# together, we need to quote the string.
|
|
329
|
+
NEEDS_QUOTES = /[\\'\s]/.freeze
|
|
292
330
|
|
|
293
331
|
# Hex-encodes a (presumably non-printable or non-ASCII) character.
|
|
294
332
|
#
|
|
@@ -316,38 +354,9 @@ module Honeycomb
|
|
|
316
354
|
# @see https://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap07.html
|
|
317
355
|
# @see https://github.com/antirez/redis/blob/0f026af185e918a9773148f6ceaa1b084662be88/src/sds.c#L878-L880
|
|
318
356
|
# @see https://github.com/antirez/redis/blob/0f026af185e918a9773148f6ceaa1b084662be88/src/sds.c#L898-L901
|
|
319
|
-
def
|
|
357
|
+
def hex(char)
|
|
320
358
|
char.bytes.map { |b| Kernel.format("\\x%02x", b) }.join
|
|
321
359
|
end
|
|
322
|
-
|
|
323
|
-
def escape?(char)
|
|
324
|
-
escape_with_backslash?(char) || escape_with_hex_codes?(char)
|
|
325
|
-
end
|
|
326
|
-
|
|
327
|
-
# Should this character cause {#prettify} to wrap its output in quotes?
|
|
328
|
-
#
|
|
329
|
-
# The overall string returned by {#prettify} should only be quoted if at
|
|
330
|
-
# least one of the following holds:
|
|
331
|
-
#
|
|
332
|
-
# 1. The string contains a character that needs to be escaped. This
|
|
333
|
-
# includes standard backslash escape sequences (like "\n" and "\t") as
|
|
334
|
-
# well as hex-encoded bytes using the "\x" escape sequence. Since
|
|
335
|
-
# {#prettify} uses double quotes on its output string, we must also
|
|
336
|
-
# force quotes if the string itself contains a literal double quote.
|
|
337
|
-
# This double quote behavior is handled tacitly by {BACKSLASHES}.
|
|
338
|
-
#
|
|
339
|
-
# 2. The string contains a single quote. Since redis-cli recognizes
|
|
340
|
-
# single-quoted strings, we want to wrap the {#prettify} output in
|
|
341
|
-
# double quotes so that the literal single quote character isn't
|
|
342
|
-
# mistaken as the delimiter of a new string.
|
|
343
|
-
#
|
|
344
|
-
# 3. The string contains any whitespace characters. If the {#prettify}
|
|
345
|
-
# output weren't wrapped in quotes, whitespace would act as a
|
|
346
|
-
# separator between arguments to the Redis command. To group things
|
|
347
|
-
# together, we need to quote the string.
|
|
348
|
-
def needs_quotes?(char)
|
|
349
|
-
escape?(char) || char == "'" || char =~ /\s/
|
|
350
|
-
end
|
|
351
360
|
end
|
|
352
361
|
end
|
|
353
362
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: honeycomb-beeline
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.5.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Martin Holman
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2021-07-16 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: libhoney
|
|
@@ -156,6 +156,20 @@ dependencies:
|
|
|
156
156
|
- - "~>"
|
|
157
157
|
- !ruby/object:Gem::Version
|
|
158
158
|
version: '3.0'
|
|
159
|
+
- !ruby/object:Gem::Dependency
|
|
160
|
+
name: rspec_junit_formatter
|
|
161
|
+
requirement: !ruby/object:Gem::Requirement
|
|
162
|
+
requirements:
|
|
163
|
+
- - ">="
|
|
164
|
+
- !ruby/object:Gem::Version
|
|
165
|
+
version: '0'
|
|
166
|
+
type: :development
|
|
167
|
+
prerelease: false
|
|
168
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
169
|
+
requirements:
|
|
170
|
+
- - ">="
|
|
171
|
+
- !ruby/object:Gem::Version
|
|
172
|
+
version: '0'
|
|
159
173
|
- !ruby/object:Gem::Dependency
|
|
160
174
|
name: rubocop
|
|
161
175
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -238,12 +252,17 @@ files:
|
|
|
238
252
|
- ".circleci/setup-rubygems.sh"
|
|
239
253
|
- ".editorconfig"
|
|
240
254
|
- ".github/CODEOWNERS"
|
|
255
|
+
- ".github/dependabot.yml"
|
|
256
|
+
- ".github/workflows/add-to-project.yml"
|
|
257
|
+
- ".github/workflows/apply-labels.yml"
|
|
241
258
|
- ".gitignore"
|
|
242
259
|
- ".overcommit.yml"
|
|
243
260
|
- ".rspec"
|
|
244
261
|
- ".rubocop.yml"
|
|
245
262
|
- ".ruby-version"
|
|
263
|
+
- ".tool-versions"
|
|
246
264
|
- Appraisals
|
|
265
|
+
- CHANGELOG.md
|
|
247
266
|
- CODE_OF_CONDUCT.md
|
|
248
267
|
- CONTRIBUTORS.md
|
|
249
268
|
- Gemfile
|
|
@@ -303,7 +322,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
303
322
|
- !ruby/object:Gem::Version
|
|
304
323
|
version: '0'
|
|
305
324
|
requirements: []
|
|
306
|
-
rubygems_version: 3.0.3
|
|
325
|
+
rubygems_version: 3.0.3.1
|
|
307
326
|
signing_key:
|
|
308
327
|
specification_version: 4
|
|
309
328
|
summary: Instrument your Ruby apps with Honeycomb
|