highlight_io 0.1.1 → 0.1.2
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/.rubocop.yml +14 -0
- data/CHANGELOG.md +3 -0
- data/Gemfile +8 -3
- data/Gemfile.lock +42 -17
- data/README.md +10 -21
- data/Rakefile +6 -6
- data/bin/console +3 -3
- data/highlight.gemspec +15 -15
- data/lib/highlight/version.rb +1 -1
- data/lib/highlight.rb +128 -136
- metadata +31 -29
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 391312c21e44302ef6e836b0f33bce8af2ba7c739ec8e4999c996cf74614cbe4
|
|
4
|
+
data.tar.gz: ac48bca9cb8f1d0dc573d5077a1efadf0b38e9b6f539862c670c666f21b015c5
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: cf00cd6ae014743e2b6fdddd65fc52117d27d1679024f51aae7845f53bcbd51967063a1b1bcf0dca95e1d73abc3f0dc13738f3c345797daba709c3f9872381f6
|
|
7
|
+
data.tar.gz: 6979cc7ffbf29ddaea91432ff6e6e31f207197d1f1dbb10b71f988338df0617e68e4b179baf8ad296ea8c35112280979a8975c82b3245502f5dec32410315552
|
data/.rubocop.yml
ADDED
data/CHANGELOG.md
ADDED
data/Gemfile
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
|
-
source
|
|
1
|
+
source 'https://rubygems.org'
|
|
2
2
|
|
|
3
3
|
# Specify your gem's dependencies in highlight.gemspec
|
|
4
4
|
gemspec
|
|
5
5
|
|
|
6
|
-
gem
|
|
7
|
-
gem
|
|
6
|
+
gem 'minitest', '~> 5.0'
|
|
7
|
+
gem 'rake', '~> 12.0'
|
|
8
|
+
|
|
9
|
+
# Gemfile
|
|
10
|
+
group :development do
|
|
11
|
+
gem 'rubocop', require: false
|
|
12
|
+
end
|
data/Gemfile.lock
CHANGED
|
@@ -1,27 +1,29 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
|
|
4
|
+
highlight_io (0.1.2)
|
|
5
5
|
grpc (~> 1.52)
|
|
6
|
-
opentelemetry-exporter-otlp
|
|
7
|
-
opentelemetry-instrumentation-all
|
|
8
|
-
opentelemetry-sdk
|
|
9
|
-
opentelemetry-semantic_conventions
|
|
6
|
+
opentelemetry-exporter-otlp (~> 0.24.0)
|
|
7
|
+
opentelemetry-instrumentation-all (~> 0.32.0)
|
|
8
|
+
opentelemetry-sdk (~> 1.2)
|
|
9
|
+
opentelemetry-semantic_conventions (~> 1.8.0)
|
|
10
10
|
|
|
11
11
|
GEM
|
|
12
12
|
remote: https://rubygems.org/
|
|
13
13
|
specs:
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
ast (2.4.2)
|
|
15
|
+
google-protobuf (3.23.4-x86_64-linux)
|
|
16
|
+
googleapis-common-protos-types (1.7.0)
|
|
16
17
|
google-protobuf (~> 3.14)
|
|
17
|
-
grpc (1.
|
|
18
|
-
google-protobuf (~> 3.
|
|
18
|
+
grpc (1.56.2-x86_64-linux)
|
|
19
|
+
google-protobuf (~> 3.23)
|
|
19
20
|
googleapis-common-protos-types (~> 1.0)
|
|
21
|
+
json (2.6.3)
|
|
20
22
|
minitest (5.18.0)
|
|
21
23
|
opentelemetry-api (1.1.0)
|
|
22
|
-
opentelemetry-common (0.19.
|
|
24
|
+
opentelemetry-common (0.19.7)
|
|
23
25
|
opentelemetry-api (~> 1.0)
|
|
24
|
-
opentelemetry-exporter-otlp (0.24.
|
|
26
|
+
opentelemetry-exporter-otlp (0.24.2)
|
|
25
27
|
google-protobuf (~> 3.19)
|
|
26
28
|
googleapis-common-protos-types (~> 1.3)
|
|
27
29
|
opentelemetry-api (~> 1.1)
|
|
@@ -145,7 +147,7 @@ GEM
|
|
|
145
147
|
opentelemetry-instrumentation-que (0.5.1)
|
|
146
148
|
opentelemetry-api (~> 1.0)
|
|
147
149
|
opentelemetry-instrumentation-base (~> 0.21.0)
|
|
148
|
-
opentelemetry-instrumentation-racecar (0.1.
|
|
150
|
+
opentelemetry-instrumentation-racecar (0.1.2)
|
|
149
151
|
opentelemetry-api (~> 1.0)
|
|
150
152
|
opentelemetry-instrumentation-base (~> 0.21.0)
|
|
151
153
|
opentelemetry-instrumentation-rack (0.22.1)
|
|
@@ -163,7 +165,7 @@ GEM
|
|
|
163
165
|
opentelemetry-instrumentation-rake (0.1.1)
|
|
164
166
|
opentelemetry-api (~> 1.0)
|
|
165
167
|
opentelemetry-instrumentation-base (~> 0.21.0)
|
|
166
|
-
opentelemetry-instrumentation-rdkafka (0.2.
|
|
168
|
+
opentelemetry-instrumentation-rdkafka (0.2.3)
|
|
167
169
|
opentelemetry-api (~> 1.0)
|
|
168
170
|
opentelemetry-common (~> 0.19.3)
|
|
169
171
|
opentelemetry-instrumentation-base (~> 0.21.0)
|
|
@@ -196,23 +198,46 @@ GEM
|
|
|
196
198
|
opentelemetry-semantic_conventions (>= 1.8.0)
|
|
197
199
|
opentelemetry-registry (0.2.0)
|
|
198
200
|
opentelemetry-api (~> 1.1)
|
|
199
|
-
opentelemetry-sdk (1.2.
|
|
201
|
+
opentelemetry-sdk (1.2.1)
|
|
200
202
|
opentelemetry-api (~> 1.1)
|
|
201
203
|
opentelemetry-common (~> 0.19.3)
|
|
202
204
|
opentelemetry-registry (~> 0.2)
|
|
203
205
|
opentelemetry-semantic_conventions
|
|
204
206
|
opentelemetry-semantic_conventions (1.8.0)
|
|
205
207
|
opentelemetry-api (~> 1.0)
|
|
208
|
+
parallel (1.23.0)
|
|
209
|
+
parser (3.2.2.3)
|
|
210
|
+
ast (~> 2.4.1)
|
|
211
|
+
racc
|
|
212
|
+
racc (1.7.1)
|
|
213
|
+
rainbow (3.1.1)
|
|
206
214
|
rake (12.3.3)
|
|
215
|
+
regexp_parser (2.8.1)
|
|
216
|
+
rexml (3.2.6)
|
|
217
|
+
rubocop (1.50.2)
|
|
218
|
+
json (~> 2.3)
|
|
219
|
+
parallel (~> 1.10)
|
|
220
|
+
parser (>= 3.2.0.0)
|
|
221
|
+
rainbow (>= 2.2.2, < 4.0)
|
|
222
|
+
regexp_parser (>= 1.8, < 3.0)
|
|
223
|
+
rexml (>= 3.2.5, < 4.0)
|
|
224
|
+
rubocop-ast (>= 1.28.0, < 2.0)
|
|
225
|
+
ruby-progressbar (~> 1.7)
|
|
226
|
+
unicode-display_width (>= 2.4.0, < 3.0)
|
|
227
|
+
rubocop-ast (1.29.0)
|
|
228
|
+
parser (>= 3.2.1.0)
|
|
229
|
+
ruby-progressbar (1.13.0)
|
|
207
230
|
ruby2_keywords (0.0.5)
|
|
231
|
+
unicode-display_width (2.4.2)
|
|
208
232
|
|
|
209
233
|
PLATFORMS
|
|
210
|
-
|
|
234
|
+
x86_64-linux
|
|
211
235
|
|
|
212
236
|
DEPENDENCIES
|
|
213
|
-
|
|
237
|
+
highlight_io!
|
|
214
238
|
minitest (~> 5.0)
|
|
215
239
|
rake (~> 12.0)
|
|
240
|
+
rubocop
|
|
216
241
|
|
|
217
242
|
BUNDLED WITH
|
|
218
|
-
2.
|
|
243
|
+
2.4.18
|
data/README.md
CHANGED
|
@@ -1,17 +1,9 @@
|
|
|
1
1
|
# Highlight
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
TODO: Delete this and the text above, and describe your gem
|
|
3
|
+
This is the Highlight Ruby SDK
|
|
6
4
|
|
|
7
5
|
## Installation
|
|
8
6
|
|
|
9
|
-
Add this line to your application's Gemfile:
|
|
10
|
-
|
|
11
|
-
```ruby
|
|
12
|
-
gem 'highlight'
|
|
13
|
-
```
|
|
14
|
-
|
|
15
7
|
And then execute:
|
|
16
8
|
|
|
17
9
|
$ bundle install
|
|
@@ -20,21 +12,18 @@ Or install it yourself as:
|
|
|
20
12
|
|
|
21
13
|
$ gem install highlight
|
|
22
14
|
|
|
23
|
-
## Usage
|
|
24
|
-
|
|
25
|
-
TODO: Write usage instructions here
|
|
26
|
-
|
|
27
|
-
## Development
|
|
28
|
-
|
|
29
|
-
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
|
30
|
-
|
|
31
|
-
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
|
32
15
|
|
|
33
16
|
## Contributing
|
|
34
17
|
|
|
35
|
-
|
|
18
|
+
* Install [rbenv](https://github.com/rbenv/rbenv)
|
|
19
|
+
* Install ruby `rbenv install`
|
|
20
|
+
* Install bundle `gem install bundler`
|
|
21
|
+
* Install dependencies `bundle install`
|
|
22
|
+
|
|
23
|
+
### Testing
|
|
36
24
|
|
|
25
|
+
* `bundle exec rake`
|
|
37
26
|
|
|
38
|
-
|
|
27
|
+
### Linting
|
|
39
28
|
|
|
40
|
-
|
|
29
|
+
* `bundle exec rubocop` (use with `-a` to autocorrect)
|
data/Rakefile
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
require
|
|
2
|
-
require
|
|
1
|
+
require 'bundler/gem_tasks'
|
|
2
|
+
require 'rake/testtask'
|
|
3
3
|
|
|
4
4
|
Rake::TestTask.new(:test) do |t|
|
|
5
|
-
t.libs <<
|
|
6
|
-
t.libs <<
|
|
7
|
-
t.test_files = FileList[
|
|
5
|
+
t.libs << 'test'
|
|
6
|
+
t.libs << 'lib'
|
|
7
|
+
t.test_files = FileList['test/**/*_test.rb']
|
|
8
8
|
end
|
|
9
9
|
|
|
10
|
-
task :
|
|
10
|
+
task default: :test
|
data/bin/console
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
2
|
|
|
3
|
-
require
|
|
4
|
-
require
|
|
3
|
+
require 'bundler/setup'
|
|
4
|
+
require 'highlight'
|
|
5
5
|
|
|
6
6
|
# You can add fixtures and/or initialization code here to make experimenting
|
|
7
7
|
# with your gem easier. You can also use a different console, if you like.
|
|
@@ -10,5 +10,5 @@ require "highlight"
|
|
|
10
10
|
# require "pry"
|
|
11
11
|
# Pry.start
|
|
12
12
|
|
|
13
|
-
require
|
|
13
|
+
require 'irb'
|
|
14
14
|
IRB.start(__FILE__)
|
data/highlight.gemspec
CHANGED
|
@@ -1,30 +1,30 @@
|
|
|
1
1
|
require_relative 'lib/highlight/version'
|
|
2
2
|
|
|
3
3
|
Gem::Specification.new do |spec|
|
|
4
|
-
spec.name =
|
|
4
|
+
spec.name = 'highlight_io'
|
|
5
5
|
spec.version = Highlight::VERSION
|
|
6
|
-
spec.authors = [
|
|
7
|
-
spec.email = [
|
|
6
|
+
spec.authors = ['Highlight']
|
|
7
|
+
spec.email = ['support@highlight.io']
|
|
8
8
|
|
|
9
|
-
spec.summary =
|
|
10
|
-
spec.homepage =
|
|
11
|
-
spec.license =
|
|
12
|
-
spec.required_ruby_version = Gem::Requirement.new(
|
|
9
|
+
spec.summary = 'The Highlight SDK for Ruby'
|
|
10
|
+
spec.homepage = 'https://www.highlight.io'
|
|
11
|
+
spec.license = 'MIT'
|
|
12
|
+
spec.required_ruby_version = Gem::Requirement.new('>= 2.6.0')
|
|
13
13
|
|
|
14
|
-
spec.metadata[
|
|
14
|
+
spec.metadata['homepage_uri'] = spec.homepage
|
|
15
15
|
|
|
16
16
|
# Specify which files should be added to the gem when it is released.
|
|
17
17
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
|
18
|
-
spec.files
|
|
18
|
+
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
|
19
19
|
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
|
20
20
|
end
|
|
21
|
-
spec.bindir =
|
|
21
|
+
spec.bindir = 'exe'
|
|
22
22
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
23
|
-
spec.require_paths = [
|
|
23
|
+
spec.require_paths = ['lib']
|
|
24
24
|
|
|
25
|
-
spec.add_runtime_dependency 'opentelemetry-sdk'
|
|
26
|
-
spec.add_runtime_dependency 'opentelemetry-exporter-otlp'
|
|
27
|
-
spec.add_runtime_dependency 'opentelemetry-instrumentation-all'
|
|
28
|
-
spec.add_runtime_dependency 'opentelemetry-semantic_conventions'
|
|
29
25
|
spec.add_runtime_dependency 'grpc', '~> 1.52'
|
|
26
|
+
spec.add_runtime_dependency 'opentelemetry-exporter-otlp', '~> 0.24.0'
|
|
27
|
+
spec.add_runtime_dependency 'opentelemetry-instrumentation-all', '~> 0.32.0'
|
|
28
|
+
spec.add_runtime_dependency 'opentelemetry-sdk', '~> 1.2'
|
|
29
|
+
spec.add_runtime_dependency 'opentelemetry-semantic_conventions', '~> 1.8.0'
|
|
30
30
|
end
|
data/lib/highlight/version.rb
CHANGED
data/lib/highlight.rb
CHANGED
|
@@ -1,155 +1,147 @@
|
|
|
1
|
-
require
|
|
2
|
-
require
|
|
3
|
-
require
|
|
4
|
-
require
|
|
5
|
-
require
|
|
1
|
+
require 'opentelemetry/sdk'
|
|
2
|
+
require 'opentelemetry/exporter/otlp'
|
|
3
|
+
require 'opentelemetry/instrumentation/all'
|
|
4
|
+
require 'opentelemetry/semantic_conventions'
|
|
5
|
+
require 'logger'
|
|
6
6
|
|
|
7
7
|
module Highlight
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
def self.instance
|
|
22
|
-
return @@instance
|
|
23
|
-
end
|
|
8
|
+
class H
|
|
9
|
+
HIGHLIGHT_REQUEST_HEADER = 'X-Highlight-Request'.freeze
|
|
10
|
+
OTLP_HTTP = 'https://otel.highlight.io:4318'.freeze
|
|
11
|
+
HIGHLIGHT_PROJECT_ATTRIBUTE = 'highlight.project_id'.freeze
|
|
12
|
+
HIGHLIGHT_SESSION_ATTRIBUTE = 'highlight.session_id'.freeze
|
|
13
|
+
HIGHLIGHT_TRACE_ATTRIBUTE = 'highlight.trace_id'.freeze
|
|
14
|
+
LOG_EVENT = 'log'.freeze
|
|
15
|
+
LOG_SEVERITY_ATTRIBUTE = 'log.severity'.freeze
|
|
16
|
+
LOG_MESSAGE_ATTRIBUTE = 'log.message'.freeze
|
|
17
|
+
CODE_FILEPATH = OpenTelemetry::SemanticConventions::Trace::CODE_FILEPATH
|
|
18
|
+
CODE_LINENO = OpenTelemetry::SemanticConventions::Trace::CODE_LINENO
|
|
19
|
+
CODE_FUNCTION = OpenTelemetry::SemanticConventions::Trace::CODE_FUNCTION
|
|
24
20
|
|
|
25
|
-
|
|
26
|
-
|
|
21
|
+
def self.instance
|
|
22
|
+
@@instance
|
|
23
|
+
end
|
|
27
24
|
|
|
28
|
-
|
|
29
|
-
|
|
25
|
+
def initialize(project_id, otlp_endpoint = OTLP_HTTP)
|
|
26
|
+
@@instance = self # rubocop:disable Style/ClassVars
|
|
30
27
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
c.add_span_processor(OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor.new(
|
|
34
|
-
OpenTelemetry::Exporter::OTLP::Exporter.new(endpoint: @otlp_endpoint + "/v1/traces")
|
|
35
|
-
))
|
|
36
|
-
end
|
|
28
|
+
@project_id = project_id
|
|
29
|
+
@otlp_endpoint = otlp_endpoint
|
|
37
30
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
31
|
+
OpenTelemetry::SDK.configure do |c|
|
|
32
|
+
c.add_span_processor(OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor.new(
|
|
33
|
+
OpenTelemetry::Exporter::OTLP::Exporter.new(endpoint: "#{@otlp_endpoint}/v1/traces")
|
|
34
|
+
))
|
|
35
|
+
yield c if block_given?
|
|
36
|
+
end
|
|
41
37
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
38
|
+
@tracer_provider = OpenTelemetry.tracer_provider
|
|
39
|
+
@tracer = @tracer_provider.tracer('highlight-tracer')
|
|
40
|
+
end
|
|
45
41
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
HIGHLIGHT_SESSION_ATTRIBUTE => session_id,
|
|
50
|
-
HIGHLIGHT_TRACE_ATTRIBUTE => request_id,
|
|
51
|
-
}.compact) do |span|
|
|
52
|
-
begin
|
|
53
|
-
yield
|
|
54
|
-
rescue => e
|
|
55
|
-
record_exception(e)
|
|
56
|
-
raise
|
|
57
|
-
end
|
|
58
|
-
end
|
|
59
|
-
end
|
|
42
|
+
def flush
|
|
43
|
+
@tracer_provider.force_flush
|
|
44
|
+
end
|
|
60
45
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
46
|
+
def trace(session_id, request_id)
|
|
47
|
+
@tracer.in_span('highlight-ctx', attributes: {
|
|
48
|
+
HIGHLIGHT_PROJECT_ATTRIBUTE => @project_id,
|
|
49
|
+
HIGHLIGHT_SESSION_ATTRIBUTE => session_id,
|
|
50
|
+
HIGHLIGHT_TRACE_ATTRIBUTE => request_id
|
|
51
|
+
}.compact) do |_span|
|
|
52
|
+
yield
|
|
53
|
+
rescue StandardError => e
|
|
54
|
+
record_exception(e)
|
|
55
|
+
raise
|
|
56
|
+
end
|
|
57
|
+
end
|
|
66
58
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
if function
|
|
71
|
-
# format: "in `<function_name>""
|
|
72
|
-
function.delete_prefix!("in `")
|
|
73
|
-
function.delete_suffix!("\"")
|
|
74
|
-
end
|
|
75
|
-
@tracer.in_span("highlight-ctx", attributes: {
|
|
76
|
-
HIGHLIGHT_PROJECT_ATTRIBUTE => @project_id,
|
|
77
|
-
HIGHLIGHT_SESSION_ATTRIBUTE => session_id,
|
|
78
|
-
HIGHLIGHT_TRACE_ATTRIBUTE => request_id,
|
|
79
|
-
}.compact) do |span|
|
|
80
|
-
if level == Logger::ERROR || level == Logger::FATAL
|
|
81
|
-
span.status = OpenTelemetry::Trace::Status.error(message)
|
|
82
|
-
end
|
|
83
|
-
span.add_event(LOG_EVENT, attributes: {
|
|
84
|
-
LOG_SEVERITY_ATTRIBUTE => H.log_level_string(level),
|
|
85
|
-
LOG_MESSAGE_ATTRIBUTE => message,
|
|
86
|
-
CODE_FILEPATH => caller_info[0],
|
|
87
|
-
CODE_LINENO => caller_info[1],
|
|
88
|
-
CODE_FUNCTION => function,
|
|
89
|
-
}.merge(attrs))
|
|
90
|
-
end
|
|
91
|
-
end
|
|
59
|
+
def record_exception(e)
|
|
60
|
+
span = OpenTelemetry::Trace.current_span
|
|
61
|
+
return unless span
|
|
92
62
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
if headers && headers[HIGHLIGHT_REQUEST_HEADER]
|
|
96
|
-
session_id, request_id = headers[HIGHLIGHT_REQUEST_HEADER].split("/")
|
|
97
|
-
return HighlightHeaders.new(session_id, request_id)
|
|
98
|
-
end
|
|
99
|
-
return HighlightHeaders.new(nil, nil)
|
|
100
|
-
end
|
|
63
|
+
span.record_exception(e)
|
|
64
|
+
end
|
|
101
65
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
66
|
+
def record_log(session_id, request_id, level, message, attrs = {})
|
|
67
|
+
caller_info = caller[0].split(':', 3)
|
|
68
|
+
function = caller_info[2]
|
|
69
|
+
if function
|
|
70
|
+
# format: "in `<function_name>""
|
|
71
|
+
function.delete_prefix!('in `')
|
|
72
|
+
function.delete_suffix!('"')
|
|
73
|
+
end
|
|
74
|
+
@tracer.in_span('highlight-ctx', attributes: {
|
|
75
|
+
HIGHLIGHT_PROJECT_ATTRIBUTE => @project_id,
|
|
76
|
+
HIGHLIGHT_SESSION_ATTRIBUTE => session_id,
|
|
77
|
+
HIGHLIGHT_TRACE_ATTRIBUTE => request_id
|
|
78
|
+
}.compact) do |span|
|
|
79
|
+
span.status = OpenTelemetry::Trace::Status.error(message) if [Logger::ERROR, Logger::FATAL].include?(level)
|
|
80
|
+
span.add_event(LOG_EVENT, attributes: {
|
|
81
|
+
LOG_SEVERITY_ATTRIBUTE => H.log_level_string(level),
|
|
82
|
+
LOG_MESSAGE_ATTRIBUTE => message,
|
|
83
|
+
CODE_FILEPATH => caller_info[0],
|
|
84
|
+
CODE_LINENO => caller_info[1],
|
|
85
|
+
CODE_FUNCTION => function
|
|
86
|
+
}.merge(attrs))
|
|
87
|
+
end
|
|
122
88
|
end
|
|
123
89
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
if progname.nil?
|
|
132
|
-
progname = @progname
|
|
133
|
-
end
|
|
134
|
-
if message.nil?
|
|
135
|
-
if block_given?
|
|
136
|
-
message = yield
|
|
137
|
-
else
|
|
138
|
-
message = progname
|
|
139
|
-
progname = @progname
|
|
140
|
-
end
|
|
141
|
-
end
|
|
142
|
-
super
|
|
143
|
-
H.instance.record_log(nil, nil, severity, message)
|
|
144
|
-
end
|
|
90
|
+
HighlightHeaders = Struct.new('HighlightHeaders', :session_id, :request_id)
|
|
91
|
+
def self.parse_headers(headers)
|
|
92
|
+
if headers && headers[HIGHLIGHT_REQUEST_HEADER]
|
|
93
|
+
session_id, request_id = headers[HIGHLIGHT_REQUEST_HEADER].split('/')
|
|
94
|
+
return HighlightHeaders.new(session_id, request_id)
|
|
95
|
+
end
|
|
96
|
+
HighlightHeaders.new(nil, nil)
|
|
145
97
|
end
|
|
146
98
|
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
99
|
+
def self.log_level_string(level)
|
|
100
|
+
case level
|
|
101
|
+
when Logger::UNKNOWN
|
|
102
|
+
'UNKNOWN'
|
|
103
|
+
when Logger::FATAL
|
|
104
|
+
'FATAL'
|
|
105
|
+
when Logger::ERROR
|
|
106
|
+
'ERROR'
|
|
107
|
+
when Logger::WARN
|
|
108
|
+
'WARN'
|
|
109
|
+
when Logger::INFO
|
|
110
|
+
'INFO'
|
|
111
|
+
when Logger::DEBUG
|
|
112
|
+
'DEBUG'
|
|
113
|
+
else
|
|
114
|
+
'UNKNOWN'
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
class Logger < ::Logger
|
|
120
|
+
def add(severity, message = nil, progname = nil)
|
|
121
|
+
# https://github.com/ruby/logger/blob/master/lib/logger.rb
|
|
122
|
+
severity ||= UNKNOWN
|
|
123
|
+
return true if @logdev.nil? or severity < level # rubocop:disable Style/AndOr
|
|
124
|
+
|
|
125
|
+
progname = @progname if progname.nil?
|
|
126
|
+
if message.nil?
|
|
127
|
+
if block_given?
|
|
128
|
+
message = yield
|
|
129
|
+
else
|
|
130
|
+
message = progname
|
|
131
|
+
progname = @progname
|
|
153
132
|
end
|
|
133
|
+
end
|
|
134
|
+
super
|
|
135
|
+
H.instance.record_log(nil, nil, severity, message)
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
module Integrations
|
|
140
|
+
module Rails
|
|
141
|
+
def with_highlight_context(&block)
|
|
142
|
+
highlight_headers = H.parse_headers(request.headers)
|
|
143
|
+
H.instance.trace(highlight_headers.session_id, highlight_headers.request_id, &block)
|
|
144
|
+
end
|
|
154
145
|
end
|
|
146
|
+
end
|
|
155
147
|
end
|
metadata
CHANGED
|
@@ -1,86 +1,86 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: highlight_io
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Highlight
|
|
8
|
-
autorequire:
|
|
8
|
+
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2023-
|
|
11
|
+
date: 2023-08-10 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
|
-
name:
|
|
14
|
+
name: grpc
|
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
|
16
16
|
requirements:
|
|
17
|
-
- - "
|
|
17
|
+
- - "~>"
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: '
|
|
19
|
+
version: '1.52'
|
|
20
20
|
type: :runtime
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
|
-
- - "
|
|
24
|
+
- - "~>"
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: '
|
|
26
|
+
version: '1.52'
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: opentelemetry-exporter-otlp
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
|
31
|
-
- - "
|
|
31
|
+
- - "~>"
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
|
-
version:
|
|
33
|
+
version: 0.24.0
|
|
34
34
|
type: :runtime
|
|
35
35
|
prerelease: false
|
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
37
|
requirements:
|
|
38
|
-
- - "
|
|
38
|
+
- - "~>"
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
|
-
version:
|
|
40
|
+
version: 0.24.0
|
|
41
41
|
- !ruby/object:Gem::Dependency
|
|
42
42
|
name: opentelemetry-instrumentation-all
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
44
44
|
requirements:
|
|
45
|
-
- - "
|
|
45
|
+
- - "~>"
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
|
-
version:
|
|
47
|
+
version: 0.32.0
|
|
48
48
|
type: :runtime
|
|
49
49
|
prerelease: false
|
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
51
|
requirements:
|
|
52
|
-
- - "
|
|
52
|
+
- - "~>"
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
|
-
version:
|
|
54
|
+
version: 0.32.0
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
|
-
name: opentelemetry-
|
|
56
|
+
name: opentelemetry-sdk
|
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
|
58
58
|
requirements:
|
|
59
|
-
- - "
|
|
59
|
+
- - "~>"
|
|
60
60
|
- !ruby/object:Gem::Version
|
|
61
|
-
version: '
|
|
61
|
+
version: '1.2'
|
|
62
62
|
type: :runtime
|
|
63
63
|
prerelease: false
|
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
65
|
requirements:
|
|
66
|
-
- - "
|
|
66
|
+
- - "~>"
|
|
67
67
|
- !ruby/object:Gem::Version
|
|
68
|
-
version: '
|
|
68
|
+
version: '1.2'
|
|
69
69
|
- !ruby/object:Gem::Dependency
|
|
70
|
-
name:
|
|
70
|
+
name: opentelemetry-semantic_conventions
|
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
|
72
72
|
requirements:
|
|
73
73
|
- - "~>"
|
|
74
74
|
- !ruby/object:Gem::Version
|
|
75
|
-
version:
|
|
75
|
+
version: 1.8.0
|
|
76
76
|
type: :runtime
|
|
77
77
|
prerelease: false
|
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
79
|
requirements:
|
|
80
80
|
- - "~>"
|
|
81
81
|
- !ruby/object:Gem::Version
|
|
82
|
-
version:
|
|
83
|
-
description:
|
|
82
|
+
version: 1.8.0
|
|
83
|
+
description:
|
|
84
84
|
email:
|
|
85
85
|
- support@highlight.io
|
|
86
86
|
executables: []
|
|
@@ -88,7 +88,9 @@ extensions: []
|
|
|
88
88
|
extra_rdoc_files: []
|
|
89
89
|
files:
|
|
90
90
|
- ".gitignore"
|
|
91
|
+
- ".rubocop.yml"
|
|
91
92
|
- ".travis.yml"
|
|
93
|
+
- CHANGELOG.md
|
|
92
94
|
- Gemfile
|
|
93
95
|
- Gemfile.lock
|
|
94
96
|
- LICENSE.txt
|
|
@@ -104,7 +106,7 @@ licenses:
|
|
|
104
106
|
- MIT
|
|
105
107
|
metadata:
|
|
106
108
|
homepage_uri: https://www.highlight.io
|
|
107
|
-
post_install_message:
|
|
109
|
+
post_install_message:
|
|
108
110
|
rdoc_options: []
|
|
109
111
|
require_paths:
|
|
110
112
|
- lib
|
|
@@ -112,15 +114,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
112
114
|
requirements:
|
|
113
115
|
- - ">="
|
|
114
116
|
- !ruby/object:Gem::Version
|
|
115
|
-
version: 2.
|
|
117
|
+
version: 2.6.0
|
|
116
118
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
117
119
|
requirements:
|
|
118
120
|
- - ">="
|
|
119
121
|
- !ruby/object:Gem::Version
|
|
120
122
|
version: '0'
|
|
121
123
|
requirements: []
|
|
122
|
-
rubygems_version: 3.1
|
|
123
|
-
signing_key:
|
|
124
|
+
rubygems_version: 3.0.3.1
|
|
125
|
+
signing_key:
|
|
124
126
|
specification_version: 4
|
|
125
127
|
summary: The Highlight SDK for Ruby
|
|
126
128
|
test_files: []
|