codecov_opentelem 0.1.1 → 0.1.4

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: 128082d6d5dce259ddabec94f998768b8554ae8d0abd99b4948548b3ac3e805a
4
- data.tar.gz: 5d2ea4cefdcd477d2ba5b3395698a99d280ffde2723802ae57e1a5950b60e724
3
+ metadata.gz: 605e855408e313442cbad82cc91a2196ac78c00b28b31392ebb29866b5b9e905
4
+ data.tar.gz: bd615050396e4f6f5b49672bb18db56c61e6da2dd7615d067177f955b2ed5d8a
5
5
  SHA512:
6
- metadata.gz: 5211a50e88b3702f431bcb2ad855703c29ce1fc09bda4ff244dbdb562329a4814bb577345d9510d1ced5e5a0074493909cf50fecd0d5a4cc4f582b9b04f0e3f4
7
- data.tar.gz: 26e4c279a3ee98c51674f61821250699eaa4a3429f6c26c57a5f174fad3eb0c48e4fc102245170a62d9c2f2603af63e5a140d68690ee7bec65a04bd93e9891bb
6
+ metadata.gz: 291d786144b93336b21540737ea4cf0983ec28eb2d03f507566d857ef8784d0a2cc7d7aaa8938473f7a15e5b16866a93761e5f81b43ad1dddf7665e9fdee9270
7
+ data.tar.gz: a1d7580bc43a5fa05246ac2920fe5ab03c4f8dad3f0ba6b1d51f670ac99ddda3639699627f27c7954eac7d65658f2a5f30c45ac2896aee22390ccc5c1c7b25ed
data/Gemfile.lock ADDED
@@ -0,0 +1,221 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ codecov_opentelem (0.1.3)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ diff-lcs (1.5.0)
10
+ google-protobuf (3.21.1-x86_64-darwin)
11
+ googleapis-common-protos-types (1.3.1)
12
+ google-protobuf (~> 3.14)
13
+ opentelemetry-api (1.0.2)
14
+ opentelemetry-common (0.19.6)
15
+ opentelemetry-api (~> 1.0)
16
+ opentelemetry-exporter-otlp (0.22.0)
17
+ google-protobuf (~> 3.19)
18
+ googleapis-common-protos-types (~> 1.3)
19
+ opentelemetry-api (~> 1.0)
20
+ opentelemetry-common (~> 0.19.6)
21
+ opentelemetry-sdk (~> 1.0)
22
+ opentelemetry-semantic_conventions
23
+ opentelemetry-instrumentation-action_pack (0.2.0)
24
+ opentelemetry-api (~> 1.0)
25
+ opentelemetry-instrumentation-base (~> 0.21.0)
26
+ opentelemetry-instrumentation-rack (~> 0.21.0)
27
+ opentelemetry-instrumentation-action_view (0.3.0)
28
+ opentelemetry-api (~> 1.0)
29
+ opentelemetry-instrumentation-active_support (~> 0.1)
30
+ opentelemetry-instrumentation-base (~> 0.20)
31
+ opentelemetry-instrumentation-active_job (0.3.0)
32
+ opentelemetry-api (~> 1.0)
33
+ opentelemetry-instrumentation-base (~> 0.21.0)
34
+ opentelemetry-instrumentation-active_model_serializers (0.19.0)
35
+ opentelemetry-api (~> 1.0)
36
+ opentelemetry-instrumentation-base (~> 0.21.0)
37
+ opentelemetry-instrumentation-active_record (0.4.0)
38
+ opentelemetry-api (~> 1.0)
39
+ opentelemetry-instrumentation-base (~> 0.21.0)
40
+ ruby2_keywords
41
+ opentelemetry-instrumentation-active_support (0.2.0)
42
+ opentelemetry-api (~> 1.0)
43
+ opentelemetry-instrumentation-base (~> 0.21.0)
44
+ opentelemetry-instrumentation-all (0.25.0)
45
+ opentelemetry-instrumentation-action_pack (~> 0.2.0)
46
+ opentelemetry-instrumentation-action_view (~> 0.3.0)
47
+ opentelemetry-instrumentation-active_job (~> 0.3.0)
48
+ opentelemetry-instrumentation-active_model_serializers (~> 0.19.0)
49
+ opentelemetry-instrumentation-active_record (~> 0.4.0)
50
+ opentelemetry-instrumentation-active_support (~> 0.2.0)
51
+ opentelemetry-instrumentation-aws_sdk (~> 0.3.0)
52
+ opentelemetry-instrumentation-bunny (~> 0.19.0)
53
+ opentelemetry-instrumentation-concurrent_ruby (~> 0.20.0)
54
+ opentelemetry-instrumentation-dalli (~> 0.22.0)
55
+ opentelemetry-instrumentation-delayed_job (~> 0.19.0)
56
+ opentelemetry-instrumentation-ethon (~> 0.20.0)
57
+ opentelemetry-instrumentation-excon (~> 0.20.0)
58
+ opentelemetry-instrumentation-faraday (~> 0.21.0)
59
+ opentelemetry-instrumentation-graphql (~> 0.20.0)
60
+ opentelemetry-instrumentation-http (~> 0.20.0)
61
+ opentelemetry-instrumentation-http_client (~> 0.20.0)
62
+ opentelemetry-instrumentation-koala (~> 0.19.0)
63
+ opentelemetry-instrumentation-lmdb (~> 0.21.0)
64
+ opentelemetry-instrumentation-mongo (~> 0.20.0)
65
+ opentelemetry-instrumentation-mysql2 (~> 0.21.0)
66
+ opentelemetry-instrumentation-net_http (~> 0.20.0)
67
+ opentelemetry-instrumentation-pg (~> 0.21.0)
68
+ opentelemetry-instrumentation-que (~> 0.4.0)
69
+ opentelemetry-instrumentation-rack (~> 0.21.0)
70
+ opentelemetry-instrumentation-rails (~> 0.22.0)
71
+ opentelemetry-instrumentation-rdkafka (~> 0.2.0)
72
+ opentelemetry-instrumentation-redis (~> 0.23.0)
73
+ opentelemetry-instrumentation-resque (~> 0.3.0)
74
+ opentelemetry-instrumentation-restclient (~> 0.20.0)
75
+ opentelemetry-instrumentation-ruby_kafka (~> 0.19.0)
76
+ opentelemetry-instrumentation-sidekiq (~> 0.22.0)
77
+ opentelemetry-instrumentation-sinatra (~> 0.20.0)
78
+ opentelemetry-instrumentation-trilogy (~> 0.51.0)
79
+ opentelemetry-instrumentation-aws_sdk (0.3.0)
80
+ opentelemetry-api (~> 1.0)
81
+ opentelemetry-instrumentation-base (~> 0.21.0)
82
+ opentelemetry-instrumentation-base (0.21.0)
83
+ opentelemetry-api (~> 1.0)
84
+ opentelemetry-registry (~> 0.1)
85
+ opentelemetry-instrumentation-bunny (0.19.0)
86
+ opentelemetry-api (~> 1.0)
87
+ opentelemetry-instrumentation-base (~> 0.21.0)
88
+ opentelemetry-instrumentation-concurrent_ruby (0.20.0)
89
+ opentelemetry-api (~> 1.0)
90
+ opentelemetry-instrumentation-base (~> 0.21.0)
91
+ opentelemetry-instrumentation-dalli (0.22.0)
92
+ opentelemetry-api (~> 1.0)
93
+ opentelemetry-common (~> 0.19.3)
94
+ opentelemetry-instrumentation-base (~> 0.21.0)
95
+ opentelemetry-instrumentation-delayed_job (0.19.0)
96
+ opentelemetry-api (~> 1.0)
97
+ opentelemetry-instrumentation-base (~> 0.21.0)
98
+ opentelemetry-instrumentation-ethon (0.20.0)
99
+ opentelemetry-api (~> 1.0)
100
+ opentelemetry-common (~> 0.19.3)
101
+ opentelemetry-instrumentation-base (~> 0.21.0)
102
+ opentelemetry-instrumentation-excon (0.20.0)
103
+ opentelemetry-api (~> 1.0)
104
+ opentelemetry-common (~> 0.19.3)
105
+ opentelemetry-instrumentation-base (~> 0.21.0)
106
+ opentelemetry-instrumentation-faraday (0.21.0)
107
+ opentelemetry-api (~> 1.0)
108
+ opentelemetry-common (~> 0.19.3)
109
+ opentelemetry-instrumentation-base (~> 0.21.0)
110
+ opentelemetry-instrumentation-graphql (0.20.0)
111
+ opentelemetry-api (~> 1.0)
112
+ opentelemetry-instrumentation-base (~> 0.21.0)
113
+ opentelemetry-instrumentation-http (0.20.0)
114
+ opentelemetry-api (~> 1.0)
115
+ opentelemetry-instrumentation-base (~> 0.21.0)
116
+ opentelemetry-instrumentation-http_client (0.20.0)
117
+ opentelemetry-api (~> 1.0)
118
+ opentelemetry-common (~> 0.19.3)
119
+ opentelemetry-instrumentation-base (~> 0.21.0)
120
+ opentelemetry-instrumentation-koala (0.19.0)
121
+ opentelemetry-api (~> 1.0)
122
+ opentelemetry-common (~> 0.19.3)
123
+ opentelemetry-instrumentation-base (~> 0.21.0)
124
+ opentelemetry-instrumentation-lmdb (0.21.0)
125
+ opentelemetry-api (~> 1.0)
126
+ opentelemetry-instrumentation-base (~> 0.21.0)
127
+ opentelemetry-instrumentation-mongo (0.20.0)
128
+ opentelemetry-api (~> 1.0)
129
+ opentelemetry-instrumentation-base (~> 0.21.0)
130
+ opentelemetry-instrumentation-mysql2 (0.21.0)
131
+ opentelemetry-api (~> 1.0)
132
+ opentelemetry-instrumentation-base (~> 0.21.0)
133
+ opentelemetry-instrumentation-net_http (0.20.0)
134
+ opentelemetry-api (~> 1.0)
135
+ opentelemetry-common (~> 0.19.3)
136
+ opentelemetry-instrumentation-base (~> 0.21.0)
137
+ opentelemetry-instrumentation-pg (0.21.0)
138
+ opentelemetry-api (~> 1.0)
139
+ opentelemetry-instrumentation-base (~> 0.21.0)
140
+ opentelemetry-instrumentation-que (0.4.0)
141
+ opentelemetry-api (~> 1.0)
142
+ opentelemetry-instrumentation-base (~> 0.21.0)
143
+ opentelemetry-instrumentation-rack (0.21.0)
144
+ opentelemetry-api (~> 1.0)
145
+ opentelemetry-common (~> 0.19.3)
146
+ opentelemetry-instrumentation-base (~> 0.21.0)
147
+ opentelemetry-instrumentation-rails (0.22.0)
148
+ opentelemetry-api (~> 1.0)
149
+ opentelemetry-instrumentation-action_pack (~> 0.2.0)
150
+ opentelemetry-instrumentation-action_view (~> 0.3.0)
151
+ opentelemetry-instrumentation-active_record (~> 0.4.0)
152
+ opentelemetry-instrumentation-active_support (~> 0.2.0)
153
+ opentelemetry-instrumentation-base (~> 0.21.0)
154
+ opentelemetry-instrumentation-rdkafka (0.2.0)
155
+ opentelemetry-api (~> 1.0.0)
156
+ opentelemetry-common (~> 0.19.3)
157
+ opentelemetry-instrumentation-base (~> 0.21.0)
158
+ opentelemetry-instrumentation-redis (0.23.0)
159
+ opentelemetry-api (~> 1.0)
160
+ opentelemetry-common (~> 0.19.3)
161
+ opentelemetry-instrumentation-base (~> 0.21.0)
162
+ opentelemetry-instrumentation-resque (0.3.0)
163
+ opentelemetry-api (~> 1.0)
164
+ opentelemetry-instrumentation-base (~> 0.21.0)
165
+ opentelemetry-instrumentation-restclient (0.20.0)
166
+ opentelemetry-api (~> 1.0)
167
+ opentelemetry-common (~> 0.19.3)
168
+ opentelemetry-instrumentation-base (~> 0.21.0)
169
+ opentelemetry-instrumentation-ruby_kafka (0.19.0)
170
+ opentelemetry-api (~> 1.0)
171
+ opentelemetry-instrumentation-base (~> 0.21.0)
172
+ opentelemetry-instrumentation-sidekiq (0.22.0)
173
+ opentelemetry-api (~> 1.0)
174
+ opentelemetry-common (~> 0.19.3)
175
+ opentelemetry-instrumentation-base (~> 0.21.0)
176
+ opentelemetry-instrumentation-sinatra (0.20.0)
177
+ opentelemetry-api (~> 1.0)
178
+ opentelemetry-common (~> 0.19.3)
179
+ opentelemetry-instrumentation-base (~> 0.21.0)
180
+ opentelemetry-instrumentation-trilogy (0.51.0)
181
+ opentelemetry-api (~> 1.0)
182
+ opentelemetry-instrumentation-base (~> 0.21.0)
183
+ opentelemetry-semantic_conventions (>= 1.8.0)
184
+ opentelemetry-registry (0.1.0)
185
+ opentelemetry-api (~> 1.0.1)
186
+ opentelemetry-sdk (1.1.0)
187
+ opentelemetry-api (~> 1.0)
188
+ opentelemetry-common (~> 0.19.3)
189
+ opentelemetry-registry (~> 0.1)
190
+ opentelemetry-semantic_conventions
191
+ opentelemetry-semantic_conventions (1.8.0)
192
+ opentelemetry-api (~> 1.0)
193
+ rake (13.0.6)
194
+ rspec (3.11.0)
195
+ rspec-core (~> 3.11.0)
196
+ rspec-expectations (~> 3.11.0)
197
+ rspec-mocks (~> 3.11.0)
198
+ rspec-core (3.11.0)
199
+ rspec-support (~> 3.11.0)
200
+ rspec-expectations (3.11.0)
201
+ diff-lcs (>= 1.2.0, < 2.0)
202
+ rspec-support (~> 3.11.0)
203
+ rspec-mocks (3.11.1)
204
+ diff-lcs (>= 1.2.0, < 2.0)
205
+ rspec-support (~> 3.11.0)
206
+ rspec-support (3.11.0)
207
+ ruby2_keywords (0.0.5)
208
+
209
+ PLATFORMS
210
+ x86_64-darwin-21
211
+
212
+ DEPENDENCIES
213
+ codecov_opentelem!
214
+ opentelemetry-exporter-otlp
215
+ opentelemetry-instrumentation-all
216
+ opentelemetry-sdk
217
+ rake (~> 13.0)
218
+ rspec
219
+
220
+ BUNDLED WITH
221
+ 2.3.16
@@ -14,6 +14,7 @@ end
14
14
 
15
15
  class CodecovCoverageStorageManager
16
16
  def initialize(filters)
17
+ Coverage.start
17
18
  @filters = filters
18
19
  @inner = {}
19
20
  end
@@ -23,18 +24,18 @@ class CodecovCoverageStorageManager
23
24
  return false
24
25
  end
25
26
 
26
- Coverage.resume
27
+ Coverage.resume unless Coverage.running?
27
28
  true
28
29
  end
29
30
 
30
- def stop_coverage_for_span(_span)
31
- span_id = span.context.span_id
31
+ def stop_coverage_for_span(span)
32
+ span_id = span.span_id
32
33
  Coverage.suspend
33
34
  @inner[span_id] = Coverage.result(stop: false, clear: true)
34
35
  end
35
36
 
36
- def pop_coverage_for_span(_span)
37
- span_id = span.context.span_id
37
+ def pop_coverage_for_span(span)
38
+ span_id = span.span_id
38
39
  @inner.delete(span_id)
39
40
  end
40
41
  end
@@ -47,7 +48,7 @@ class CodecovCoverageGenerator < OpenTelemetry::SDK::Trace::SpanProcessor
47
48
  end
48
49
 
49
50
  def on_start(span, _parent_context = nil)
50
- @cov_storage.possibly_start_cov_for_span(span) if rand < @sample_rate
51
+ @cov_storage.start_coverage_for_span(span) if rand < @sample_rate
51
52
  end
52
53
 
53
54
  def on_end(span)
@@ -65,12 +66,19 @@ class CoverageExporter < OpenTelemetry::SDK::Trace::Export::SpanExporter
65
66
  @untracked_export_rate = untracked_export_rate
66
67
  end
67
68
 
68
- def export(spans)
69
+ def export(spans, timeout)
69
70
  tracked_spans = []
70
71
  untracked_spans = []
71
72
  spans.each do |span|
72
- cov = cov_storage.pop_cov_for_span(span)
73
- s = JSON.parse(span)
73
+ cov = @cov_storage.pop_coverage_for_span(span)
74
+
75
+ span_hash = Hash.new
76
+ span.to_h.each do |k, v|
77
+ v = v.dup.force_encoding("ISO-8859-1").encode("UTF-8") if v.is_a? String
78
+ span_hash[k] = v
79
+ end
80
+ s = span_hash.to_json
81
+
74
82
  if !cov.nil?
75
83
  s['codecov'] = { 'type' => 'bytes', 'coverage' => cov }
76
84
  tracked_spans.append(s)
@@ -78,19 +86,32 @@ class CoverageExporter < OpenTelemetry::SDK::Trace::Export::SpanExporter
78
86
  untracked_spans.append(s)
79
87
  end
80
88
  end
81
- return SpanExportResult.SUCCESS if !tracked_spans && !untracked_spans
82
-
83
- res = Net::HTTP.post(URI.join(@codecov_url, '/profiling/uploads'),
84
- { 'code' => @code }.to_json,
85
- 'Content-Type' => 'application/json',
86
- 'Authorization' => "repotoken #{@repository_token}")
87
- return SpanExportResult.FAILURE if res.is_a?(Net::HTTPError)
88
-
89
- location = res.body.raw_upload_location
90
- Net::HTTP.put(URI(location),
91
- { 'spans' => tracked_spans,
92
- 'untracked' => untracked_spans }.to_json,
93
- 'Content-Type' => 'text/plain')
94
- SpanExportResult.SUCCESS
89
+ return OpenTelemetry::SDK::Trace::Export::SUCCESS if !tracked_spans && !untracked_spans
90
+
91
+ body = { 'profiling' => @code }.to_json
92
+ res = Net::HTTP.post(
93
+ URI.join(@codecov_url, '/profiling/uploads'),
94
+ { 'profiling' => @code }.to_json,
95
+ 'Content-Type' => 'application/json',
96
+ 'Authorization' => "repotoken #{@repository_token}"
97
+ )
98
+ return OpenTelemetry::SDK::Trace::Export::FAILURE if res.is_a?(Net::HTTPError)
99
+
100
+ location = JSON(res.body)['raw_upload_location']
101
+ uri = URI(location)
102
+ https = Net::HTTP.new(uri.host, uri.port)
103
+ https.use_ssl = true
104
+ req = Net::HTTP::Put.new(
105
+ location,
106
+ {
107
+ 'Content-Type' => 'text/plain'
108
+ }
109
+ )
110
+ req.body = {
111
+ 'spans' => tracked_spans,
112
+ 'untracked' => untracked_spans
113
+ }.to_json,
114
+ https.request(req)
115
+ OpenTelemetry::SDK::Trace::Export::SUCCESS
95
116
  end
96
117
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module CodecovOpentelem
4
- VERSION = "0.1.1"
4
+ VERSION = "0.1.4"
5
5
  end
@@ -40,9 +40,9 @@ def get_codecov_opentelemetry_instances(
40
40
  'Authorization' => "repotoken #{repository_token}")
41
41
  raise UnableToStartProcessorException if res.is_a?(Net::HTTPError)
42
42
  end
43
- manager = CodecovCoverageStorageManager(filters)
44
- generator = CodecovCoverageGenerator(manager, sample_rate)
45
- exporter = CoverageExporter(
43
+ manager = CodecovCoverageStorageManager.new(filters)
44
+ generator = CodecovCoverageGenerator.new(manager, sample_rate)
45
+ exporter = CoverageExporter.new(
46
46
  manager, repository_token, code, codecov_url, untracked_export_rate
47
47
  )
48
48
  [generator, exporter]
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: codecov_opentelem
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ahmed-Elghrbawy
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-06-02 00:00:00.000000000 Z
11
+ date: 2022-06-17 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email:
@@ -19,6 +19,7 @@ extra_rdoc_files: []
19
19
  files:
20
20
  - CHANGELOG.md
21
21
  - Gemfile
22
+ - Gemfile.lock
22
23
  - LICENSE.txt
23
24
  - README.md
24
25
  - Rakefile
@@ -31,7 +32,7 @@ licenses:
31
32
  metadata:
32
33
  homepage_uri: https://github.com/codecov/opentelem-ruby
33
34
  source_code_uri: https://github.com/codecov/opentelem-ruby
34
- changelog_uri: https://github.com/codecov/opentelem-ruby/blob/master/CHANGELOG.md
35
+ changelog_uri: https://github.com/codecov/opentelem-ruby/releases
35
36
  post_install_message:
36
37
  rdoc_options: []
37
38
  require_paths: