uptrace 0.2.0 → 0.2.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a05b7c62ea6f2a2fb078f3b8272951c1d114f8062ff833c14c3b5a9183524cb1
4
- data.tar.gz: 2876c7b4803b791d5955665a5fb8e97754355f9929c2a6b5ea39b511a839f54c
3
+ metadata.gz: 43f0392ed577dc7bd8e63985d033e8d8d89ccaa53ef76bbe32b9c7c28a5d5882
4
+ data.tar.gz: 12becd6950ec2bfd5bd81aa350a00dfdee9a91ce3034a4506b907edbe2213dff
5
5
  SHA512:
6
- metadata.gz: 9ce7612b3d87b3a32605996de564ce4f44821590bca24af38c6ef267d0a5c7c3d141a8241042bb36f86e532e4e38d971d3f82c9a096f69a1a58af5262efbd0af
7
- data.tar.gz: b9b4d42c52cdfac6ae3444a3d782c83c7d410941a8b4a63aaf05d318863fa229d30e588484746df86a60358d57c5eefc718611bc94987987c5082bd8017887a1
6
+ metadata.gz: 1447f636c276d492e6eeedabbe0d6f825b11c7bdb69312f8f9c45ea02436edd22318812f80aba2211d3d93f2f3ba0c3f637e9b616cfb9acdffc0288170501560
7
+ data.tar.gz: 685dc638c8506fbd17bb01aaf00fe2831cec1a7be8852ad9f484e1964df4f933fbb73c20e1a2bb266f0f7a3c52b55f40f5fceb28ccc9065877f1b9c19f2b1f21
data/RELEASE.md ADDED
@@ -0,0 +1,7 @@
1
+ Bump version and then run:
2
+
3
+ ```shell
4
+ gem build uptrace.gemspec
5
+ bundle install
6
+ gem push uptrace-0.2.0.gem
7
+ ```
data/lib/uptrace.rb CHANGED
@@ -7,8 +7,28 @@ module Uptrace
7
7
  extend self
8
8
 
9
9
  attr_accessor :logger
10
+ attr_writer :client
10
11
 
11
12
  self.logger = Logger.new($stdout)
13
+
14
+ # @return [Object, Client] registered client or a default no-op implementation of the client.
15
+ def client
16
+ @client ||= Client.new
17
+ end
18
+
19
+ def trace_url(span)
20
+ client.trace_url(span)
21
+ end
22
+
23
+ def configure_tracing(c, dsn: '')
24
+ upclient = if dsn.empty?
25
+ client
26
+ else
27
+ Client.new(dsn: dsn)
28
+ end
29
+
30
+ c.add_span_processor(upclient.span_processor) unless upclient.disabled?
31
+ end
12
32
  end
13
33
 
14
34
  require 'uptrace/version'
@@ -5,53 +5,41 @@ require 'opentelemetry/sdk'
5
5
  module Uptrace
6
6
  # Uptrace client that configures OpenTelemetry SDK to use Uptrace exporter.
7
7
  class Client
8
- ##
9
- # @yieldparam config [Uptrace::Config]
10
- # @return [void]
11
- #
12
- def initialize
13
- @cfg = Uptrace::Trace::Config.new
14
- yield @cfg if block_given?
8
+ # @param [string] dsn
9
+ def initialize(dsn: '')
10
+ dsn = ENV.fetch('UPTRACE_DSN', '') if dsn.empty?
15
11
 
16
12
  begin
17
- @cfg.dsno
13
+ @dsn = DSN.new(dsn)
18
14
  rescue ArgumentError => e
19
- Uptrace.logger.error(e.message)
20
- @cfg.disabled = true
15
+ Uptrace.logger.error("Uptrace is disabled: #{e.message}")
16
+ @disabled = true
21
17
 
22
- @cfg.dsn = 'https://TOKEN@api.uptrace.dev/PROJECT_ID'
18
+ @dsn = DSN.new('https://TOKEN@api.uptrace.dev/PROJECT_ID')
23
19
  end
24
-
25
- setup_tracing unless @cfg.disabled
26
20
  end
27
21
 
28
- # @param [optional Numeric] timeout An optional timeout in seconds.
29
- def shutdown(timeout: nil)
30
- return if @cfg.disabled
31
-
32
- OpenTelemetry.tracer_provider.shutdown(timeout: timeout)
22
+ def disabled?
23
+ @disabled
33
24
  end
34
25
 
35
- # @return [OpenTelemetry::Trace::Span]
26
+ # @param [OpenTelemetry::Trace::Span] span
27
+ # @return [String]
36
28
  def trace_url(span)
37
- dsn = @cfg.dsno
38
- host = dsn.host.delete_prefix('api.')
29
+ host = @dsn.host.delete_prefix('api.')
39
30
  trace_id = span.context.hex_trace_id
40
- "#{dsn.scheme}://#{host}/#{dsn.project_id}/search?q=#{trace_id}"
31
+ "#{@dsn.scheme}://#{host}/search/#{@dsn.project_id}?q=#{trace_id}"
41
32
  end
42
33
 
43
- private
44
-
45
- def setup_tracing
46
- exp = Uptrace::Trace::Exporter.new(@cfg)
47
-
48
- OpenTelemetry::SDK.configure do |c|
49
- bsp = OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor.new(exporter: exp, max_queue_size: 1000, max_export_batch_size: 1000, schedule_delay: 5_000)
50
- c.add_span_processor(bsp)
51
-
52
- c.service_name = @cfg.service_name
53
- c.service_version = @cfg.service_version
54
- end
34
+ # @return [OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor]
35
+ def span_processor
36
+ exp = Uptrace::Trace::Exporter.new(@dsn)
37
+ OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor.new(
38
+ exp,
39
+ max_queue_size: 1000,
40
+ max_export_batch_size: 1000,
41
+ schedule_delay: 5_000
42
+ )
55
43
  end
56
44
  end
57
45
  end
data/lib/uptrace/dsn.rb CHANGED
@@ -8,12 +8,12 @@ module Uptrace
8
8
  attr_reader :dsn, :port, *KEYS
9
9
 
10
10
  def initialize(dsn)
11
- raise ArgumentError, "uptrace: DSN can't be empty" if dsn.empty?
11
+ raise ArgumentError, "DSN can't be empty" if dsn.empty?
12
12
 
13
13
  begin
14
14
  uri = URI.parse(dsn)
15
15
  rescue URI::InvalidURIError => e
16
- raise ArgumentError, %(uptrace: can't parse DSN=#{dsn.inspect}: #{e})
16
+ raise ArgumentError, %(can't parse DSN=#{dsn.inspect}: #{e})
17
17
  end
18
18
 
19
19
  @dsn = dsn
@@ -25,7 +25,7 @@ module Uptrace
25
25
 
26
26
  KEYS.each do |k|
27
27
  v = public_send(k)
28
- raise ArgumentError, %(uptrace: DSN does not have #{k} (DSN=#{dsn.inspect})) if v.nil? || v.empty?
28
+ raise ArgumentError, %(DSN does not have #{k} (DSN=#{dsn.inspect})) if v.nil? || v.empty?
29
29
  end
30
30
  end
31
31
 
data/lib/uptrace/trace.rb CHANGED
@@ -6,5 +6,4 @@ module Uptrace
6
6
  end
7
7
  end
8
8
 
9
- require 'uptrace/trace/config'
10
9
  require 'uptrace/trace/exporter'
@@ -20,13 +20,11 @@ module Uptrace
20
20
  ##
21
21
  # @param [Config] cfg
22
22
  #
23
- def initialize(cfg)
24
- @cfg = cfg
23
+ def initialize(dsn)
24
+ @dsn = dsn
25
+ @endpoint = "/api/v1/tracing/#{@dsn.project_id}/spans"
25
26
 
26
- dsn = @cfg.dsno
27
- @endpoint = "/api/v1/tracing/#{dsn.project_id}/spans"
28
-
29
- @http = Net::HTTP.new(dsn.host, 443)
27
+ @http = Net::HTTP.new(@dsn.host, 443)
30
28
  @http.use_ssl = true
31
29
  @http.open_timeout = 5
32
30
  @http.read_timeout = 5
@@ -79,18 +77,21 @@ module Uptrace
79
77
  endTime: as_unix_nano(span.end_timestamp),
80
78
 
81
79
  resource: uptrace_resource(span.resource),
82
- attrs: span.attributes,
80
+ attrs: span.attributes
81
+ }
83
82
 
84
- statusCode: status_code_as_str(span.status.code),
85
- statusMessage: span.status.description,
83
+ out[:parentId] = span.parent_span_id.unpack1('Q') if span.parent_span_id
86
84
 
87
- tracer: uptrace_tracer(span.instrumentation_library)
88
- }
85
+ out[:events] = uptrace_events(span.events) unless span.events.nil?
86
+ out[:links] = uptrace_links(span.links) unless span.links.nil?
89
87
 
90
- out['parentId'] = span.parent_span_id.unpack1('Q') if span.parent_span_id
88
+ status = span.status
89
+ out[:statusCode] = status_code_as_str(status.code)
90
+ out[:statusMessage] = status.description unless status.description.empty?
91
91
 
92
- out['events'] = uptrace_events(span.events) unless span.events.nil?
93
- out['links'] = uptrace_links(span.links) unless span.links.nil?
92
+ il = span.instrumentation_library
93
+ out[:tracerName] = il.name
94
+ out[:tracerVersion] = il.name unless il.version.empty?
94
95
 
95
96
  out
96
97
  end
@@ -130,7 +131,7 @@ module Uptrace
130
131
  data = Zstd.compress(data, 3)
131
132
 
132
133
  req = Net::HTTP::Post.new(@endpoint)
133
- req.add_field('Authorization', "Bearer #{@cfg.dsno.token}")
134
+ req.add_field('Authorization', "Bearer #{@dsn.token}")
134
135
  req.add_field('Content-Type', 'application/msgpack')
135
136
  req.add_field('Content-Encoding', 'zstd')
136
137
  req.add_field('Connection', 'keep-alive')
@@ -216,17 +217,6 @@ module Uptrace
216
217
  end
217
218
  out
218
219
  end
219
-
220
- ##
221
- # @param [OpenTelemetry::SDK::InstrumentationLibrary] il
222
- # @return [Hash]
223
- #
224
- def uptrace_tracer(il)
225
- {
226
- name: il.name,
227
- version: il.version
228
- }
229
- end
230
220
  end
231
221
  end
232
222
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Uptrace
4
- VERSION = '0.2.0'
4
+ VERSION = '0.2.5'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: uptrace
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Uptrace Authors
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-02-18 00:00:00.000000000 Z
11
+ date: 2021-03-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: msgpack
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.14.0
33
+ version: 0.15.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: 0.14.0
40
+ version: 0.15.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: zstd-ruby
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -174,12 +174,12 @@ files:
174
174
  - ".yardopts"
175
175
  - LICENSE
176
176
  - README.md
177
+ - RELEASE.md
177
178
  - lib/uptrace.rb
178
179
  - lib/uptrace/client.rb
179
180
  - lib/uptrace/dsn.rb
180
181
  - lib/uptrace/metric.rb
181
182
  - lib/uptrace/trace.rb
182
- - lib/uptrace/trace/config.rb
183
183
  - lib/uptrace/trace/exporter.rb
184
184
  - lib/uptrace/version.rb
185
185
  homepage: https://github.com/uptrace/uptrace-ruby
@@ -1,30 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'uptrace/dsn'
4
-
5
- module Uptrace
6
- module Trace
7
- # Config is a configuration for Uptrace span exporter.
8
- class Config
9
- # @return [string] a data source name to connect to uptrace.dev.
10
- attr_accessor :dsn
11
-
12
- # @return [string] `service.name` resource attribute.
13
- attr_accessor :service_name
14
-
15
- # @return [string] `service.name` resource attribute.
16
- attr_accessor :service_version
17
-
18
- # @return [boolean] disables the exporter.
19
- attr_accessor :disabled
20
-
21
- def initialize
22
- @dsn = ENV.fetch('UPTRACE_DSN', '')
23
- end
24
-
25
- def dsno
26
- @dsno ||= DSN.new(@dsn)
27
- end
28
- end
29
- end
30
- end