codecov_opentelem 0.1.3 → 0.1.6

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: 6914eed45d30e64ce8c2982e130fc182539e953e463ec31eb5924ebac9347002
4
- data.tar.gz: bdc8110f1234339151b7a8bbc51aead42603faf263f1fc75d1fc89f73ff07993
3
+ metadata.gz: a837d9537c3dccbc0d656e4bd7c7a196073c95e5686a02252a69f267b49be89b
4
+ data.tar.gz: 6feed841349acebe12bbc6afc3f1f87f9b897d86867e9fc91a4a442f3930b10f
5
5
  SHA512:
6
- metadata.gz: 66932b7701993e76e43798ec280718293333ab88520cb1bd881f1a9f0ce653dc4680b727fb22288e082296f6479bf8fe7161d3e834c3c562c7ccce4870d8b2f2
7
- data.tar.gz: a727af20f23a98ca148612f0cc792da9733f5c8e37290a4e532ba8396a145b6129e77f1bf3e14b919407a82140ff39227a536082bd6092b1dd7bbb76032d005c
6
+ metadata.gz: c0823f094eb916153de0aae3a29496bd9f1245648159435e6c070ef86e371b9015f399efc3f54e3cc9fe45081357c524ea9c5fbf01f216fb78f3f41b3e9853f7
7
+ data.tar.gz: 7fd37d56e8ca61aac7ee18537a486a865efe4a834a77eabeb8b3dab17a002c4430cfca3a6af4b603dbbed0e598b803405cd61045b6291aaa692b5b9955adf591
data/Gemfile.lock ADDED
@@ -0,0 +1,221 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ codecov_opentelem (0.1.5)
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
@@ -1,11 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'base64'
3
4
  require 'json'
4
- require 'uri'
5
5
  require 'net/http'
6
+ require 'uri'
6
7
 
7
- require 'opentelemetry/sdk'
8
8
  require 'coverage'
9
+ require 'opentelemetry/sdk'
9
10
 
10
11
  module CoverageSpanFilter
11
12
  REGEX_NAME = 'name_regex'
@@ -14,28 +15,27 @@ end
14
15
 
15
16
  class CodecovCoverageStorageManager
16
17
  def initialize(filters)
17
- Coverage.start
18
18
  @filters = filters
19
19
  @inner = {}
20
20
  end
21
21
 
22
22
  def start_coverage_for_span(span)
23
23
  if !@filters[CoverageSpanFilter::REGEX_NAME].nil? && @filters[CoverageSpanFilter::REGEX_NAME].match(span.name)
24
+ puts 'returned false'
24
25
  return false
25
26
  end
26
27
 
27
- Coverage.resume unless Coverage.running?
28
+ Coverage.start unless Coverage.running?
28
29
  true
29
30
  end
30
31
 
31
- def stop_coverage_for_span(_span)
32
+ def stop_coverage_for_span(span)
32
33
  span_id = span.context.span_id
33
- Coverage.suspend
34
34
  @inner[span_id] = Coverage.result(stop: false, clear: true)
35
35
  end
36
36
 
37
- def pop_coverage_for_span(_span)
38
- span_id = span.context.span_id
37
+ def pop_coverage_for_span(span)
38
+ span_id = span.span_id
39
39
  @inner.delete(span_id)
40
40
  end
41
41
  end
@@ -48,10 +48,10 @@ class CodecovCoverageGenerator < OpenTelemetry::SDK::Trace::SpanProcessor
48
48
  end
49
49
 
50
50
  def on_start(span, _parent_context = nil)
51
- @cov_storage.start_coverage_for_span(span) if rand < @sample_rate
51
+ @cov_storage.start_coverage_for_span(span) if rand() < @sample_rate
52
52
  end
53
53
 
54
- def on_end(span)
54
+ def on_finish(span)
55
55
  @cov_storage.stop_coverage_for_span(span)
56
56
  end
57
57
  end
@@ -66,32 +66,59 @@ class CoverageExporter < OpenTelemetry::SDK::Trace::Export::SpanExporter
66
66
  @untracked_export_rate = untracked_export_rate
67
67
  end
68
68
 
69
- def export(spans)
69
+ def export(spans, timeout)
70
70
  tracked_spans = []
71
71
  untracked_spans = []
72
+
72
73
  spans.each do |span|
73
- cov = cov_storage.pop_coverage_for_span(span)
74
- s = JSON.parse(span)
74
+ cov = @cov_storage.pop_coverage_for_span(span)
75
+
76
+ span_hash = Hash.new
77
+ span.to_h.each do |k, v|
78
+ v = v.dup.force_encoding("ISO-8859-1").encode("UTF-8") if v.is_a? String
79
+ span_hash[k] = v
80
+ end
81
+
82
+ cov_string = cov.map{ |k, v| "\"#{k}\":[#{v.map{ |i| i.nil? ? "null" : i}.join(',')}]"}.join(',')
83
+ cov_string = "{\"coverage\":{#{cov_string}}}"
84
+
75
85
  if !cov.nil?
76
- s['codecov'] = { 'type' => 'bytes', 'coverage' => cov }
77
- tracked_spans.append(s)
78
- elsif rand < @untracked_export_rate
79
- untracked_spans.append(s)
86
+ span_hash['codecov'] = {
87
+ 'coverage': Base64.strict_encode64(cov_string),
88
+ 'type': 'bytes',
89
+ }
90
+ tracked_spans.append(span_hash)
91
+ elsif rand() < @untracked_export_rate
92
+ untracked_spans.append(span_hash)
80
93
  end
81
94
  end
82
- return SpanExportResult.SUCCESS if !tracked_spans && !untracked_spans
83
-
84
- res = Net::HTTP.post(URI.join(@codecov_url, '/profiling/uploads'),
85
- { 'code' => @code }.to_json,
86
- 'Content-Type' => 'application/json',
87
- 'Authorization' => "repotoken #{@repository_token}")
88
- return SpanExportResult.FAILURE if res.is_a?(Net::HTTPError)
89
-
90
- location = res.body.raw_upload_location
91
- Net::HTTP.put(URI(location),
92
- { 'spans' => tracked_spans,
93
- 'untracked' => untracked_spans }.to_json,
94
- 'Content-Type' => 'text/plain')
95
- SpanExportResult.SUCCESS
95
+
96
+ return OpenTelemetry::SDK::Trace::Export::SUCCESS if !tracked_spans && !untracked_spans
97
+
98
+ body = { 'profiling' => @code }.to_json
99
+ res = Net::HTTP.post(
100
+ URI.join(@codecov_url, '/profiling/uploads'),
101
+ { 'profiling' => @code }.to_json,
102
+ 'Content-Type' => 'application/json',
103
+ 'Authorization' => "repotoken #{@repository_token}"
104
+ )
105
+ return OpenTelemetry::SDK::Trace::Export::FAILURE if res.is_a?(Net::HTTPError)
106
+
107
+ location = JSON(res.body)['raw_upload_location']
108
+ uri = URI(location)
109
+ https = Net::HTTP.new(uri.host, uri.port)
110
+ https.use_ssl = true
111
+ req = Net::HTTP::Put.new(
112
+ location,
113
+ {
114
+ 'Content-Type' => 'text/plain'
115
+ }
116
+ )
117
+ req.body = {
118
+ 'spans' => tracked_spans,
119
+ 'untracked' => untracked_spans
120
+ }.to_json
121
+ https.request(req)
122
+ OpenTelemetry::SDK::Trace::Export::SUCCESS
96
123
  end
97
124
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module CodecovOpentelem
4
- VERSION = "0.1.3"
4
+ VERSION = "0.1.6"
5
5
  end
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.3
4
+ version: 0.1.6
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-17 00:00:00.000000000 Z
11
+ date: 2022-06-21 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