uptrace 1.8.0 → 1.8.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 971f276de0abbfd5a5b4e505927b12a92f206a47f857c7d2a1f55106e1739dde
4
- data.tar.gz: ed4e4cb6f17964dc4819dca13b998a69fba3ac20ccea4ba54b14701d069d584e
3
+ metadata.gz: 136e2ee49600cd4a46886e29ff523d8ae51ab6e13a821613e6e2b49fa6d2aad1
4
+ data.tar.gz: 5460a5c99eeea8be633e763ec6a842e7b9f7806c279b9aff2e68bce5ad5308a8
5
5
  SHA512:
6
- metadata.gz: a4c60178f506bb083dc4fe13fedfac8f440feebac8a23c6dfd4040388448c2c20dee1977cdd65df69237dfd6626ed2604877fd418a699a4de58d91ffa844864b
7
- data.tar.gz: edb380d1fabc98cfd62b667dc3cdb8b343398a97e6ef89a1769057d6c6e6f91548ba1e37b65af7e475d31ee66c12c9ae52947c77437c1de5eafe28191b797fed
6
+ metadata.gz: a07eb5fb3e35f581672d5ea10a5b1d79c24cd731e17bceed2a22959a1efdc033be4543c005dea8c3de682e5724b2db685e0bff088ddb5f3ee74b554f5c800148
7
+ data.tar.gz: 9203d15f70e209accc41845d2e16462bc248d5a7d736f7e0cbe2f3b91f682f33e89ff03cc32dc71b264d3aeff43e095902e74966be2c7f3790fdefe0a021453b
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Uptrace Ruby exporter for OpenTelemetry
1
+ # OpenTelemetry Ruby distro for Uptrace
2
2
 
3
3
  ![build workflow](https://github.com/uptrace/uptrace-ruby/actions/workflows/build.yml/badge.svg)
4
4
  [![Documentation](https://img.shields.io/badge/uptrace-documentation-informational)](https://uptrace.dev/get/opentelemetry-ruby)
@@ -10,8 +10,11 @@
10
10
 
11
11
  ## Introduction
12
12
 
13
- uptrace-ruby is an OpenTelemery distribution configured to export
14
- [traces](https://uptrace.dev/opentelemetry/distributed-tracing) to Uptrace.
13
+ `uptrace-ruby` is a preconfigured [OpenTelemetry](https://opentelemetry.io)
14
+ distribution for Ruby that exports **traces, logs, and metrics** to
15
+ [Uptrace](https://uptrace.dev). It builds on top of
16
+ [opentelemetry-ruby](https://github.com/open-telemetry/opentelemetry-ruby) and
17
+ makes connecting your application to Uptrace fast and easy.
15
18
 
16
19
  ## Quickstart
17
20
 
@@ -21,7 +24,8 @@ Install uptrace-ruby:
21
24
  gem install uptrace
22
25
  ```
23
26
 
24
- Run the [basic example](example/basic) below using the DSN from the Uptrace project settings page.
27
+ Run the [traces example](example/traces) below using the DSN from the Uptrace
28
+ project settings page.
25
29
 
26
30
  ```ruby
27
31
  #!/usr/bin/env ruby
@@ -32,42 +36,52 @@ require 'bundler/setup'
32
36
  require 'uptrace'
33
37
 
34
38
  # Configure OpenTelemetry with sensible defaults.
35
- # Copy your project DSN here or use UPTRACE_DSN env var.
39
+ # DSN can be set via UPTRACE_DSN environment variable.
40
+ # Example: export UPTRACE_DSN="https://<project_secret>@uptrace.dev?grpc=4317"
36
41
  Uptrace.configure_opentelemetry(dsn: '') do |c|
37
- # c is OpenTelemetry::SDK::Configurator
42
+ # c is an instance of OpenTelemetry::SDK::Configurator
43
+
44
+ # Configure service metadata (helps identify this service in Uptrace).
38
45
  c.service_name = 'myservice'
39
46
  c.service_version = '1.0.0'
40
47
 
48
+ # Add environment information
41
49
  c.resource = OpenTelemetry::SDK::Resources::Resource.create(
42
- 'deployment.environment' => 'production'
50
+ 'deployment.environment.name' => ENV.fetch('RACK_ENV', 'development')
43
51
  )
44
52
  end
45
53
 
46
- # Create a tracer. Usually, tracer is a global variable.
47
- tracer = OpenTelemetry.tracer_provider.tracer('my_app_or_gem', '0.1.0')
48
-
49
- # Create a root span (a trace) to measure some operation.
50
- tracer.in_span('main-operation', kind: :client) do |main|
51
- tracer.in_span('GET /posts/:id') do |child1|
52
- child1.set_attribute('http.method', 'GET')
53
- child1.set_attribute('http.route', '/posts/:id')
54
- child1.set_attribute('http.url', 'http://localhost:8080/posts/123')
55
- child1.set_attribute('http.status_code', 200)
56
- child1.record_exception(ArgumentError.new('error1'))
54
+ # Ensure spans are flushed even if the program exits unexpectedly.
55
+ at_exit { OpenTelemetry.tracer_provider.shutdown }
56
+
57
+ # Register a tracer (usually stored globally).
58
+ TRACER = OpenTelemetry.tracer_provider.tracer('my_app', '0.1.0')
59
+
60
+ # Example trace with nested spans.
61
+ TRACER.in_span('main-operation', kind: :server) do |main_span|
62
+ # Simulate an HTTP request span.
63
+ TRACER.in_span('GET /posts/:id', kind: :client) do |http_span|
64
+ http_span.set_attribute('http.method', 'GET')
65
+ http_span.set_attribute('http.route', '/posts/:id')
66
+ http_span.set_attribute('http.url', 'http://localhost:8080/posts/123')
67
+ http_span.set_attribute('http.status_code', 200)
68
+ http_span.record_exception(ArgumentError.new('Invalid parameter'))
57
69
  end
58
70
 
59
- tracer.in_span('SELECT') do |child2|
60
- child2.set_attribute('db.system', 'mysql')
61
- child2.set_attribute('db.statement', 'SELECT * FROM posts LIMIT 100')
71
+ # Simulate a database query span.
72
+ TRACER.in_span('SELECT posts', kind: :client) do |db_span|
73
+ db_span.set_attribute('db.system', 'mysql')
74
+ db_span.set_attribute('db.statement', 'SELECT * FROM posts LIMIT 100')
62
75
  end
63
76
 
64
- puts("trace URL: #{Uptrace.trace_url(main)}")
77
+ # Print the trace URL (clickable in console).
78
+ puts "Trace URL: #{Uptrace.trace_url(main_span)}"
65
79
  end
66
-
67
- # Send buffered spans and free resources.
68
- OpenTelemetry.tracer_provider.shutdown
69
80
  ```
70
81
 
82
+ Additional examples are available for [logs](example/logs) and
83
+ [metrics](example/metrics).
84
+
71
85
  ## Links
72
86
 
73
87
  - [Examples](example)
data/RELEASING.md ADDED
@@ -0,0 +1,70 @@
1
+ # Releasing
2
+
3
+ This guide explains how to release a new version of the uptrace-ruby gem to
4
+ RubyGems.
5
+
6
+ ## Managing Dependencies
7
+
8
+ ### Checking for outdated dependencies
9
+
10
+ To view outdated dependencies:
11
+
12
+ ```shell
13
+ bundle outdated
14
+ ```
15
+
16
+ ### Updating dependencies
17
+
18
+ Edit the `Gemfile` to update dependency versions, then update the
19
+ `Gemfile.lock`:
20
+
21
+ ```shell
22
+ bundle update
23
+ ```
24
+
25
+ ### Installing dependencies
26
+
27
+ To install all dependencies:
28
+
29
+ ```shell
30
+ bundle install
31
+ ```
32
+
33
+ ## Running Tests
34
+
35
+ Before releasing, ensure all tests pass:
36
+
37
+ ```shell
38
+ rake test
39
+ ```
40
+
41
+ ## Running linter
42
+
43
+ To run linter:
44
+
45
+ ```shell
46
+ bundle exec rake
47
+ ```
48
+
49
+ To auto-correct issues:
50
+
51
+ ```shell
52
+ bundle exec rubocop -A
53
+ ```
54
+
55
+ ## Publishing a Release
56
+
57
+ 1. **Update the version**: Bump the version number in `lib/uptrace/version.rb`
58
+
59
+ 2. **Build and publish the gem**:
60
+
61
+ ```shell
62
+ gem build uptrace.gemspec
63
+ bundle install
64
+ gem push uptrace-X.Y.Z.gem
65
+ ```
66
+
67
+ Replace `X.Y.Z` with the actual version number you specified in step 1.
68
+
69
+ **Note**: Make sure you have the necessary permissions to push to the uptrace
70
+ gem on RubyGems before attempting to publish.
@@ -9,7 +9,7 @@ module Uptrace
9
9
 
10
10
  # @param [string] dsn
11
11
  def initialize(dsn: '')
12
- dsn = ENV.fetch('UPTRACE_DSN', '') if dsn.empty?
12
+ dsn = ENV.fetch('UPTRACE_DSN', '') if dsn.empty? || dsn == '<FIXME>'
13
13
 
14
14
  begin
15
15
  @dsn = DSN.new(dsn)
@@ -17,7 +17,7 @@ module Uptrace
17
17
  Uptrace.logger.error("Uptrace is disabled: #{e.message}")
18
18
  @disabled = true
19
19
 
20
- @dsn = DSN.new('https://TOKEN@uptrace.dev')
20
+ @dsn = DSN.new('https://project_secret@api.uptrace.dev?grpc=4317')
21
21
  end
22
22
  end
23
23
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Uptrace
4
- VERSION = '1.8.0'
4
+ VERSION = '1.8.1'
5
5
  end
data/lib/uptrace.rb CHANGED
@@ -2,24 +2,23 @@
2
2
 
3
3
  require 'logger'
4
4
 
5
+ require 'opentelemetry/sdk'
5
6
  require 'opentelemetry/exporter/otlp'
7
+
6
8
  require 'opentelemetry-metrics-sdk'
7
9
  require 'opentelemetry-exporter-otlp-metrics'
8
10
 
11
+ require 'opentelemetry-logs-sdk'
12
+ require 'opentelemetry/exporter/otlp_logs'
13
+
9
14
  # Uptrace provides Uptrace exporters for OpenTelemetry.
10
15
  module Uptrace
11
16
  extend self
12
17
 
13
18
  attr_accessor :logger
14
- attr_writer :client
15
19
 
16
20
  self.logger = Logger.new($stdout)
17
21
 
18
- # @return [Object, Client] registered client or a default no-op implementation of the client.
19
- def client
20
- @client ||= Client.new
21
- end
22
-
23
22
  # @param [optional OpenTelemetry::Trace::Span] span
24
23
  # @return [String]
25
24
  def trace_url(span = nil)
@@ -33,15 +32,32 @@ module Uptrace
33
32
  # @yieldparam [OpenTelemetry::SDK::Configurator] c Yields a configurator to the
34
33
  # provided block
35
34
  def configure_opentelemetry(dsn: '')
35
+ @client = Client.new(dsn: dsn)
36
+ return if @client.disabled?
37
+
36
38
  OpenTelemetry::SDK.configure do |c|
37
- @client = Client.new(dsn: dsn) unless dsn.empty?
38
- c.add_span_processor(span_processor(@client.dsn)) unless client.disabled?
39
+ # Set default IdGenerator and let users override
39
40
  c.id_generator = Uptrace::IdGenerator
41
+ c.add_span_processor(span_processor(@client.dsn))
40
42
 
41
43
  yield c if block_given?
44
+
45
+ # Merge resource
46
+ current_resource = c.instance_variable_get(:@resource)
47
+ current_resource ||= OpenTelemetry::SDK::Resources::Resource.create
48
+
49
+ host_resource = OpenTelemetry::SDK::Resources::Resource.create(
50
+ 'host.name' => Socket.gethostname
51
+ )
52
+ c.resource = current_resource.merge(host_resource)
42
53
  end
43
54
 
44
- OpenTelemetry.meter_provider.add_metric_reader(metric_exporter(@client.dsn))
55
+ me = metric_exporter(@client.dsn)
56
+ OpenTelemetry.meter_provider.add_metric_reader(me)
57
+
58
+ le = log_exporter(@client.dsn)
59
+ processor = OpenTelemetry::SDK::Logs::Export::BatchLogRecordProcessor.new(le)
60
+ OpenTelemetry.logger_provider.add_log_record_processor(processor)
45
61
  end
46
62
 
47
63
  private
@@ -67,6 +83,14 @@ module Uptrace
67
83
  compression: 'gzip'
68
84
  )
69
85
  end
86
+
87
+ def log_exporter(dsn)
88
+ OpenTelemetry::Exporter::OTLP::Logs::LogsExporter.new(
89
+ endpoint: "#{dsn.otlp_http_endpoint}/v1/logs",
90
+ headers: { 'uptrace-dsn': dsn.to_s },
91
+ compression: 'gzip'
92
+ )
93
+ end
70
94
  end
71
95
 
72
96
  require 'uptrace/version'
metadata CHANGED
@@ -1,14 +1,28 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: uptrace
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.8.0
4
+ version: 1.8.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Uptrace Authors
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2025-03-17 00:00:00.000000000 Z
10
+ date: 2025-07-23 00:00:00.000000000 Z
11
11
  dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: logger
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: 1.7.0
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: 1.7.0
12
26
  - !ruby/object:Gem::Dependency
13
27
  name: opentelemetry-exporter-otlp
14
28
  requirement: !ruby/object:Gem::Requirement
@@ -43,28 +57,56 @@ dependencies:
43
57
  requirements:
44
58
  - - "~>"
45
59
  - !ruby/object:Gem::Version
46
- version: 0.4.0
60
+ version: 0.5.0
47
61
  type: :runtime
48
62
  prerelease: false
49
63
  version_requirements: !ruby/object:Gem::Requirement
50
64
  requirements:
51
65
  - - "~>"
52
66
  - !ruby/object:Gem::Version
53
- version: 0.4.0
67
+ version: 0.5.0
54
68
  - !ruby/object:Gem::Dependency
55
69
  name: opentelemetry-metrics-sdk
56
70
  requirement: !ruby/object:Gem::Requirement
57
71
  requirements:
58
72
  - - "~>"
59
73
  - !ruby/object:Gem::Version
60
- version: 0.6.0
74
+ version: 0.7.3
61
75
  type: :runtime
62
76
  prerelease: false
63
77
  version_requirements: !ruby/object:Gem::Requirement
64
78
  requirements:
65
79
  - - "~>"
66
80
  - !ruby/object:Gem::Version
67
- version: 0.6.0
81
+ version: 0.7.3
82
+ - !ruby/object:Gem::Dependency
83
+ name: opentelemetry-exporter-otlp-logs
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: 0.2.0
89
+ type: :runtime
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: 0.2.0
96
+ - !ruby/object:Gem::Dependency
97
+ name: opentelemetry-logs-sdk
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: 0.2.0
103
+ type: :runtime
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: 0.2.0
68
110
  - !ruby/object:Gem::Dependency
69
111
  name: bundler
70
112
  requirement: !ruby/object:Gem::Requirement
@@ -177,7 +219,7 @@ dependencies:
177
219
  - - "~>"
178
220
  - !ruby/object:Gem::Version
179
221
  version: 0.1.6
180
- description: Uptrace Ruby exporter for OpenTelemetry
222
+ description: Configures OpenTelemetry Ruby to export data to Uptrace
181
223
  email:
182
224
  - support@uptrace.dev
183
225
  executables: []
@@ -187,7 +229,7 @@ files:
187
229
  - ".yardopts"
188
230
  - LICENSE
189
231
  - README.md
190
- - RELEASE.md
232
+ - RELEASING.md
191
233
  - TODO.md
192
234
  - lib/uptrace.rb
193
235
  - lib/uptrace/client.rb
@@ -215,5 +257,5 @@ required_rubygems_version: !ruby/object:Gem::Requirement
215
257
  requirements: []
216
258
  rubygems_version: 3.6.2
217
259
  specification_version: 4
218
- summary: Uptrace Ruby exporter for OpenTelemetry
260
+ summary: Uptrace wrapper for OpenTelemetry Ruby
219
261
  test_files: []
data/RELEASE.md DELETED
@@ -1,13 +0,0 @@
1
- Update dependencies:
2
-
3
- ```
4
- bundle update
5
- ```
6
-
7
- Bump version in `lib/uptrace/version.rb` and then run:
8
-
9
- ```shell
10
- gem build uptrace.gemspec
11
- bundle install
12
- gem push uptrace-0.2.0.gem
13
- ```